Вторник, 23 Апреля 2024, 21:23

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » И снова Массивы (Все очевидно по названию. xDUO)
И снова Массивы
dikfairДата: Четверг, 05 Сентября 2013, 13:18 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Сразу к вопросу.

У меня в колизии обьекта айтема и ГГ стоит такой код

if(keyboard_check(ord('I')))
{
for (i=0; i<=3; i+=1)
{
if massiv[i]==-1
{massiv[i]=other.id_o;
with other instance_destroy()
break;}
}
}

Теперь когда инвентарь доконца наполняется и подбирает новый предмет выдает ошибку..
Соответственно мне нуно что вместе с нажатием клавиши прошла проверка на наличие пустого элемента масива и потом уже если есть то что выполняла этот код.

Помогите с кодом, логику саму я понимаю.



Объект 25 - Исследовательская игра на выживание
LunarPixelДата: Четверг, 05 Сентября 2013, 13:24 | Сообщение # 2
старожил
Сейчас нет на сайте
А что за ошибка то?! По идеи, никакой ошибки быть не должно. У тебя проверяется каждый элемент массива, если находится пустой, то в него идет запись, если пустого нет, то ничего не происходит.

dikfairДата: Четверг, 05 Сентября 2013, 13:29 | Сообщение # 3
почетный гость
Сейчас нет на сайте
___________________________________________
ERROR in
action number 1
of Draw Event
for object sys:

Error in code at line 18:
if(GGG.massiv[i]=1)
^
at position 9: Unknown variable massiv or array index out of bounds



Объект 25 - Исследовательская игра на выживание
GameMixДата: Четверг, 05 Сентября 2013, 13:36 | Сообщение # 4
старожил
Сейчас нет на сайте
dikfair, неизвестный массив massiv или выход за пределы массива.

Steel Standoff - 2D аркада.
Мои статьи
LunarPixelДата: Четверг, 05 Сентября 2013, 13:37 | Сообщение # 5
старожил
Сейчас нет на сайте
А теперь весь код с GGG.massiv[i]=1 кинь )
Ошибка то не в том, что ты в первом посте написал )


dikfairДата: Четверг, 05 Сентября 2013, 13:42 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Код
if(stats=1)//Условие стоящее до него
{
draw_sprite(sprite5_go,1,view_xview[0]+0,view_yview[0]+0)
draw_set_alpha(1)
draw_set_font(Font);
draw_set_color(c_white);
draw_text(view_xview[0]+10,view_yview[0]+10,"Health:" + string(GGG.heal) + "/" + string(GGG.h_max));//Здоровье
draw_text(view_xview[0]+10,view_yview[0]+50,"Power:"+string(aspects));//Сила
draw_text(view_xview[0]+1350,view_yview[0]+10,"Inventory");//Инвентарь
draw_sprite(Iaaach,0,view_xview[0]+1430,view_yview[0]+80)
draw_text(view_xview[0]+1470,view_yview[0]+65,string(GGG.i+1)+"/"+string(GGG.massiv_max+1));//Рисуем айди ячейки инвентаря
draw_text(view_xview[0]+10,view_yview[0]+90,"Energy:"+string(GGG.Energy)+'/'+string(GGG.Energy_max))
if(GGG.massiv[i]=1)//Герой нашей программы
{
draw_sprite(sprite15,0,view_xview[0]+1430,view_yview[0]+80)
}
if(GGG.massiv[i]=3)//И следующее условие
{
draw_sprite(wood_item,0,view_xview[0]+1430,view_yview[0]+80)
}

Кинул его вдобавок с передыдущим и последующим чтобы уж точно =).



Объект 25 - Исследовательская игра на выживание
LunarPixelДата: Четверг, 05 Сентября 2013, 13:47 | Сообщение # 7
старожил
Сейчас нет на сайте
А от куда у тебя в этом коде берется i? )

dikfairДата: Четверг, 05 Сентября 2013, 13:51 | Сообщение # 8
почетный гость
Сейчас нет на сайте
В Шаге я начертал следующее предназначение:(Не пытался нести никакого смысла кроме как что я написал в шаге)
Код
i=GGG.i



Объект 25 - Исследовательская игра на выживание
LunarPixelДата: Четверг, 05 Сентября 2013, 13:56 | Сообщение # 9
старожил
Сейчас нет на сайте
Ну тут надо глубже копнуть, что-то ты мудришь, попробуй просто так сделать:

Код
for (i=0; i<=3; i+=1)  
{  
if(GGG.massiv[i]=1)//Герой нашей программы  
{  
draw_sprite(sprite15,0,view_xview[0]+1430,view_yview[0]+80)  
}  
}


Код
for (i=0; i<=3; i+=1)  
{  
if(GGG.massiv[i]=3)//И следующее условие  
{  
draw_sprite(wood_item,0,view_xview[0]+1430,view_yview[0]+80)  
}
}


dikfairДата: Четверг, 05 Сентября 2013, 14:01 | Сообщение # 10
почетный гость
Сейчас нет на сайте
Ошибки теперь такой не выдает и не поднимает, но... и спрайты теперь не отображаются хД


