0

gif 将更好地解释我正在尝试做的事情。 弓瞄准。

如您所见,我无法使箭头跟随目标。问题是我的弓和箭是分开的,所以弓会产生箭头,这就是我无法计算箭头的 hspeed 和 vspeed 以及重力以匹配被宠爱的目标的弓绘制事件的问题。我将发布点目标代码和箭头重力/运动代码箭头的生成代码在释放按钮时很简单,它在弓的 x、y 位置生成箭头。如果您需要任何其他代码,我会发布它。抱歉,如果没有很好地解释。

箭头代码:结束步骤

///Check if parent still exists
if (parent != noone)
if (!instance_exists(parent))
{
    parent = noone;
}

///Gravity
if (grav != 0)
{
    hsp += lengthdir_x(grav, grav_dir);
    vsp += lengthdir_y(grav, grav_dir);
}

///Increase gravity over time, up until a maximum amount
grav = min(grav+grav_add, grav_max);

///Limit speed
hsp = clamp(hsp, -hsp_max, hsp_max);
vsp = clamp(vsp, -vsp_max, vsp_max);

///Calculate directional speed
var sp = point_distance(0, 0, hsp, vsp);
direction = point_direction(0, 0, hsp, vsp);

弓:

绘图事件:

var _f_x = x;
var _f_y = y;
var _f_spd_x = draw_aim_circle_max * dcos(controler_angle)
var _f_spd_y = draw_aim_circle_max *-dsin(controler_angle)

while (!instance_place(_f_x,_f_y,objAimCircleKiller))
    {
        draw_sprite(sprAimCircleSmall,0,_f_x,_f_y+1);
                        _f_x += _f_spd_x
                        _f_spd_y += grav_aimCircle 
                        _f_y += _f_spd_y;
    }
    
4

1 回答 1

0

你在箭头中有一些代码来减慢水平速度吗?它似乎比它应该停止的更快。尝试使用不同的变量来管理水平速度而不是重力变量。在计算箭头的 x 速度时,定义一个显式值最大速度。当 sin 角度为 90° 时,箭头速度应为最大速度,当 sin 角度为 0 时,箭头速度应接近 0。然后只需使用 arcsin 函数从 0/1 获取一个值并乘以最大速度。

    var maxHorSpeed = 10;
    var aimAngle = lengthdir_y(bow.x,bow.y,target.x,target.y);
    
    arrow.horizontalSpeed = clamp( sin(aimAngle)*maxHorSpeed,0.2, maxHorSpeed);
于 2021-05-04T16:39:16.117 回答