добавление 2D Sprite с помощью мыши - PullRequest
0 голосов
/ 18 мая 2011

я только начинаю кодировать в C # / XNA Я сделал очень простую маленькую программу в XNA, это нарисованный прямоугольник с 3 случайно сгенерированными шарами внутри, шары определены в своем собственном классе, и я следовал этому уроку http://www.bluerosegames.com/brg/xna101.aspx

шары генерируются с помощью

int ballCount = 3;

и я хотел сделать так, чтобы щелчок мыши увеличил int на 1, добавив еще один шар на экран

мой код выглядит так, но я не уверен, что он прав / возможен

         mouseStateCurrent = Mouse.GetState();

        if (mouseStateCurrent.LeftButton == ButtonState.Pressed &&
            mouseStatePrevious.LeftButton == ButtonState.Released)
        {

            ballCount = ballCount+1;

        }

        mouseStatePrevious = mouseStateCurrent;

любой полезный совет будет полезен :)

Я использую код, чтобы рисовать шары, которые уже выглядят так

        spriteBatch.Begin();
        spriteBatch.Draw(debugColor, TextBox, Color.White);
        spriteBatch.Draw(background, backgroundRectangle, Color.White);
        foreach (BouncingBall ball in balls)
        {
            ball.Draw(spriteBatch);
        }
        spriteBatch.End();
        base.Draw(gameTime);

можно ли отредактировать это, чтобы получить эффект "нажмите, чтобы добавить шары"?

Ответы [ 2 ]

3 голосов
/ 18 мая 2011

Если balls определен как List<BouncingBall>, который доступен для класса Game, в вашем MouseClick событии вы можете использовать balls.Add(new BouncingBall());. Поскольку вы используете цикл foreach, он будет увеличивать количество шаров в каждом цикле, а ваш код Draw уже будет обслуживать все новые добавленные balls.

1 голос
/ 18 мая 2011

В вашем методе рисования вы можете сделать что-то вроде

 protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        spriteBatch.Begin();
      for(var i=0;i<ballcount;i++)
      {
          spriteBatch.Draw()
      }
        spriteBatch.End();
        base.Draw(gameTime);
    }
...