Четверг, 28 Марта 2024, 21:00

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Массивы
Массивы
vampir0305Дата: Четверг, 19 Марта 2015, 20:03 | Сообщение # 1
Unity C# Programmer
Сейчас нет на сайте
Как мне записать в массив несколько объектов и потом прочитать их все из этого массива?

Кароче мне надо записать блоки в массив
Код

blocks[0] = obj_grass
blocks[1] = obj_rock
blocks[2] = obj_wood
blocks[3] = obj_dirt


И прочитать потом в этой функции все эти блоки
Код

for(i=0; i < 4; i+=1)
{
blocks[i] = i
}

if !collision_line(x,y,obj_hero.x,obj_hero.y,blocks[i],false,false)


Я думаю вы поняли. Так как же это сделать?


Красочная сюжетно-ориентированная игра-головоломка
aFriendДата: Четверг, 19 Марта 2015, 20:11 | Сообщение # 2
участник
Сейчас нет на сайте
Не вижу смысла заносить их в массив: можно просто создать обьект-родитель для этих обьектов, но если создать массив все-таки нужно, то как вариант, можно создавать твоим способом:
Цитата vampir0305 ()

blocks[0] = obj_grass
blocks[1] = obj_rock
blocks[2] = obj_wood
blocks[3] = obj_dirt

а читать:
Код
for(i=0; i < 4; i+=1)
{
if(!collision_line(x,y,obj_hero.x,obj_hero.y,blocks[i],false,false)){
что-то делать;
break (при необходимости);
}
}


Сообщение отредактировал aFriend - Четверг, 19 Марта 2015, 20:15
XDominatorДата: Пятница, 20 Марта 2015, 09:07 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Я конечно могу ошибаться, но насколько я помню, попытка внесения метаданных в виде имени объекта в переменную приведет не к занесению имени объекта, а к занесению id первого(или последнего) созданного instance этого класса, потому этот код работать не будет. Чтобы организовать такую штуку, нужно будет пользоваться execute или execute_string (не помню как там оно точно называется, нет под рукой мануала.

Проще говоря, это будет выглядеть как то так:

Код

blocks_names[0] = "obj_grass";
blocks_names[1] = "obj_rock";
...



А уже дальше начинается всякая магия и шаманство. Например, если мы хотим создать по 1му инстансу каждого класса из нашего массива, то нужно использовать примерно вот такой костыль:

Код

i = 0;

while (i < massive_size)
{
  execute_string("instances[" + string(i) + "] = create_instance(100, 100, " + blocks_names[i] +");");
  i++;
}


При компиляции получатся следующие 2 выражения в коде на этом месте:

execute_string("instances[0] = create_instance(100, 100, obj_grass);");
execute_string("instances[1] = create_instance(100, 100, obj_rock);");

Вот как то так...


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
EshfordДата: Пятница, 20 Марта 2015, 09:59 | Сообщение # 4
Богиня Гамака ♥
Сейчас нет на сайте
Крайне не рекомендую использовать execute_string() поскольку функция давно не поддерживается в более новых версиях. Если планируется компиляция на новых версиях, придется код переписать.
XDominatorДата: Пятница, 20 Марта 2015, 11:03 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Да, реально. Выходит что сейчас такое можно реализовать только копируя код до бесконечности? smile

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
OpenGOOДата: Пятница, 20 Марта 2015, 13:23 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Тоже самое, но в стиле GMS

Код
instances[i] = create_instance(100, 100, asset_get_index(blocks_names[i]));


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
aFriendДата: Пятница, 20 Марта 2015, 15:55 | Сообщение # 7
участник
Сейчас нет на сайте
Цитата vampir0305 ()
Как мне записать в массив несколько объектов и потом прочитать их из этого массива?
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Массивы
  • Страница 1 из 1
  • 1
Поиск:

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