Cocos2d-x
发布时间:2022-05-03 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos2d-x 实现地图滚动,解释缝隙产生的原因以及解决方案,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
温馨提示:如果只是找缝隙解决方案的请直接跳到最后的第4点。
在跑酷游戏(天天酷跑)或者射击游戏(打飞机)中都有背景循环移动的机制。网上也有很多的实现方法,我这里先直接用代码反映出来:
@R_618_10284@的是我这个是做的横版向左移动:
-
-
- */
-
- @H_489_47@#ifndef__HelLOWORLD_SCENE_H__
- @H_489_47@#define__HelLOWORLD_SCENE_H__
-
- @H_489_47@#include"cocos2d.h"
- @H_489_47@#defineMAP_1_Tag1//宏定义两个Map的Tag
- @H_489_47@#defineMAP_2_Tag2
- classHelloWorld:publiccocos2d::CCLayer
- {
- private:
- voidupdate(floattimE);
- virtualvoidonExit();
- public:
- virtualboolinit();
- staticcocos2d::CCScene*scene();
- CREATE_FUNC(HelloWorld);
- };
- @H_489_47@#endif
HelloWorldScene.cpp
- @H_489_47@#include"HelloWorldScene.h"
- USING_NS_Cc;
- CCScene*HelloWorld::scene()
- CCScene*scene=CCScene::create();
- HelloWorld*layer=HelloWorld::create();
- scene->addChild(layer);
- returnscene;
- }
- boolHelloWorld::init()
- if(!CCLayer::init())
- returnfalse;
- }
- CCSizevisibleSize=CCDirector::sharedDirector()->getVisibleSize();
- CCPointorigin=CCDirector::sharedDirector()->getVisibLeorigin();
- CCSprite*map1=CCSprite::create("HelloWorld.png");
- CCSprite*map2=CCSprite::create("HelloWorld.png");
- @H_742_24@map1->setPosition(ccp(map1->getContentSize().width/2+origin.x,map1->getContentSize().height/2+origin.y));
- @H_742_24@map2->setPosition(ccp(map2->getContentSize().width/2+origin.x+map2->getContentSize().width,map2->getContentSize().height/2+origin.y));
- this->addChild(map1,MAP_1_Tag);
- this->addChild(map2,MAP_2_Tag);
- this->scheduleupdate();
- true;
- voidHelloWorld::update(floattimE)
- {
- CCSizevisibleSize=CCDirector::sharedDirector()->getVisibleSize();
- CCPointorigin=CCDirector::sharedDirector()->getVisibLeorigin();
- CCSprite*temMap1=(CCSprite*)this->getChildByTag(MAP_1_Tag);
- CCSprite*temMap2=(CCSprite*)this->getChildByTag(MAP_2_Tag);
- temMap1->setPositionX(temMap1->getPositionX()-5);
- temMap2->setPositionX(temMap2->getPositionX()-5);
- if(temMap1->getPositionX()+temMap1->getContentSize().width/2<=origin.X)
- floatoffset=temMap1->getPositionX()+temMap1->getContentSize().width/2-origin.x;
- temMap1->setPosition(ccp(temMap1->getContentSize().width/2+origin.x+visibleSize.width+offset,visibleSize.height/2+origin.y));
- if(temMap2->getPositionX()+temMap2->getContentSize().width/2<=origin.X)
- floatoffset=temMap2->getPositionX()+temMap2->getContentSize().width/2-origin.x;
- temMap2->setPosition(ccp(temMap2->getContentSize().width/2+origin.x+visibleSize.width+offset,153); BACkground-color:inherit; font-weight:bold">voidHelloWorld::onExit()
- this->unscheduleupdate();
- CCLayer::onExit();
- }