Делая инвентарь, столкнулся с проблемой. При поднятии первого предмета, он хорошо отображается в ячейке, но если поднять больше двух, то последующие не будут отображаться, однако кол-во их выводится.
В Create инвентаря:
Код
w = 5;
slot_x = sprite_width;
for(i = 0; i < w; i++){
sprite[i] = 0; //Спрайт предмета
name[i] = ''; //Название предмета
object[i] = 0; //Индекс объекта
number[i] = 0; //Кол-во предмета
max_number[i] = 0; //Максимальное кол-во
}
В Draw инвентаря:
Код
x=view_xview+64;
y=view_yview+415;
x=view_xview+64;
y=view_yview+415;
draw_set_font(c_white);
for(i = 0; i < w; i += 1){
draw_sprite(sprite_index,image_index,x+i*slot,y); //Отрисовываем ячейки
if(name[i] != ''){ //Если в инвентаре что-то есть
draw_sprite(sprite[i],image_index,x+(i+0.3)*slot,y+(i+0.3)*slot); //Отрисовываем предмет
draw_text(x+i*slot,y,number[i]); //Отрисовываем количество
}
}
Перетаскивание предмета в инвентарь осуществляется за счет объекта родителя. Как я понимаю, в нем и есть ошибка.
В столкновении с игроком в родителе, который присваивается остальным предметам:
Код
for(i = 0; i < o_inv.w; i++){
if(o_inv.name[i] == ''){ //Если предмета нет
o_inv.sprite[i] = sprite_index; //Присваиваем спрайт
o_inv.object[i] = object_index; //Присваиваем индекс объекта
o_inv.name[i] = name; //Присваиваем имя
o_inv.max_number[i] = maxnumber; //Присваиваем макс. кол-во
o_inv.number[i]++; //Прибавляем предмет на единицу
instance_destroy(); //Удаляем предмет
exit;
}
if(o_inv.name[i] == name){ //Если предмета нет
if(o_inv.number[i] < maxnumber){ //Если стак не полный
o_inv.sprite[i] = sprite_index; //Присваиваем спрайт
o_inv.object[i] = object_index; //Присваиваем индекс объекта
o_inv.name[i] = name; //Присваиваем имя
o_inv.max_number[i] = maxnumber; //Присваиваем макс. кол-во
o_inv.number[i]++; //Прибавляем предмет на единицу
instance_destroy(); //Удаляем предмет
exit;
}
}
}
Когда-то давно видел подобную реализацию инвентаря у Два_Кота. Скрин проблемы ниже (синее - предмет, кол-во - черным в верхнем левом углу).