我已经和我一直在制作的XNA 2D游戏,但我遇到了问题。
我的屏幕上滚动了我的精灵跳过的盒子。精灵正在跟着一台2D相机,我担心相机会引起问题,因为它导致滚动框在屏幕中间停止而不是继续,而且生命数量正在快速下降而不是一生当发生一次碰撞时。
这是我的精灵与移动框碰撞的代码
Rectangle fairyRectangle = new Rectangle((int)position.X, (int)position.Y, texture.Width, texture.Height);
hit = false;
for (int i = 0; i < GameConstants.TotalBoxes; i++)
{
if (scrollingBlocks.boxArray[i].alive)
{
Rectangle blockRectangle = new Rectangle((int)scrollingBlocks.boxArray[i].position.X, (int)scrollingBlocks.boxArray[i].position.Y, scrollingBlocks.boxArray[i].texture.Width, scrollingBlocks.boxArray[i].texture.Height);
if (IntersectPixels(fairyRectangle, fairyTextureData, blockRectangle, blockTextureData))
{
scrollingBlocks.boxArray[i].alive = false;
hit = true;
lives--;
scrollingBlocks.boxArray[i].alive = true;
scrollingBlocks.boxArray[i].position.X = random.Next(GameConstants.ScreenWidth);
scrollingBlocks.boxArray[i].position.Y = 570;
}
}
}
这是滚动框中的更新功能 public void Update(GameTime gameTime) {
for (int i = 0; i < GameConstants.TotalBoxes; i++)
{
boxArray[i].position.X = boxArray[i].position.X - 5;
boxArray[i].position.Y = boxArray[i].position.Y;
if (boxArray[i].position.X < 0)
{
boxArray[i].position.X = randomno.Next(GameConstants.ScreenWidth) + 700;
boxArray[i].position.Y = 570;
}
Helper.WrapScreenPosition(ref boxArray[i].position);
}
}
我希望他们从右侧屏幕开始并一直移动到x = 0,但他们目前在x = 400的中途停止。
最后,这是我用精灵和块
绘制所有内容的地方 if (gameState == GameState.PLAYINGLEVEL3)
{
graphics.GraphicsDevice.Clear(Color.Aquamarine);
spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
backgroundManager.Draw(spriteBatch);
//scrollingBlocks.Draw(spriteBatch);
spriteBatch.DrawString(lucidaConsole, "Score: " + score + " Level: " + level + " Time Remaining: " + ((int)timer / 1000).ToString() + " Lives Remaining: " + lives, scorePosition, Color.DarkOrchid);
spriteBatch.End();
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Deferred, SaveStateMode.None, camera.transform);
scrollingBlocks.Draw(spriteBatch);
fairyL3.Draw(spriteBatch);
spriteBatch.End();
}
感谢您的帮助!
答案 0 :(得分:0)
从提供的代码中我无法说明你的相机是如何工作的,但我的猜测是当你开始关卡时你的相机会选择一个新的中心点(而不是原来的xna屏幕位置)
换句话说,相机的中心可能已将其向后推了一下,因此您认为屏幕的位置0可能已被向前推到屏幕的中间,使得框停止。我建议您查看这些相机教程http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/或http://www.youtube.com/watch?v=pin8_ZfBgq0
相机可能会比较棘手,所以我建议您查看一些教程来获取挂起矩阵并查看端口。
至于夺走不止一个人的生命,这是因为你说“如果这个盒子与我的玩家相撞,就会带走生命”。计算机不知道你只想要一个人带走,只要它与玩家相撞它带走了生命,它就会不断减少。
希望这会给你一些想法:D