使球以相同的速度移动,而不管分辨率(PONG)
Making the ball move with the same speed regardless of resolution (PONG)
我已经创建了一个简单的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);
你可能也想对所有屏幕元素的大小做同样的处理,比如球。
这一切都假设您定义"速度"为穿过整个屏幕所花费的时间,而不是覆盖给定的英寸数。这个计算不仅仅取决于分辨率。
您应该首先引入屏幕坐标和逻辑坐标之间的转换,并不是通过常量更新球的位置,而是考虑到自上次更新以来的时间,以便正确地模拟速度。
相关文章:
- 使用分辨率定理用Z3证明
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- Opencv 恢复到比我设置的更高的分辨率
- 在Windows(C++)中使用USB相机拍摄高分辨率照片
- C/C++ 位数组分辨率转换算法
- Windows 和 Linux 之间的相对路径分辨率差异?
- 如何在C++中为高分辨率时钟声明变量?
- 给定数字的浮点分辨率
- 过载分辨率和用户定义的转换
- QScreen geometry()api为分辨率2736 x 1824和2560 x 1600提供了错误的值
- 在没有NtSetTimerResolution的Windows上提高计时器分辨率(高分辨率)
- 获取可能的屏幕分辨率列表
- std::array<const T, n> vs std::array<T, n> 过载分辨率
- 模板转换运算符的分辨率不明确
- 将 X 坐标从一种分辨率转换为另一种分辨率
- 使用 gcc 的模糊函数过载分辨率.为什么?
- caffe 可以一次接收一批具有不同分辨率的输入吗?如果是这样,怎么办?
- 实现高分辨率计时器的最佳方法
- C++ 重载分辨率和恒常性
- 使球以相同的速度移动,而不管分辨率(PONG)