TiledMapEditor创建地图,精灵在地图上下左右移动,尚未实现碰撞检测功能

环境:VC2010+COCOX2.1.4。

效果:见图中6幅小图。


功能:实现精灵上下左右移动。

精灵在地图上移动,如果地图比当前屏幕尺寸要多,那么在移动时地图要跟精灵的移动方向相反。拿精灵上移来说,精灵整个上移过程中,positionY在增大,而地图则是向下在移动。让人视觉产生一种错觉,误以为是地图没动,只是精灵一直在往地图上方移动。这个上移过程中要注意2点:一是地图下移过程中要判断是否已经超出屏幕(如果超出屏幕,屏幕则一片黑,影响用户体验),地图上下左右应该是要铺满屏幕或理解为包裹住屏幕;二是地图不能再下移了(再下移就会出现多移的那部分会让屏幕变黑,影响用户体验),而精灵还能上移,则应该继续让精灵上移。


上代码之上移:

if (_map->getContentSize().height + _map->getPositionY() > _size.height + MAP_TILE_SIZE) {
				_map->setPosition(ccp(_map->getPositionX(), _map->getPositionY() - MAP_TILE_SIZE));
				_spriteNpc->setPosition(ccp(_spriteNpc->getPositionX(), _spriteNpc->getPositionY() + MAP_TILE_SIZE));
			} else if (_spriteNpc->getPositionY() < _map->getContentSize().height - MAP_TILE_SIZE - 25) {// 地图范围之内就可移动
				_spriteNpc->setPosition(ccp(_spriteNpc->getPositionX(), _spriteNpc->getPositionY() + MAP_TILE_SIZE));
			}
IF判断中可理解为地图的左上角positionY要大于屏幕高度+地图块大小的高33(块大小宽高都设置成了33)。

ELSE IF判断中则是判断精灵positionY的坐标小于地图的高 - 33 - 25,即还在地图的有效范围之内。
上移图一


上代码之左移:

if (_map->getPositionX() < 0) {
				_map->setPosition(ccp(_map->getPositionX() + MAP_TILE_SIZE, _map->getPositionY()));
				_spriteNpc->setPosition(ccp(_spriteNpc->getPositionX() - MAP_TILE_SIZE, _spriteNpc->getPositionY()));
			} else if (_spriteNpc->getPositionX() > _map->getPositionX() + MAP_TILE_SIZE) {
				_spriteNpc->setPosition(ccp(_spriteNpc->getPositionX() - MAP_TILE_SIZE, _spriteNpc->getPositionY()));
			}

if判断中地图的positionX要小于屏幕的positionX,大于就是屏幕在地图的左边了,超出那部分变黑,影响用户体验。

else if中是判断精灵是否还能继续向左移动。假如精灵在C点,此时地图不能再向右移动了,而C点还能继续向左移动,就就判断C点的positionX是否大于A点+33或者这样写也行:

} else if (_spriteNpc->getPositionX() > MAP_TILE_SIZE) {
方便理解。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值