我有一组背景图像并排开始,然后向左移动,然后在屏幕外移动。
在游戏中,我需要它们在按下按钮时缩小,但让玩家精灵保持相同的大小。 当前方法:用于背景的绘制方法的缩放变量(逐渐应用)。 这很有效,一切都很好,除了纹理的边缘看起来像最后一列像素被拉伸以填充它曾经存在的空间。
见这里:
我考虑添加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;
}
}
是否有更好的方法可以逐步缩小? 任何帮助,将不胜感激。提前谢谢!
答案 0 :(得分:0)
这是Stackoverflow缩放问题。它还具有使其工作所需的所有必需链接。
据我所知,XNA没有2D相机这样的东西。但你必须使用Matrix和东西创建/模拟它。 Here是精彩的文章,详细解释了一些事情。如果您需要进一步的详细信息,请查看并告诉我们。