我应该如何设计一个“正确的”OO Pong?
正确的想法是任何元素都可以改变:球,球场和球拍的形状,增加障碍,甚至“加强”,比如“可以将球粘到球拍上”。
现在两个更紧迫的问题是:
答案 0 :(得分:10)
我想你可以制作一个物理引擎对象,你可以在给定的时间间隔内连续更新。它会检查碰撞,移动球,计算反弹角等等。
编辑#1:为了增加更多细节,“游戏物理”对象将存储对其他游戏对象(如球和球)的引用。游戏物理对象将具有“更新”方法,该方法将在游戏运行时被连续调用。该方法将执行的一些步骤是:
只是一些想法。
编辑#2:详细说明OO焦点...
各种物理对象,如球和桨,会将固有的物理状态和参数(位置,速度,质量等)存储为<strong>属性。游戏物理对象基本上将所有物理运动方程表示为方法。
作为一个例子......假设你想模拟空气摩擦对球的影响。球对象将存储诸如“速度”和“阻力系数”的属性。游戏物理对象将有一种方法,通过获取该对象的必要属性并将其插入到fluid drag的给定方程中来计算对象上的空气阻力。
通过以这种方式封装内容,可以更轻松地更新代码。例如,如果要使用不同的方程进行流体拖动,则需要进行的唯一修改是游戏物理对象的相应方法。其他任何对象都不需要修改。
答案 1 :(得分:3)
在我看来,法庭将是进行检查的适当对象,或者取决于逻辑的复杂程度,是一个处理碰撞的单独类(即某种物理引擎,如gnovice所说)。
球和桨不应该彼此了解,因为它们在面向对象的意义上没有直接相关。一个不包含另一个,也不包含另一个。
答案 2 :(得分:1)
在这样的典型环境中。每个对象都有机会响应碰巧与其碰巧交互的每个其他对象的事件。在某种伪代码(python)中:
class Moveable:
def Update(self):
self.move()
class Ball(Moveable):
def Collide(self, target):
self.restore() # move out of the bounding box
# of whatever we collided into from
self.reflect() # change direction after bouncing
if target is a Paddle:
self.speedup() # Make it a little harder after hitting a paddle
class Paddle(Moveable):
def Collide(self, target):
if target is a Ball:
self.AwardSomePoints()
def main_loop():
...
while True:
for thing_one in Moveables:
thing_one.Update()
for thing_two in Moveables:
if thing_one is not thing_two
and thing_one is touching thing_two:
thing_one.collide(thing_two)
答案 3 :(得分:0)
我喜欢使用模型 - 视图 - 控制器方法,所以在这种情况下,你会有一个游戏控制器来处理控制碰撞,但是向下钻取只会控制一个控制器...这太复杂了,无法解释这里我不那么聪明,所以检查一下: