Java 如何跟踪精灵的移动?

Java 如何跟踪精灵的移动?,java,graphics,sprite,Java,Graphics,Sprite,我有一个程序,旨在模拟交通和所有过程(运动,画新车,响应交通灯),除了跟踪运动正在工作 我使用了getter方法 float getXposition(){ 返回x; } 浮点getYposition(){ 返回y; } 确定精灵的位置,但我的问题是与位置相关的条件。例如,我的do while循环 do{ topcar.setYvelocity((topcar.getYvelocity()/2)); }while(topcar.getYposition()

我有一个程序,旨在模拟交通和所有过程(运动,画新车,响应交通灯),除了跟踪运动正在工作

我使用了getter方法

float getXposition(){
返回x;
}
浮点getYposition(){
返回y;
}
确定精灵的位置,但我的问题是与位置相关的条件。例如,我的do while循环

do{
topcar.setYvelocity((topcar.getYvelocity()/2));
}while(topcar.getYposition()<275);
总是被绕过

更新方法

public void update(){//每n毫秒更新一次位置和速度
//默认值-仅以恒定速度移动
x+=dx;//x方向的速度
y+=dy;//y方向的速度
}
public void actionPerformed(ActionEvent arg0){
//计时器每50毫秒调用一次
for(SimpleSprite s:SimpleSprite.sprite)
s、 update();//更新所有精灵的位置
重新油漆();
}

我想做的是,当灯变红时,汽车精灵应减速至半速,直到达到y坐标275,然后停止,但相反,我的精灵将在灯变红时突然停止

您的do while循环将一步通过。这相当于将“速度”设置为0。在更新步骤中,速度降低只应发生一次。但是很难看到,因为我看不到您的代码是如何连接的。我很惊讶这不会产生无限循环,因为
setYvelocity
可能不会改变
Yposition
。你需要实现一个动画系统来更新每一帧中的速度和位置。是的,你需要更改代码的架构,这可能会有所帮助:因此你需要一些定时器来更新位置,控制它们的方向和速度,并强制渲染。。。在这里,这两个例子都是C++(VCL),所以在java中它看起来可能稍微不同,但是代码的结构应该是相同的……如果你没有可用的计时器,你可以用无限循环来模拟它们,使用代码<睡眠(1);代码>将触发计时器事件的内部线程,但要注意多线程gfx访问(并非所有API都允许安全地进行访问)。另一个选项是使用OnIdle事件。。。顺便说一句,你问题中的循环看起来很可疑,好像你做的事情非常错误,我希望有不同的控制代码/方法,或者你很快就会迷失在if/else语句中,但我可能错了,因为我看不到代码的上下文,这只是我看到你做的几段代码的印象,而循环将在一步中运行通过这相当于将“速度”设置为0。在更新步骤中,速度降低只应发生一次。但是很难看到,因为我看不到您的代码是如何连接的。我很惊讶这不会产生无限循环,因为
setYvelocity
可能不会改变
Yposition
。你需要实现一个动画系统来更新每一帧中的速度和位置。是的,你需要更改代码的架构,这可能会有所帮助:因此你需要一些定时器来更新位置,控制它们的方向和速度,并强制渲染。。。在这里,这两个例子都是C++(VCL),所以在java中它看起来可能稍微不同,但是代码的结构应该是相同的……如果你没有可用的计时器,你可以用无限循环来模拟它们,使用代码<睡眠(1);代码>将触发计时器事件的内部线程,但要注意多线程gfx访问(并非所有API都允许安全地进行访问)。另一个选项是使用OnIdle事件。。。顺便说一句,你问题中的循环看起来很可疑,好像你做的事情非常错误。我希望有不同的控制代码/方法,或者你很快就会迷失在if/else语句中,但我可能错了,因为我看不到代码的上下文,这只是我看到的几段代码的印象