使球以相同的速度移动,而不管分辨率(PONG)

Making the ball move with the same speed regardless of resolution (PONG)

本文关键字:不管 分辨率 PONG 移动 速度      更新时间:2023-10-16

我已经创建了一个简单的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);

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

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

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