Gamemaker dcos() 和 dsin() 用于绘制目标

问题描述

gif 会更好地解释我想要做什么。 Bow aim.

如您所见,我无法让箭头跟随目标。问题是我将弓和箭分开,所以弓会产生箭头,这就是我无法计算箭头的 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);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...