Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的寻的导弹行为_Java_Loops_2d - Fatal编程技术网

Java中的寻的导弹行为

Java中的寻的导弹行为,java,loops,2d,Java,Loops,2d,也许是一个初学者的问题,但谢谢你的阅读。我正在开发一个2d Java游戏,在这个游戏中,我使用以下代码跟踪一个对象的位置。我希望导弹在距离目标达到一定的最小位移时停止寻的,在这一点上它们应该垂直落下。现在,只要导弹在最小位移范围内,寻的行为就会关闭,如果位移增加,寻的行为就会再次打开我希望该行为只关闭一次,在导弹的剩余寿命内保持关闭状态。我如何才能做到这一点 public void home(int targetX, int targetY, int scale){ int dy = t

也许是一个初学者的问题,但谢谢你的阅读。我正在开发一个2d Java游戏,在这个游戏中,我使用以下代码跟踪一个对象的位置。我希望导弹在距离目标达到一定的最小位移时停止寻的,在这一点上它们应该垂直落下。现在,只要导弹在最小位移范围内,寻的行为就会关闭,如果位移增加,寻的行为就会再次打开我希望该行为只关闭一次,在导弹的剩余寿命内保持关闭状态。我如何才能做到这一点

public void home(int targetX, int targetY, int scale){
    int dy = targetY - y;
    int dx = targetX - x;
    double speed, sep;

    sep = Math.sqrt(dx * dx + dy * dy);
    speed = scale/sep;

    if(dy > 50 || dx > 50){
        x += dx * speed;
        y += dy * speed;
    }
    else{
        x += 0;
        y += scale;
    }
}

添加成员变量,例如
布尔归位=true
。然后,将条件更改为以下内容:

if (dy < 50 && dx < 50)
    homing = false;

if(homing){
    x += dx * speed;
    y += dy * speed;
}
else{
    x += 0;
    y += scale;
}
if(dy<50&&dx<50)
归位=假;
如果(归位){
x+=dx*速度;
y+=dy*速度;
}
否则{
x+=0;
y+=刻度;
}

基本上,您只需要打破导弹行为和状态之间的相互依赖关系。

我尝试过这个,但遇到了一个问题。编译器会抱怨,因为如果第一条语句的计算结果为false,“homing”将没有值。然后我尝试在方法的顶部初始化“homing”,但true和false的起始值都会产生错误的行为。谢谢你的回答。知道我至少在正确的轨道上是有帮助的。@emmett9001:不要在
home
方法中初始化变量,而是在类构造函数中初始化它。或者,真的,除了
home
之外的任何其他方法。想想看,如果你有一个
launch
方法或类似的东西,每当导弹第一次发射时都会被调用,那是放置
homing=true
的理想地方。非常感谢你的帮助!我觉得也许我应该能够自己解决这个问题…但还是谢谢你。@emmett9001:总是很乐意帮助:)@emmett9001-如果这个答案解决了你的问题,也许你可以将这个问题标记为已解决?可能属于gamedev.se。。。