因此,我一直在尝试在Box2D中重新创建Pong,以学习如何使用该引擎,我认为在其中创建Pong比我想象的要复杂。
我自己发生了碰撞,我将球恢复原状设置为1.0,我唯一的问题是我不知道如何让球击中球拍,以正确的角度弹回并有足够的速度到达另一侧。我只是希望它看起来像一个自然的Pong游戏。
我看过c ++,actionscript,但似乎没有人真正完全实现过pong游戏。

我是否只需要实现自己的物理学?

最佳答案

基本上,要获得真实的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...
}




现在,假设您确实在游戏中需要真实的物理学。具有真实物理学的乒乓球游戏可能很有趣(in fact somebody has already done it, even real-er)。

我所说的“伪造”仍然适用。游戏中的物理学通常更多是关于调整事物以获得比实际逼真的事物更合适的事物。也许您需要将弹跳系数提高到1.1,或者向球中添加一些线性阻力,以免其飞出控制范围?

(或者,如果您无法将球传到另一侧,请尝试减少线性阻力。)

实际上,游戏中的“主要角色”更可能是-您希望将其保留在物理模拟中,以便它可以与事物进行交互(也许您的运动场充满了障碍-可能很有趣)-但您想对其运动有完全的控制权。

为此,在运行物理引擎更新后,进入并更改您不喜欢的任何值!在Pong的情况下,这可能很简单,例如重置球的速度,使其每帧以恒定速度运动。我想您已经对桨进行了类似的操作-在每个帧中设置其位置。

(我制作platformer on a physics engine时使用了这种方法。)

伪造事物的另一种替代方法可能是在球拍上添加一个碰撞处理程序,以设定球的速度,使其达到您喜欢的速度。

关于c# - Box2D XNA中的Pong,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3095679/

10-13 08:24