刚开始读大学,正在攻读计算机科学和游戏发展学位。研究使用瓷砖映射来制作2D平台。显然,2D平台的一个特点是一个比屏幕更大的世界,比如超级马里奥兄弟,塞尔达传奇等等。
我在想该怎么做。我已经用一个纹理数组设置了一个平铺地图,但是现在我被困在了:
,
任何帮助都会很好。关于这些问题的大多数答案都建议使用引擎,但我做的不是想要这样做,所以请不要建议它。
编辑:还有,是的,我看了一下平台入门工具包。我不觉得这真的有多大帮助?我需要一些解释和代码,它不是很好的注释。
发布于 2011-10-18 15:14:15
我喜欢用面向对象的方法来解决这类问题。
你提到你要画的瓷砖格(你的世界)。我想你也会用它来碰撞,但是没有提到,所以我会忽略它。
你还提到你需要一个球员(马里奥,如果你愿意的话)。这将需要在你的世界中有一个位置。
我要上两节课。一个给你的玩家,有一个位置在世界坐标(而不是相对坐标)。然后,我将有一个类来描述世界的瓷砖(你的瓷砖地图)。然后,您可以根据它们的世界坐标绘制瓷砖,由某种类型的相机矩阵(用于抵消世界视图的转换矩阵)进行转换。这里的想法是移动相机,而不是移动世界。你可以用同样的相机变换矩阵来画玩家。
因为玩家不知道他正被摄像机盯着,所以摄像机需要知道该怎么做。因此,相机应该需要“跟随”玩家。你可以给相机一个“目标”坐标,相机可以有规则来跟踪玩家。
然后相机可以确定它是需要“滚动”更快还是更慢才能跟上玩家的步伐。相机需要能够确定玩家是否被画在屏幕的边缘附近,并移动特沃德的边缘。等。
我希望这会有所帮助:)
发布于 2011-10-18 14:59:17
您应该跟踪一些scrollPositionX和scrollPositionY,以抵消您正在绘制的瓷砖。使用一种简单的滚动方法(一次只滚动一个整块),在绘制映射时,可以将scrollPositionX添加到列索引,将scrollPositionY添加到数组引用的行索引中。当玩家靠近边缘时,增加或减少scrollPositionX和scrollPositionY。我建议跟踪玩家在地图上的绝对位置,而不是玩家在屏幕上的位置。因此,如果scrollPositionX == playerX,这意味着播放机在第一列,您可能应该减少scrollPositionX。
发布于 2011-10-18 19:16:04
,
SpriteBatch batch =新SpriteBatch();Texture2D mySprite = Content.Load("mySprite");batch.begin();batch.draw(mySprite、x、y、宽度、高度);//不确定这些参数,请重复检查它们!batch.end();
将这些东西封装到一个类中,以便于管理!
https://stackoverflow.com/questions/7806667
复制相似问题