|
[ На главную ] -- [ Список участников ] -- [ Правила форума ] -- [ Зарегистрироваться ] |
On-line: |
Game Maker Форум / Вопросы и Ответы (Для Начинающих) / Трабл с присвоением переменных объекту :( |
Страницы: 1 |
Автор | Сообщение |
vaf частый гость Группа: Участники Сообщений: 19 |
Добавлено: 07-12-2005 22:19 |
Вот такая супер проблема возникла у меня, в голову ничего не приходит. Я делаю скролл-шутер и хочу сделать чтобы вражеские юниты двигались по разным путям. Ну взял написовал несколько путей (p1,p2,p3,p4 ...) для юнитов сделал "объект-инициализатор" (ini_enemy), т.е. как только этот объект появляется в окне, он создает определенный объект юнита со своими параметрами. Вот что я написал в событии степа: x = x - global.l1speed; // Двигаем объект инициализатор // global.unit - название объекта // global.path - пуь по которому двигаться объекту // global.pspeed - скорость движения по пути // global.bspeed - скорость движения до пути // global.xpath - координата по x с которой начинать движение по пути path if x = 1024 // Как только он появляется на экране { if (id = 101155 || id = 101156) // Если он имеет один из этих id {global.unit = enemy_1; global.path = p1; global.pspeed = 8; global.bspeed = -2; global.xpath = 1062} // Задаем эти глобальные переменные if (id = 101159) {global.unit = enemy_1; global.path = p2; global.pspeed = 8; global.bspeed = -2; global.xpath = 1062} instance_create(x,y,global.unit) // Создаем нужный нам объект имходя из глобальных переменных instance_destroy() // Сам "объект-инициализатор" уничтожаем } global.f = 1 // Это просто служебная переменная, (не обращайте внимания, проблема не в ней) Смысл надеюсь понятен. Как только объект инициализатор оказывается в пределах экрана, на его позиции образуется нужный нам объект и выставляются глобальные переменные. Теперь код самого объекта (на примере enemy_1). Вот что я написал в событии спепа if x = global.xpath && global.f = 1 // Если позиция x сравнялась с позицией xpath { path_start(global.path,global.pspeed,2,false) // начинаем движение по заданному нам пути f = 0 } if (x <= -40 || x > 1064) {instance_destroy();} // И вот в чем собственно проблема - если пока x не дошел еще до global.xpath в экране появляется еще какой нибудь объект, а соответственно xpath тоже меняется уже для другого объекта, этот объект теряет свой xpath и получается полная лажа. Надеюсь понятно изложил суть проблемы ? Какие будут мнения по ее решению ? P.S. Пока писал появилась одна идейка, в событии создания объекта глобальную переменную сразу же переносить в локальную для этого объекта (например xobj = global.xpath) и с ней уже производить манипуляции. Тогда мы ее не потеряем. |
|
Nordsoft частый гость Группа: Участники Сообщений: 29 |
Добавлено: 19-12-2005 14:43 |
Ты сам себе сделал кучу лишних проблем с глобальными переменными. Можно сделать все намного проще, например так: _temp=instance_create(<создание объекта>) with _temp { path=<путь> xpath=<х-координата> f=1 //служебная переменная для КАЖДОГО объекта } Таким образом, для каждого объекта, есть свой набор переменных. Кроме того, в твоем коде есть ошибка (или опечатка). В событии step для объекта ты пишешь проверку для global.f, а чтобы путь каждый степ не начинался заново, обнуляешь ЛОКАЛЬНУЮ переменную f. В перложенном выше решении просто сделая проверку для локальной f. |
Страницы: 1 |
Game Maker Форум / Вопросы и Ответы (Для Начинающих) / Трабл с присвоением переменных объекту :( |