您的位置:首页 > 移动开发 > Cocos引擎

cocos 2dx 更新函数

2016-03-29 09:45 435 查看
cocos2dx中更新函数有两种,

一种是默认的,通过scheduleUpdate()开启使用,unscheduleUpdate()关闭。每帧会调用一次。

另一种通过 schedule(schedule_selector(HelloWorld::myUpdate),1.f)开启使用,
unschedule(schedule_selector(HelloWorld::myUpdate))关闭。

关闭所有unscheduleAllSelectors() 更新函数

例子

新建工程,testUpdate

修改HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__

#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"

class HelloWorld : public cocos2d::CCLayer

{

public:

// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)

virtual bool init();

// there's no 'id' in cpp, so we recommend to return the class instance pointer

static cocos2d::CCScene* scene();

void update(float dt);

void myUpdate(float dt);

// preprocessor macro for "static create()" constructor ( node() deprecated )

CREATE_FUNC(HelloWorld);

};

#endif // __HELLOWORLD_SCENE_H__

修改HelloWorldScene.cpp

#include "HelloWorldScene.h"

#include "SimpleAudioEngine.h"

using namespace cocos2d;

using namespace CocosDenshion;

CCScene* HelloWorld::scene()

{

// 'scene' is an autorelease object

CCScene *scene = CCScene::create();

// 'layer' is an autorelease object

HelloWorld *layer = HelloWorld::create();

// add layer as a child to scene

scene->addChild(layer);

// return the scene

return scene;

}

// on "init" you need to initialize your instance

bool HelloWorld::init()

{

//////////////////////////////

// 1. super init first

if ( !CCLayer::init() )

{

return false;

}

CCSprite *sp=CCSprite::create("Icon.png");

sp->setPosition(ccp(80,200));

addChild(sp,0,922);

//更新

scheduleUpdate();

CCSprite *sp2=CCSprite::create("Icon.png");

sp2->setPosition(ccp(80,50));

addChild(sp2,0,921);

//更新

schedule(schedule_selector(HelloWorld::myUpdate), 1.f);

return true;

}

void HelloWorld::update(float dt)

{

//停止更新

// unscheduleUpdate();

CCSprite*sp =(CCSprite*)this->getChildByTag(922);

if(sp->getPositionX()<260){

sp->setPosition(ccpAdd(sp->getPosition(), ccp(1,1)));

}else{

sp->setPosition(ccpAdd(sp->getPosition(), ccp(1,-1)));

}

}

void HelloWorld::myUpdate(float dt)

{

//停止更新

// unschedule(schedule_selector(HelloWorld::myUpdate));

CCSprite*sp =(CCSprite*)this->getChildByTag(921);

if(sp->getPositionX()<260){

sp->setPosition(ccpAdd(sp->getPosition(), ccp(1,1)));

}else{

sp->setPosition(ccpAdd(sp->getPosition(), ccp(1,-1)));

}

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