我无法使用 (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(...) 之类的东西。 此函数将为您提供在该圆圈内发生碰撞的所有对象的列表,您可以遍历它们以查找最近的对象、最远的对象等。

资源: https://docs2.yoyogames.com/source/_build/3_scripting/4_gml_reference/movement%20and%20collisions/collisions/collision_circle_list.html

您正在检查正确的敌人,但没有指向正确的敌人。改为存储找到的实例 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++;"。此代码将使该对象的所有 个实例 一起向下移动。