我创建了一个简单的Pong游戏,我通过在我的update
游戏逻辑中将 ballSpeed 添加到位置来移动球,例如:< / p>
void Update()
{
ballPosition += ballSpeed;
}
问题是,ballSpeed
是D3DXVECTOR3
,包含组件:x = 10; y = 10; z = 0;
当我将窗口的分辨率从640:480
增加到1280:1024
时,球的移动速度会变慢,因为它需要更多的像素。
我的问题是:无论显示器的分辨率如何,如何以相同的速度移动球?
答案 0 :(得分:2)
也许你可以引入一个新的坐标系;从(0,0)到(1,1)说。在此坐标系中移动球,然后将这些坐标中的位置映射到屏幕中的像素以绘制球。您希望坐标系具有与窗口相同的纵横比。
答案 1 :(得分:1)
首先应该在屏幕坐标和逻辑坐标之间引入变换,并且不要通过常量更新球位置,但要考虑自上次更新以来的时间,以便正确模拟速度。
答案 2 :(得分:1)
您可以通过实际分辨率与开发分辨率的比率来缩放速度。由于Pong中的游戏玩法由水平运动控制,因此您可以使用宽度的比率:
ballSpeed = int(ballSpeed * width / 640.0);
你可能也想对所有屏幕元素的大小做同样的事情,比如球。
这一切都假定您将“速度”定义为穿过整个屏幕所需的时间,而不是覆盖给定的英寸数。这种计算不仅取决于解决方案。