我无法使用 (point_distance) 杀死任何靠近我的英雄 GMK 的敌人
i can't use (point_distance) to kill any enemy nearset my hero GMK
我在 Game Maker 程序中遇到代码问题
我做了一个小游戏,有一条敌人走的路,把英雄放在他身边,当敌人接近他时,他转向他并开枪射击他
我正在使用此代码
var ex, ey;
ex = instance_nearest(x, y, enemy).x;
ey = instance_nearest(x, y, enemy).y;
if point_distance(x, y, ex, ey) < 150
{
image_angle = point_direction(x, y, enemy.x, enemy.y);
}
代码运行良好,但问题是我的英雄只有在靠近他们时才会去第一个敌人,即使第一个敌人超出范围也不会去休息
请问有什么办法解决
插图照片
Heroes ignore the nearby enemy and only head for the first enemy to appear in the game
您可以使用 collision_circle_list(...)
之类的东西。
此函数将为您提供在该圆圈内发生碰撞的所有对象的列表,您可以遍历它们以查找最近的对象、最远的对象等。
您正在检查正确的敌人,但没有指向正确的敌人。改为存储找到的实例 ID,并将其用于所有实例:
var e;
e = instance_nearest(x, y, enemy);
if (e != noone) { // wouldn't want to crash when you run out of enemies
if (point_distance(x, y, e.x, e.y) < 150) {
image_angle = point_direction(x, y, e.x, e.y);
}
}
我觉得YellowAfterlife的回答解决了问题。但不确定问题的原因是否清楚,然后我想通过解释问题的发生来补充,因为 "point_direction" 中的代码引用了 object 而不是 实例。
对象是创建实例所基于的模板,如果你想操作或获取信息,你应该引用实例.如果你只有一个 instance object,它将直接引用 object,但是在创建了更多,它将 return 只有其中一个的索引(可能是第一个创建的)。
关于实例:您拖到房间的每个对象都会成为一个实例该对象的 或者当您从代码创建 实例 时,例如调用 "instance_create_layer(x, y, "instance_layer", obj_Bullet)",此函数将 return 创建新 实例 的 reference/index。
当调用函数 "instance_nearest" 时,它接收玩家 instance 位置(x 和 y)和 object 实例 你想要检查它是否靠近玩家,例如,敌人对象。该函数将检查从通知的 对象 创建的所有 实例 并将 return 的 index/reference 实例离玩家最近。在调用 point_direction 时的原始代码中,使用了对象 enemy 而不是 return 由 instance_nearest 函数编辑的实例。
对象总是return一些实例的相同索引,导致报告的问题,玩家实例总是指向同一个敌人实例(巧合的是,第一个实例创建)
如果想一次操作所有实例,您可以使用对象,像这样:"with(o_player) y++;"。此代码将使该对象的所有 个实例 一起向下移动。
我在 Game Maker 程序中遇到代码问题 我做了一个小游戏,有一条敌人走的路,把英雄放在他身边,当敌人接近他时,他转向他并开枪射击他 我正在使用此代码
var ex, ey;
ex = instance_nearest(x, y, enemy).x;
ey = instance_nearest(x, y, enemy).y;
if point_distance(x, y, ex, ey) < 150
{
image_angle = point_direction(x, y, enemy.x, enemy.y);
}
代码运行良好,但问题是我的英雄只有在靠近他们时才会去第一个敌人,即使第一个敌人超出范围也不会去休息 请问有什么办法解决 插图照片 Heroes ignore the nearby enemy and only head for the first enemy to appear in the game
您可以使用 collision_circle_list(...)
之类的东西。
此函数将为您提供在该圆圈内发生碰撞的所有对象的列表,您可以遍历它们以查找最近的对象、最远的对象等。
您正在检查正确的敌人,但没有指向正确的敌人。改为存储找到的实例 ID,并将其用于所有实例:
var e;
e = instance_nearest(x, y, enemy);
if (e != noone) { // wouldn't want to crash when you run out of enemies
if (point_distance(x, y, e.x, e.y) < 150) {
image_angle = point_direction(x, y, e.x, e.y);
}
}
我觉得YellowAfterlife的回答解决了问题。但不确定问题的原因是否清楚,然后我想通过解释问题的发生来补充,因为 "point_direction" 中的代码引用了 object 而不是 实例。
对象是创建实例所基于的模板,如果你想操作或获取信息,你应该引用实例.如果你只有一个 instance object,它将直接引用 object,但是在创建了更多,它将 return 只有其中一个的索引(可能是第一个创建的)。
关于实例:您拖到房间的每个对象都会成为一个实例该对象的 或者当您从代码创建 实例 时,例如调用 "instance_create_layer(x, y, "instance_layer", obj_Bullet)",此函数将 return 创建新 实例 的 reference/index。
当调用函数 "instance_nearest" 时,它接收玩家 instance 位置(x 和 y)和 object 实例 你想要检查它是否靠近玩家,例如,敌人对象。该函数将检查从通知的 对象 创建的所有 实例 并将 return 的 index/reference 实例离玩家最近。在调用 point_direction 时的原始代码中,使用了对象 enemy 而不是 return 由 instance_nearest 函数编辑的实例。
对象总是return一些实例的相同索引,导致报告的问题,玩家实例总是指向同一个敌人实例(巧合的是,第一个实例创建)
如果想一次操作所有实例,您可以使用对象,像这样:"with(o_player) y++;"。此代码将使该对象的所有 个实例 一起向下移动。