问题描述
如您所见,我无法让箭头跟随目标。问题是我将弓和箭分开,所以弓会产生箭头,这就是我无法计算箭头的 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,hsp,vsp);
direction = point_direction(0,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,_f_x,_f_y+1);
_f_x += _f_spd_x
_f_spd_y += grav_aimCircle
_f_y += _f_spd_y;
}
解决方法
你在 Arrow 中有一些代码可以减慢水平速度吗?它似乎比它应该停止的更快。尝试使用不同的变量来管理水平速度而不是重力变量。 在计算箭头的 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);