45度地图游戏的地图拖动和主角跟随

1. 拖动地图

1.1 地图移动原理

地图tiledMap是CCLayer的child,把tiledMap的锚点设置成(0.5,0.5),然后setPosition到VisibleSize的中心,那么地图的中心就和屏幕的中心重合了。

拖动地图的原理是,移动tiledMap精灵的position,即实质是地图在移动,而看起来好像屏幕在移动。

1.2 得到划动向量

ccTouchesBegan确定起始触摸点,然后在ccTouchesMoved确定触摸终止点,得到向量vec即划动屏幕时的一个短时段内的划动向量。

把这个划动向量加到tiledMap的getPosition上,即可划动地图。该向量的正负和因子(比如乘以0.3)根据个人习惯调整。

2. 主角跟随

当游戏的主角在地图上走动时,如何让他始终都在屏幕的中心:

2.1 确定地图的中心(a,b),确定主角的位置(x,y),得到地图中心到主角的向量vec=(x-a,y-b)。

2.2 每次主角移动时,同时把tiledMap从(a,b)一个偏移向量,代码如下:

CCPoint offset = mapCenterPos - rolePos;
CCPoint newMapPos = mapCenterPos +offset;

这个方法很简单,但是我当时想了很久。

3. 地图越界

当划动地图或者主角跟随时,可能会出现地图越界的情况,比如把整个地图划动到屏幕外边。解决方案如下代码:

// screenSize是visibleSize即屏幕的尺寸
// _mapContentSize是包裹地图的最小矩形的尺寸
_xRight = screenSize.width - _mapContentSize.width / 2;
_xLeft = _mapContentSize.width / 2;
_yUp = _mapContentSize.height / 2;
_yDown = screenSize.height - _mapContentSize.height / 2;
// newPos是计算出的地图将要移动到的位置
if(newPos.x < _xRight) newPos.x = _xRight;
if(newPos.x > _xLeft) newPos.x = _xLeft;
if(newPos.y > _yUp) newPos.y = _yUp;
if(newPos.y < _yDown) newPos.y = _yDown;

 

posted @ 2014-01-26 23:22  GAMTEQ  阅读(1057)  评论(0编辑  收藏  举报