我正试图为我的子弹地狱游戏制作一个归位弹丸,我需要能够计算目标和弹丸之间相对于弹丸角度的角度(0度将是弹丸指向的方向) )。现在角度计算是使用 point_direction 绝对完成的,但问题是当目标位于第4个扇区时,射弹开始以错误的方式操纵。另一个问题是,如果射弹在追逐目标时进行180度转弯(或者在被敌人射击时向下移动),则转向方向将反转。我也尝试过 mp_potential _ 函数,但是它们的寻路过于“激进”。
这是我目前的代码:
if(instance_exists(obj_fighter1)) {
var target;
target = instance_nearest(x, y, obj_fighter1);
if(target != noone) {
var angle_to_target;
angle_to_target = point_direction(x,y,target.x,target.y);
if(angle_to_target < direction) {
direction -= 2;
}
if(angle_to_target > direction) {
direction += 2;
}
}
}
希望这些信息足够且易于理解。
答案 0 :(得分:1)
好的,一个常见的Game Maker问题。我使用的例程如下。看看它,它可以做一些重构,但它确实有效。
var wantDir;
var currDir;
var directiondiff;
var maxTurn;
// want - this is your target direction \\
wantDir = argument0;
// max turn - this is the max number of degrees to turn \\
maxTurn = argument1;
// current - this is your current direction \\
currDir = direction;
if (wantDir >= (currDir + 180))
{
currDir += 360;
}
else
{
if (wantDir < (currDir - 180))
{
wantDir += 360;
}
}
directiondiff = wantDir - currDir;
if (directiondiff < -maxTurn)
{
directiondiff = -maxTurn
}
if (directiondiff > maxTurn)
{
directiondiff = maxTurn
}
return directiondiff
所以你打电话给它,它会返回一个你可以添加到导弹角度的值。因此,如果您将其称为scr_get_angle
,则您的代码可能如下所示:
if(instance_exists(obj_fighter1)) {
var target;
target = instance_nearest(x, y, obj_fighter1);
if(target != noone) {
var angle_to_target;
angle_to_target = point_direction(x,y,target.x,target.y);
direction += scr_get_angle(angle_to_target, 2);
}
}