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);
}

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值