Объект 25 - Исследовательская игра на выживание
LunarPixelДата: Четверг, 05 Сентября 2013, 14:07 | Сообщение # 11
старожил
Сейчас нет на сайте
Запиши в объекте героя:

В create:

Код
for (i=0; i<=3; i+=1)   
{   
massiv[i]=-1   
}


В столкновении с предметом:

Код
if(keyboard_check(ord('I')))   
{   
for (i=0; i<=3; i+=1)   
{   
if massiv[i]==-1   
{massiv[i]=other.id_o;   
with other instance_destroy()   
break;}   
}   
}


В draw:

Код
for (i=0; i<=3; i+=1)    
{    
if(massiv[i]==3)
{    
draw_sprite(wood_item,0,view_xview[0]+1430,view_yview[0]+80)    
}   
}


Ну и у объекта, который будет брать герой, в create:

Код
id_o=3;


dikfairДата: Четверг, 05 Сентября 2013, 14:16 | Сообщение # 12
почетный гость
Сейчас нет на сайте
Думаю вот оно счастье, как тут же обнаруживаю следующую ошибку, спрайт после этого остается там рисоваться, и вторую нечего не подбираеться, но создается как буд-то баговый элемент массива ну вторая проблема это еще ладно. Вопрос что же теперь нельзя этого бедное спрайтика согнать от туда=(


Объект 25 - Исследовательская игра на выживание
LunarPixelДата: Четверг, 05 Сентября 2013, 14:28 | Сообщение # 13
старожил
Сейчас нет на сайте
Цитата (dikfair)
спрайт после этого остается там рисоваться

Ну а что с ним должно происходить, если ты его рисуешь!? ))

Можно только 3 раза взять предмет, после этого брать предметы больше не получится. При этом, если хоть один из этих предметов содержит id_o=3, то будет рисоваться спрайт wood_item, пока хоть одна из 3-ек хранится в массиве.

Напиши, например, в step:

Код
if(keyboard_check_pressed(ord('N')))    
{    
for (i=0; i<=3; i+=1)    
{    
if massiv[i]!=-1    
{massiv[i]=-1;
break;}    
}    
}


Тогда при нажатии на N массив будет постепенно очищаться от взятых предметов. Взял один предмет с id_o=3, нарисовался спрайт wood_item, нажал на N и тройка удалится из массива, а в след за ней и спрайт wood_item перестанет рисоваться. Если взял три предмета с id_o=3, то чтобы wood_item перестал рисоваться, надо все элементы массива очистить, т.е. нажать на N три раза.

Это все так, для теста и понимания )


dikfairДата: Четверг, 05 Сентября 2013, 14:44 | Сообщение # 14
почетный гость
Сейчас нет на сайте
Я немножечко ошибся на сказав тогда что отрисовка остается после того как обьект выбрасывает один из этих обьектов. Какой мне теперь код нужно чтобы если при нажатии на Б в massiv[i](это тот который видно на экране) присутствует 3, то она становилась -1 и при этом спрайт тут же перестает рисоваться.

Тобиш мне не нужно чтобы он проверял на наличие в элементах хоть где либо наличие тройки, мне нужно чтобы именно теперешнее i проверялось, а не полностью массив и рисовал спрайт в зависимости от его айди.

Теперь мне вообще не понять того что находиться в инвентаре и сколько=(... А начиналось все с простого бага переполненого инвентаря... хелп ми плиииз=(((.(При попытке вернусь то что у меня раньше стояло в отрисовке выводит ошибку которая была только при перенаполнении инвентаря). Простыми словами ошибка из переполненого инвентаря теперь воообще выдаеться из-за присутствия инвентаря на екране...

UPD: Все вернул на круги своя, старый баг тоже вернулся. Мне нужно чтобы код проверял только тот элемент масивая который выбран, код на его выбор работает и выбирает нормально переключая массивы, так вот в зависимости от того элемента масива чтовыбран и отображался спрайт. Как мне правильно написать это условие.



Объект 25 - Исследовательская игра на выживание


Сообщение отредактировал dikfair - Четверг, 05 Сентября 2013, 15:08
CreatingOverДата: Четверг, 05 Сентября 2013, 17:33 | Сообщение # 15
ColdGamedev
Сейчас нет на сайте
С переполненным инвентарем проблемы не вижу. И да, судя по коду ты.. Ээ я не очень понял с частью кода with other. Ты уничтожаешь элемент массива? Игрока? Событие? Вещи? Я что-то со школы сегодня туплю. Объясни подробнее.

Я снова с вами:з
Возвращение легенды. (нет)
dikfairДата: Четверг, 05 Сентября 2013, 19:39 | Сообщение # 16
почетный гость
Сейчас нет на сайте
Спасиб за попытку помочь, но я уже разобрался.. Ошибка состояла в том что создавался левый массив который был выше максимального, и его не кто не мог отрисовать так как его в тоже самое время и не сущствовало. После сна в несколько часов, моя голова на свежий ум подсказала мне прописать в ходе игрока код на тот случай когда элементы масива создаються выше предела он возвращает ему циферку предела. Не самый лучший вариант но рабочий.


Объект 25 - Исследовательская игра на выживание
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » И снова Массивы (Все очевидно по названию. xDUO)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг