Трабл с присвоением переменных объекту :(

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Game Maker Форум / Вопросы и Ответы (Для Начинающих) / Трабл с присвоением переменных объекту :(

Страницы: 1  новая тема

Автор Сообщение

частый гость
Группа: Участники
Сообщений: 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) и с ней уже производить манипуляции. Тогда мы ее не потеряем.

частый гость
Группа: Участники
Сообщений: 29
Добавлено: 19-12-2005 14:43
Ты сам себе сделал кучу лишних проблем с глобальными переменными. Можно сделать все намного проще, например так:
_temp=instance_create(<создание объекта>)
with _temp
{
path=<путь>
xpath=<х-координата>
f=1 //служебная переменная для КАЖДОГО объекта
}
Таким образом, для каждого объекта, есть свой набор переменных. Кроме того, в твоем коде есть ошибка (или опечатка). В событии step для объекта ты пишешь проверку для global.f, а чтобы путь каждый степ не начинался заново, обнуляешь ЛОКАЛЬНУЮ переменную f. В перложенном выше решении просто сделая проверку для локальной f.

Страницы: 1  новая тема
Раздел: 
Game Maker Форум / Вопросы и Ответы (Для Начинающих) / Трабл с присвоением переменных объекту :(

Отвечать на темы в данном разделе могут только зарегистрированные пользователи

Отвечать на темы могут только зарегистрированные пользователи

KXK.RU