cocos2d-x 地图随英雄移动

本人刚开始学习cocos2d-x游戏引擎,学到瓦片地图这块,网上有一个很经典的例子,见链接:基于Cocos2D-X的砖块地图教程(一)。

在看到其中的地图跟随角色移动(一般情况下保持角色在屏幕中央附近,到地图边缘时移动角色)的问题时看的不大明白,自己搞了好久才搞懂,这里我已经将代码注释,希望对跟我一样的新手有所帮助。

代码如下:

void TiledMapTestScene::setCneterPointOfView( CCPoint p )
{
//因为这里是要通过传入的点p来显示设定CCLayer的位置,p为英雄坐标,当做显示中心点。
//TileMap的size肯定大于WinSize(分辨率),不然有黑边,而且也不用移动地图了。
//因此p的x、y的值肯定要大于等于屏幕中心的值

int x = MAX(p.x , winSize.width / 2);
int y = MAX(p.y , winSize.height / 2);

//同理,p的x、y要小于等于TileMap的size的宽高减去WinSize的中心值,不然也会出现黑边
x = MIN(x,mapSize.width * tileSize.width - winSize.width / 2);
y = MIN(y,mapSize.height * tileSize.height - winSize.height / 2);

/*这里是用地图中心的真实坐标减去屏幕中心坐标来得到两个中心之差(
真实中心肯定为屏幕中心右上部),得到的差值就是TileMap的偏移值(其x、y都为非正数)。
重点:由于CClayer为了初始化位置是始终显示到屏幕左下角方便,因此其锚点为(0,0),
刚好可以把以上求得的偏移值作为其坐标。
*/
CCPoint actualPosition = ccp(x,y);
CCPoint winCenter = ccp(winSize.width / 2 , winSize.height /2);
CCPoint viewPosition = ccpSub(winCenter,actualPosition);

this->setPosition(viewPosition);
}

好了,大概就这样了,相信初学者也可以看明白的。

你可能感兴趣的:(cocos2d-x学习)