C# XNA 2d街机游戏精灵跟随

C# XNA 2d街机游戏精灵跟随,c#,xna,2d,C#,Xna,2d,我将制作一个类似XNA的示例游戏“Platformer1”,它是XNA附带的。但我需要更长的水平,不适合在屏幕上(如超级马里奥水平)。我如何管理这种级别?我需要使用跟随精灵的2d相机吗?如果我这样做,我如何加载该级别?我有点困惑,我不确定我是否能清楚地解释我的问题。希望有人能帮上忙?听起来你还有一些问题要解决 但我需要更长的水平,不适合在屏幕上(如超级马里奥水平)。我如何管理这种级别 有几种方法可以做到这一点,但一种相当简单的方法是使用名为Tile的类的2d数组(或稀疏数组,取决于级别的大小),

我将制作一个类似XNA的示例游戏“Platformer1”,它是XNA附带的。但我需要更长的水平,不适合在屏幕上(如超级马里奥水平)。我如何管理这种级别?我需要使用跟随精灵的2d相机吗?如果我这样做,我如何加载该级别?我有点困惑,我不确定我是否能清楚地解释我的问题。希望有人能帮上忙?

听起来你还有一些问题要解决

但我需要更长的水平,不适合在屏幕上(如超级马里奥水平)。我如何管理这种级别

有几种方法可以做到这一点,但一种相当简单的方法是使用名为
Tile
的类的2d数组(或稀疏数组,取决于级别的大小),该类存储有关Tile图像、动画等的信息

是的,你可能需要一个“照相机”。这可以很简单,只需绘制该阵列的特定范围,或使用变换缩小和平移整个关卡的更具特色的摄影机


希望这将有助于您入门。

我在XNA中做了大量工作,根据我的经验,有两种方法可以绘制2D场景:

1) 严格地说是2D。这种方法简单得多,但有一些局限性。没有“相机”本身,你要做的是移动固定2D“相机”下面的所有东西。我用引号说“摄像机”,因为摄像机是固定的(据我所知)。好的一面是它很容易,坏的一面是你不能很容易地放大或缩小或做其他的相机效果

2) 二维在三维中。使用二维平面设置三维世界。这更灵活,但也更具挑战性,因为您需要设置3D世界和3D相机。如果这是你第一次尝试制作游戏,我强烈建议你不要使用这种方法

我只对严格的2D方法比较熟悉,您可能需要一个具有2D坐标的地图对象列表。您还需要存储您正在查看的地图的哪个部分,我使用一个矩形或矢量2来存储它。该值将随着角色的移动而向前移动。然后,您可以获取2D贴图对象的坐标并减去所查看对象左上角的(X,Y)以确定对象的屏幕位置。因此:

float screenX = myMapObject.X - focusPoint.X;
float screenY = myMapObject.Y - focusPoint.Y;
另一件需要注意的事情是,使用float或Vector2/3来存储位置,您可能认为现在不需要它,但它会一直存在

这可能有点过分,但我的SF项目使用XNA绘制了一个严格的2D场景,您可以四处移动:


我希望这能有所帮助。

看看尼克·格雷夫林的教程。在我刚开始的时候,他们帮了我很大的忙——真的很值得一看,因为我在2D游戏上学到了很多东西


所有视频现在都在youtube上

如果你想创建一个侧面滚动游戏,那么我会研究视差滚动。快速的google/bing将帮助您查找大量教程。另外,另一个有用的技巧是在YouTube上搜索XNA视频,因为我们有很多海报分享了它们的源代码

这里有一个指向Microsofts的链接。

基于MSDN的教程有一个步骤,可以指导您创建更长的级别。本教程非常详细,我强烈推荐

我在的部分中找不到教程,但差异应该很小。根据页面底部的评论,您需要更改的只是替换

spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None, cameraTransform);


在教程代码中。

您应该将变换矩阵传递给
SpriteBatch.Begin
,并将实际的精灵位置保留在“世界空间”中。
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullCounterClockwise, null, cameraTransform);