2D "game" 开发:游戏逻辑和绘图的坐标
2D "game" development: coordinates for game logic and for drawing
我已经完成了游戏逻辑的实现,现在是可视化它的时候了 - 我为此选择了 SFML。然而,我一头雾水:如何避免硬编码游戏对象的坐标使整个系统:
- 可调整大小;
- 就其视觉部分和系统而言可以舒适地移动;
- 自适应任何合理的屏幕尺寸?
此外,我想知道在"real"游戏和其他应用中使用了哪些方法。我想到的最佳解决方案是:
class Screen_promille
由游戏逻辑操作,用于将 x
和 y
存储为屏幕使用部分的 int
promilles(例如 {500, 500}
是中心点,而 {999, 999}
是右下角);
sf::Vector2<float> convert_to_pixels(Screen_promille const)
获取屏幕上实际位置的函数(可能就在绘图之前);或者改为 Screen_promille::operator sf::Vector2<float>()
;
sf::Rect<float> const used_screen
为后者执行。
应该^够聪明?
P. S.:
- 我没有使用任何游戏引擎:我希望在没有它们的情况下完成当前项目;
- 我知道 SFML 类型定义。 :) 我把它们留给了更多的观众。
简而言之,当您考虑所有可能 运行 的问题时,不值得麻烦。硬编码坐标要容易得多。
解决您提出的问题的最佳方法是实施 letterbox view。信箱视图应该允许您舒适地调整游戏大小而不会出现任何视觉失真,并且它应该自适应任何屏幕尺寸。
我已经完成了游戏逻辑的实现,现在是可视化它的时候了 - 我为此选择了 SFML。然而,我一头雾水:如何避免硬编码游戏对象的坐标使整个系统:
- 可调整大小;
- 就其视觉部分和系统而言可以舒适地移动;
- 自适应任何合理的屏幕尺寸?
此外,我想知道在"real"游戏和其他应用中使用了哪些方法。我想到的最佳解决方案是:
class Screen_promille
由游戏逻辑操作,用于将x
和y
存储为屏幕使用部分的int
promilles(例如{500, 500}
是中心点,而{999, 999}
是右下角);sf::Vector2<float> convert_to_pixels(Screen_promille const)
获取屏幕上实际位置的函数(可能就在绘图之前);或者改为Screen_promille::operator sf::Vector2<float>()
;sf::Rect<float> const used_screen
为后者执行。
应该^够聪明?
P. S.:
- 我没有使用任何游戏引擎:我希望在没有它们的情况下完成当前项目;
- 我知道 SFML 类型定义。 :) 我把它们留给了更多的观众。
简而言之,当您考虑所有可能 运行 的问题时,不值得麻烦。硬编码坐标要容易得多。
解决您提出的问题的最佳方法是实施 letterbox view。信箱视图应该允许您舒适地调整游戏大小而不会出现任何视觉失真,并且它应该自适应任何屏幕尺寸。