刚开始大学从事计算机科学与游戏开发学位。期待使用平铺映射制作2D平台。显然,2D平台游戏的一个特征是比屏幕更大的世界,即超级马里奥兄弟,塞尔达传说等。
我想知道如何做到这一点。我已经使用纹理数组设置了瓷砖贴图,但现在我坚持:
任何帮助都会很棒。大多数关于这些问题的答案建议使用引擎,但我不想要这样做,所以请不要建议。
编辑:另外,是的,我看过平台游戏套件。我不觉得它真的有多大帮助?我需要一些解释和代码,并没有很好的评论。
答案 0 :(得分:2)
我喜欢采用面向对象的方法解决这类问题。
你提到要绘制的瓷砖网格(你的世界)。我假设你也会将它用于碰撞,但是没有提到,所以我会忽略它。
你还提到你需要一名球员(马里奥,如果你愿意的话)。这需要在你的世界中占有一席之地。
我会有两节课。一个适合您的玩家,在 world 坐标中具有位置(非相对坐标)。然后我会有一个描述世界瓷砖的类(你的瓷砖地图)。然后,您可以根据它们的世界坐标绘制切片,通过某种相机矩阵(转换矩阵,用于偏移世界视图)进行转换。这里的想法是移动相机,而不是移动世界。您可以使用相同的相机变换矩阵绘制播放器。
由于玩家不知道他正在被相机观看,因此相机需要知道要遵循什么。因此,相机应该“跟随”播放器。你可以给相机一个“目标”坐标,相机可以有关于如何跟随播放器的规则。
然后,相机可以确定是否需要更快或更慢地“滚动”以跟上播放器。相机需要能够确定是否正在靠近屏幕边缘绘制玩家,并向前移动该边缘。等
我希望这有用:)
答案 1 :(得分:1)
您应该跟踪一些scrollPositionX和scrollPositionY,它们会偏移您正在绘制的图块。使用简单的滚动方法(一次1个整个图块),您可以在绘制地图时将scrollPositionX添加到列索引,并将scrollPositionY添加到数组引用的行索引。当玩家靠近边缘时,增加或减少scrollPositionX和scrollPositionY。我建议在地图上跟踪玩家的绝对位置而不是玩家在屏幕上的位置。因此,如果scrollPositionX == playerX,则表示播放器位于第一列,您应该减少scrollPositionX。
答案 2 :(得分:1)
我所做的是保留4个变量来定义相机边界。如果播放器相对于相机超出了这些边界并且正在移动,则向适当的方向滚动。我相对于相机的意思不是玩家在世界空间中的实际坐标,而是在屏幕空间上。如果需要进一步澄清,请说明。
Spritebatches将成为你的朋友!将这些与texture2D实例结合起来就可以了。
SpriteBatch batch = new SpriteBatch();
Texture2D mySprite = Content.Load<Texture2D>("mySprite");
batch.begin();
batch.draw(mySprite, x, y, width, height); //not sure about these parameters, double check them!
batch.end();
将这些内容封装到一个类中以便于管理!