游戏制造商dcos()和dsin()用于绘制目标



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);

弓:

DrawEvent:

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;
}

Arrow中有一些代码可以降低水平速度吗?它似乎停得比应该停的更快。尝试使用不同的变量来管理水平速度,而不是grav变量。计算箭头的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);

最新更新