我有一个使用paint方法的自上而下的射手,我希望它可以在所有显示器上工作。它的工作原理是获得分辨率并将x和y除以40,将它们全部分成正方形。 我让子弹移动的方法是通过一个线程和一个移动方法。
public void move(){
x += dx;
y += dy;
}
但如果人员电脑较小,子弹会更快地穿过屏幕。如何让它在较小的屏幕上以较慢的速度移动,在较大的屏幕上以较快的速度移动? 感谢您的任何建议。
答案 0 :(得分:0)
你的意思是什么?你的意思是,在不同的设备中,子弹在屏幕上移动的总时间(以秒为单位)是不同的?
假设您按照描述正确完成了所有计算,我认为您忘记了一个因素:不同的设备具有不同的计算速度(也可能是屏幕更新速度),因此一个设备中的“滴答”可能会更长或更短比其他一些。所以当你调用move时,你应该计算从上次调用move()开始经过的时间,然后根据它计算dx和dy。希望这有意义
答案 1 :(得分:0)
我认为你不会忘记并不是每台计算机都以相同的速度运行,如果你的循环速度尽可能快,那么它将在每台计算机上运行得非常不同。我建议实现增量缩放,这包括定时最后一帧,比如你想要60fps,这意味着它需要16毫秒,所以花时间除以它如下:
int lastframe = getFrameTime();
float scaler = lastFrame/(1000f/targetFrameRate)
然后将所有动作乘以此比例。如:
public void move() {
x += dx * scaler;
y += dy * scaler;
}
A也看你的意思是不同的屏幕尺寸更快,这是因为像素密度,要得到这个,你必须得到屏幕的物理尺寸和分辨率。例如,如果你的屏幕是20毫米宽,1280x720,它是20/1280,这给你的事实是每个像素宽0.015毫米。然后,您可以使用上面的标量技术来缩放它们以移动物理世界速度。