不管是side-scrolling(横版卷轴),还是tilemap,有一点是非常关键的,就是不同坐标系之间的变换。在三维中有一个视口变换。二维没有那么复杂,但原理是差不多的。角色和地图上的tile,它们的位置属于地图坐标,地图就是它们所在的世界,所以也可以说是世界坐标。而在窗口屏幕中绘制主角和tile时,是以屏幕坐标为参照系的。在游戏的逻辑中,角色位置的改变,以及碰撞检测仍是以地图坐标(世界坐标)进行的,因此在Draw方法中,必须将角色和tile的地图坐标变换成屏幕坐标,从而在屏幕的适当位置显示出来。
下面是一些具体的代码,虽然不是很能体会其精妙之处,不能举一反三,但大概能够明白为什么要这么做。
在Game1类的Update方法中,对scroll是这样处理的: