地图的滚动(根据触摸点)

来源:互联网 发布:中国烟民为什么多 知乎 编辑:程序博客网 时间:2024/05/23 15:19

<1>数据成员。

public:void mapScroll(CCPoint touchPoint);void update(float dt);public:CC_SYNTHESIZE(CCTMXTiledMap*, _map, Map);CC_SYNTHESIZE(CCPoint, _viewPoint, ViewPoint);

<2>数据初始化。

  CCSize size = CCDirector::sharedDirector()->getWinSize();_map = CCTMXTiledMap::create("MyTiaoTest.tmx");addChild(_map);       _viewPoint = ccp(size.width/2, size.height/2);scheduleUpdate();

<3>地图根据触摸点来滚动。

void HelloWorld::mapScroll(CCPoint touchPoint){ CCSize winSize=CCDirector::sharedDirector()->getWinSize();int x=MAX(touchPoint.x, winSize.width/2);int y=MAX(touchPoint.y, winSize.height/2);x=MIN(x,(this->getMap()->getMapSize().width*this->getMap()->getTileSize().width)-winSize.width/2);y=MIN(y,(this->getMap()->getMapSize().height*this->getMap()->getTileSize().height)-winSize.height/2);CCPoint actualPosition=ccp(x,y);CCPoint centerOfView=ccp(winSize.width/2,winSize.height/2);CCPoint viewPoint=ccpSub(centerOfView,actualPosition);  //v1 - v2 也就是第一个减去第二个this->setPosition(viewPoint);}
void HelloWorld::update(float dt){_viewPoint = ccpAdd(_viewPoint, ccp(5, 0));mapScroll(_viewPoint);}



0 0
原创粉丝点击