Фон прокрутки не плавный - PullRequest
0 голосов
/ 22 января 2012

Я следую этому руководству, пытающемуся изучить XNA, но у меня возникают проблемы с плавной прокруткой изображений. Все работает нормально, пока не пришло время моему первому изображению вернуться и снова запустить цикл прокрутки.

Что странно, так это то, что проблема заключается в том, что рисование изображения занимает несколько секунд, а затем появляется в том месте, где вы ожидаете, если оно будет продолжать прокрутку. Я изменил фон на красный, чтобы увидеть, не загружается ли изображение по какой-то причине, но я получаю непрерывный поток того же синего цвета, который используется в фоновой текстуре спрайта.

Есть предложения? Ниже приведен код для метода обновления:

    protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        // TODO: Add your update logic here
        if (bg1.getPosition().X < -bg1.size.Width)
        {
            bg1.setPosition( new Vector2(bg5.getPosition().X + bg5.size.Width,0) );
        }
        if (bg2.getPosition().X < -bg2.size.Width)
        {
            bg2.setPosition(new Vector2(bg1.getPosition().X + bg1.size.Width, 0));
        }
        if (bg3.getPosition().X < -bg3.size.Width)
        {
            bg3.setPosition(new Vector2(bg2.getPosition().X + bg2.size.Width, 0));
        }
        if (bg4.getPosition().X < -bg4.size.Width)
        {
            bg4.setPosition(new Vector2(bg3.getPosition().X + bg3.size.Width, 0));
        }
        if (bg5.getPosition().X < -bg5.size.Width)
        {
            bg5.setPosition(new Vector2(bg4.getPosition().X + bg4.size.Width, 0));
        }

        Vector2 direction = new Vector2(-1,0);
        Vector2 speed = new Vector2(100.0f/1000.0f,0.0f);

        bg1.updatePosition( (direction * speed) * (float)gameTime.ElapsedGameTime.TotalMilliseconds);
        bg2.updatePosition((direction * speed) * (float)gameTime.ElapsedGameTime.TotalMilliseconds);
        bg3.updatePosition((direction * speed) * (float)gameTime.ElapsedGameTime.TotalMilliseconds);
        bg4.updatePosition((direction * speed) * (float)gameTime.ElapsedGameTime.TotalMilliseconds);
        bg5.updatePosition((direction * speed) * (float)gameTime.ElapsedGameTime.TotalMilliseconds);

        base.Update(gameTime);
    }

1 Ответ

1 голос
/ 22 января 2012

Глядя на ваши утверждения if, в какой-то момент оно сломается.

Вы перемещаете все свои изображения влево. Затем, когда он достигает ширины, он сбрасывает себя в зависимости от положения другого изображения, которое также перемещается влево.

Эта логика ошибочна и нуждается в пересмотре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...