2016-04-30 1 views
0

Это мой код (Размещенный на этапе событии)Game Maker - Не все объекты работают

if (place_meeting(x,y,Obj_Player)) 
{ 
    time = 50 
} 
if (time > 0) 
{ 
    Obj_Player.jsp = 17; 
} 
else 
{ 
    Obj_Player.jsp = 12; 
} 
if (time > 0) time -= 1; 

Размещенного в создании события:

image_speed = 0.4; 
time = 0; 
new = 17 

По какой-то причине, один объект с этим кодом будет работать, а остальное не будет. Я понятия не имею, почему и мне нужно несколько предметов в комнате.

Кроме того, элементы в событии создания, я хотел бы перейти в код создания каждого отдельного элемента. Я только хочу отредактировать new, так что мне нужно будет переместить весь код или просто new?

ответ

1

Когда вы используете Obj_Player.blablabla, GMS получит первый созданный экземпляр объекта. Вам нужна функция использования, которая вернет пример id. Например, instance_place(). Я не уверен, что именно вы делаете, поэтому код может быть непригодным для использования:

Пример с одним глобальным таймером для всех случаев:

var obj = instance_place(x, y, Obj_Player); 
if obj != noone 
{ 
    with Obj_Player 
    { 
     time = 50; 
    } 
} 

with Obj_Player 
{ 
    if (time > 0) time--; 
} 

Следующая является Obj_Player:

// Create 
time = 0; 

// Step 
if time > 0 
    jsp = 17; 
else 
    jsp = 12; 


Пример с независимым местным таймером для каждого экземпляра:

var obj = instance_place(x, y, Obj_Player); 
if obj != noone 
    obj.time = 50; 

Следующая является Obj_Player:

// Create 
time = 0; 

// Step 
if time > 0 
    jsp = 17; 
else 
    jsp = 12; 

if (time > 0) time--; 

UPD:

Просто уточнить, у меня есть один Obj_Player и несколько элементов, которые содержат код.

Я думаю, я понимаю, что вы пытаетесь сделать

Obj_Player, Создать:

time = 0; 

Obj_Player, Collision событие (с вашего объекта):

time = 50; 

Obj_Player, шаг случае:

time--; 
if time > 0 
    jsp = 17; 
else 
    jsp = 12; 

Вот и все.

Как видите, весь код размещен по адресу Obj_Player. Потому что, когда вы делаете

if time > 0 
    Obj_Player.jsp = 17; 
else 
    Obj_Player.jsp = 12; 

и у вас есть несколько экземпляров с этим кодом, jsp будет 17 только тогда, когда все экземпляры будут есть time > 0. Фактически, jsp будет содержать результат проверки последнего экземпляра (поскольку последняя проверка в любом случае заменит любые предыдущие результаты).




Кроме того, элементы в создании события, я хотел бы перейти в код создания каждого отдельного элемента. Я только хочу отредактировать new, так что мне нужно будет переместить весь код или просто new?

Только new. Сначала будет называться событие Create (если мы говорим о GMS, а не о GM8), а затем Creation code, поэтому с помощью Creation code вы можете просто изменить все, что было в событии Create.

+0

Я попытался сделать то, что вы предложили, но теперь ни один из элементов не работает. Чтобы уточнить, у меня есть один Obj_Player и несколько элементов, которые содержат код. –

+0

Я обновил ответ. BTW, если переменная 'new' имеет realtion для магических чисел в переменной' jsp', вы можете получить это значение в событии 'Collision', используя что-то вроде' new_value = other.new; 'и' if time> 0 jsp = new_value ; иначе ... ' – Dmi7ry

 Смежные вопросы

  • Нет связанных вопросов^_^