所以我一直在尝试在Box2D中重新创建Pong以学习如何使用引擎,我认为在其中创建pong比我想象的更复杂.我自己碰撞了,我将球恢复设置为1.0,我唯一的问题是我不知道如何让球击中桨,以正确的角度反弹并且有足够的速度到达另一侧.我只是希望它看起来像一个自然的Pong游戏.我看过c ++,actionscript但似乎没有人真正完全实现了乒乓球比赛.
我是否必须实施自己的物理学?
基本上,对于真正的Pong感觉,您需要实现自己的物理.
经典游戏通常将物理实现为简单的2D速度和位置(也许是加速度),然后伪造其他所有东西.
(值得注意的是,即使是现代游戏也会因为它们可以逍遥法外而假装.如果你能以简单的方式做到并且仍然能够获得相同的游戏体验,那么就不值得实施.
Pong的"伪造"物理应该相当简单.这是一个非常基本的,不一定完整的简单物理学:
Vector2 position; Vector2 velocity; protected override void Update(GameTime gameTime) { position += velocity * (float)gameTime.ElapsedGameTime.TotalSeconds; if((IsInsideLeftBat(position) && velocity.X <= 0) || IsInsideRightBat(position) && velocity.X >= 0) { velocity.X = -velocity.X; // Bounce the other way // To change things up, maybe you can change velocity.Y too. } // And of course handle the ball going out of the play field, scoring, etc... }
现在,说你真的需要在你的游戏中使用真正的物理.一个真实物理的乒乓球游戏可能很有趣(实际上有人已经做过,甚至更真实).
我所说的关于"伪造"的事情仍然适用.游戏中的物理学通常更多的是调整事物以获得感觉正确而不是真实的现实.也许你需要将弹跳系数增加到1.1,并且可能会给球增加一些线性阻力,这样它就不会失控?
(或者如果你在将球送到另一侧时遇到困难,请尝试减少线性阻力.)
实际上游戏中的"主角"更有可能 - 你想把它保留在物理模拟中,这样它就可以与事物互动(也许你的游戏场上充满了障碍 - 这可能很有趣) - 但你想要有完整的在其运动控制.
简单地说,在物理引擎更新运行后,进入并更改您不喜欢的任何值!在Pong的情况下,这可能是一个简单的事情,比如重置球的速度,使其每帧以恒定的速度移动.我想你已经为这个桨做了类似的事情 - 每帧都设置它们的位置.
(当我在物理引擎上制作平台游戏时,我使用了这种方法.)
伪造东西的另一种替代方法可能是向桨叶添加一个碰撞处理器,根据您的喜好设置球的速度.