您的位置:首页 > 其它

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

2013-09-04 10:10 232 查看
环境: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) {
方便理解。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