无论分辨率如何,使球以相同的速度移动(PONG)

时间:2013-01-11 16:37:53

标签: c++ directx game-physics pong

我创建了一个简单的Pong游戏,我通过在我的update游戏逻辑中将 ballSpeed 添加到位置来移动球,例如:< / p>

void Update()
{
    ballPosition += ballSpeed;
}

问题是,ballSpeedD3DXVECTOR3,包含组件:x = 10; y = 10; z = 0;

当我将窗口的分辨率从640:480增加到1280:1024时,球的移动速度会变慢,因为它需要更多的像素。

我的问题是:无论显示器的分辨率如何,如何以相同的速度移动球?

3 个答案:

答案 0 :(得分:2)

也许你可以引入一个新的坐标系;从(0,0)到(1,1)说。在此坐标系中移动球,然后将这些坐标中的位置映射到屏幕中的像素以绘制球。您希望坐标系具有与窗口相同的纵横比。

答案 1 :(得分:1)

首先应该在屏幕坐标和逻辑坐标之间引入变换,并且不要通过常量更新球位置,但要考虑自上次更新以来的时间,以便正确模拟速度。

答案 2 :(得分:1)

您可以通过实际分辨率与开发分辨率的比率来缩放速度。由于Pong中的游戏玩法由水平运动控制,因此您可以使用宽度的比率:

ballSpeed = int(ballSpeed * width / 640.0);

你可能也想对所有屏幕元素的大小做同样的事情,比如球。

这一切都假定您将“速度”定义为穿过整个屏幕所需的时间,而不是覆盖给定的英寸数。这种计算不仅取决于解决方案。