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