【问题标题】:XNA ball movementXNA 球运动
【发布时间】:2016-05-01 12:19:01
【问题描述】:

XNA 相关:

我需要帮助解决这个小问题,所以我想先得到一个从 1 到 4 的随机数,然后根据该数字的值,球会移动( 1(forward,up), 2(向后,向上),3(向前,向下),4(向后,向下))。

在我的代码中,我正在检查当前是否正在玩游戏,以便球只能在回合开始时获得它的方向。 (如果玩家获胜或死亡,isRoundPlayin 设置为 false,当球获得随机方向(1、2、3 或 4)时,设置为 true。

bool isRoundPlayin = false; // this is at the top of my Game1.cs 

//...
//...
//...
// This is an Update method in Game1.cs:

    protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

        if (isRoundPlayin == false)
        {
            BallMove();
            isRoundPlayin = true;
        }

        base.Update(gameTime);
    }
//...
//...
//...

// This is BallMove method at the end of Game1.cs script:
 public void BallMove()
        {
            Random randy = new Random();
            int randMov = randy.Next(1, 4);
            int ball_velocity = 3;
            {
                if (randMov == 1)
                {
                    ballRect.X += ball_velocity;
                    ballRect.Y += ball_velocity;
                }
                else if (randMov == 2)
                {
                    ballRect.X += ball_velocity;
                    ballRect.Y -= ball_velocity;
                }
                else if (randMov == 3)
                {
                    ballRect.X -= ball_velocity;
                    ballRect.Y += ball_velocity;
                }
                else if (randMov == 4)
                {
                    ballRect.X -= ball_velocity;
                    ballRect.Y -= ball_velocity;
                }
            } 
        }

然而我的球没有移动:/ 停留在它的生成点

【问题讨论】:

  • 您是否尝试过添加断点并单步执行您的代码?我会首先尝试,逐行逐行执行代码以确定isRoundPlayin 字段的状态,以及ballRect 对象及其属性。也许您的XY 属性正在更新,但是在设置坐标后是否需要在ballRect 上调用方法或函数或某些东西?

标签: c# xna


【解决方案1】:

这是因为你设置的是在移动后立即循环播放为真。因此它移动一帧然后不再更新。我不确定为什么你会希望在球移动一帧时结束这一轮。如果您在我们可以帮助您之后向我们提供有关您的身份的更多信息,但目前,只需从 if 语句中删除 isRoundPlaying = true 即可。

【讨论】:

  • @Slubberdgullion 好吧,我这样做的原因是因为每次 CPU 读取 BallMove 函数时没有将其设置为 true,它会为每一帧获取随机数,并且球会一直改变其方向,但仍会向前移动- 在窗口 bu 的奇怪球运动中,我只想打乒乓球,在每个圆球开始时应该随机移动到一个方向,在另一轮开始时它会再次生成另一个随机方向
  • 那是因为您每次尝试移动球时都会生成随机数。随机数应该只计算一次,在某种 StartRound 函数中。现在,您的 BallMove 函数有两个职责:生成方向和移动球。你的移动球在技术上应该看起来像:ball.Position += Direction * Speed;或 ball.Position += Velocity。 blogs.msdn.microsoft.com/alfredth/2009/03/17/…该链接是关于如何以 OOP 方式制作 pong 的教程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多