读了cocos2d-x手机游戏开发作者给的源代码,感觉里面那个地图滚动代码,不合自己口味,于是拿以前开发时用的代码给改掉了。
- void GameScene::setSceneScrollPosition(cocos2d::ccTime dt)
- {
- CCPoint position=hero->getPosition();
- CCSize screenSize = CCDirector::sharedDirector()->getWinSize();
- CCSize mapSizeInPixel = CCSizeMake(map->getMapSize().width * map->getTileSize().width, map->getMapSize().height * map->getTileSize().height);
- if (mapSizeInPixel.width>screenSize.width)
- {
- float x=position.x-screenSize.width/2.0f;
- limit(0.0f,x,mapSizeInPixel.width-screenSize.width);
- this->setPosition(ccp(-x,this->getPosition().y));
- }
- if (mapSizeInPixel.height>screenSize.height)
- {
- float y=position.y-screenSize.height/2.0f;
- limit(0.0f,y,mapSizeInPixel.height-screenSize.height);
- this->setPosition(ccp(this->getPosition().x,-y));
- }
- }
x轴和y轴是分别计算的,首先求出候选值,然后用把它限制在可行域中,然后就是偏移了。我觉得这个代码是比较清晰的。
上面用到的模板函数如下:
- template<typename T>
- inline void limit(T min,T &val, T max)
- {
- if (val<min)
- val=min;
- else if (val>max)
- val=max;
- }
本文转自 老G 51CTO博客,原文链接:http://blog.51cto.com/goldlion/760179,如需转载请自行联系原作者