GML: получение идентификатора экземпляра из столкновения и доступ к его переменным

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

если у игрока была выносливость 45 при выполнении атаки, спрайт атаки вылетит с уроном 45. При попадании во врага это нанесет противнику 90 урона, оставив им всего 10 единиц здоровья.

Проблема в том, что игра, по-видимому, не знает, какой спрайт атаки поразил врага, поскольку вы можете выполнять практически неограниченное количество атак и, следовательно, не наносит правильное количество урона врагу.

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

заранее спасибо


person NextDefault    schedule 08.02.2017    source источник


Ответы (2)


Я предполагаю, что вы используете событие столкновения с противником, верно? Внутри этого вы должны просто иметь возможность использовать other. Итак, что-то вроде этого:

var instance_id = other.id

Вот еще немного информации от YoYoGames для других:

https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml%20language%20overview/keywords.html

Он второй в списке :)

person Jeremy Jackson    schedule 08.02.2017

Вот пример кода того, что упомянул Джереми:

Событие, запускающее атаку (например, глобальная мышь, оставленная в объекте игрока):

var attackInstance = instance_create(x, y, obj_attack); //Create an instance
attackInstance.damage = 45; //Set the damage of this _instance_ to 45
attackInstance.speed = 4; //Make it move
attackInstance.direction = point_direction(x, y, mouse_x, mouse_y); //in the right direction

В событии столкновения с obj_attack в obj_enemy:

hp -= other.attack*2;  //My HP gets down by the amount of the attack variable in the collided instance.
with(other) {
    instance_destroy(); //Destroy the attack object
}

Это должно в принципе сработать :)

person Rob    schedule 20.02.2017