2

我创建了一个简单的 Pong 游戏,并通过在游戏逻辑中的位置添加变量ballSpeed来移动球,例如:update

void Update()
{
    ballPosition += ballSpeed;
}

问题是这ballSpeed是一个D3DXVECTOR3带有组件的:x = 10; y = 10; z = 0;

问题是,当我增加窗口的分辨率时640:4801280:1024球的移动速度会变慢,因为它需要更多的像素。

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

4

3 回答 3

2

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

于 2013-01-11T16:40:10.307 回答
1

您应该首先引入屏幕坐标和逻辑坐标之间的转换,并且更新球的位置不是常数,而是考虑自上次更新以来的时间,以便正确模拟速度。

于 2013-01-11T16:47:07.767 回答
1

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

ballSpeed = int(ballSpeed * width / 640.0);

您可能也希望对所有屏幕元素的大小(例如球)执行相同的操作。

这一切都假设您将“速度”定义为穿过整个屏幕所用的时间,而不是覆盖给定的英寸数。该计算不仅仅取决于分辨率。

于 2013-01-11T17:01:55.543 回答