1

我有一组背景图像,它们并排开始,然后向左移动,然后离开屏幕。

在游戏中,我需要它们在按下按钮时缩小,但让玩家精灵保持相同大小。当前方法:背景绘制方法中使用的比例变量(逐渐应用)。这行得通,一切都很好,除了纹理的边缘看起来像最后一列像素已被拉伸以填充它曾经存在的空间。

看这里:

图片

我考虑添加一个 2D 相机并使用缩小功能而不是缩小,但这也会缩小我的播放器。我考虑过用相机缩小并放大我的播放器精灵,但点击几下按钮后,播放器精灵会失去质量,背景必须变得很大才能填满我的视口

以下是相关代码:

float aScale = 1.0f;

public LevelScreen()
{
    SetUpLevel();
}

private void SetUpLevel()
{
// Setting Background positions - each rectangle follows the last
Back1Pos = new Rectangle(0, 0, (int)(Texture.Back01.Width * aScale), (int)(Texture.Back01.Height * aScale));
Back2Pos = new Rectangle(Back1Pos.Right, Back1Pos.Top, Back1Pos.Width, Back1Pos.Height);
Back3Pos = new Rectangle(Back2Pos.Right, Back2Pos.Top, Back1Pos.Width, Back1Pos.Height);
//.... etc
}


// Update Method
// Background Scrolling
back1Rect.X -= (int)(theScrollSpeed.X * theGameTime.ElapsedGameTime.TotalSeconds);
back2Rect.X -= (int)(theScrollSpeed.X * theGameTime.ElapsedGameTime.TotalSeconds);
back3Rect.X -= (int)(theScrollSpeed.X * theGameTime.ElapsedGameTime.TotalSeconds);
// .... etc


// Draw Method (Texture2D, Pos, SourceRect, Colour, Rotation, Origin, Scale, SEffects, Layerdepth)

mBatch.Draw(Texture.Back01, new Vector2(back1Pos.X, back1Pos.Height), 
            new Rectangle(0, 0, back1Pos.Width, back1Pos.Height), Color.White, 0f,
            Vector2.Zero, aScale, SpriteEffects.None, 0f);
// .... etc

这一切似乎都很好。如果您在运行游戏之前将比例设置得较低,则一切看起来都很正常,只有在游戏中途更改时才会如此。而且我认为这与我尝试逐渐应用它的事实有关,例如“缩小”效果而不是向后捕捉。

//Button press makes zooming true

if (zooming == true)
{
    if (aScale > newScale)
    {
       aScale -= 0.05f * (float)theGameTime.ElapsedGameTime.TotalSeconds;
    }
    else
    {
       aScale = newScale;
       zooming = false;
    }
}

有没有更好的方法可以逐渐缩小?任何帮助,将不胜感激。提前致谢!

4

1 回答 1

0

这是用于缩放的Stackoverflow问题。它还具有使其工作所需的所有必需链接。

据我所知,XNA 没有 2D 相机之类的东西。但是你必须使用 Matrix 和其他东西来创建/模拟它。是一篇精彩的文章,详细解释了事情。请看一下,如果您需要更多详细信息,请告诉我。

于 2013-08-09T05:22:36.777 回答