#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
using namespace cocos2d;
using namespace CocosDenshion;
CCScene* HelloWorld::scene()
{
CCScene *scene = CCScene::create();
HelloWorld *layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !CCLayer::init() )
{
return false;
}
CCSize size = CCDirector::sharedDirector()->getWinSize();
//CCCallFunc 调用的方法不包含参
CCSprite* callFuncSp = CCSprite::create("Icon.png");
callFuncSp->setPosition(ccp(size.width/4, size.height*0.5));
this->addChild(callFuncSp);
callFuncSp->runAction(CCCallFunc::create(this, callfunc_selector(HelloWorld::callback1)));
//CCCallFuncN 调用的方法包含一个CCNode*类型的参数,表示执行动作的对象。
CCSprite* callFuncNSp = CCSprite::create("Icon.png");
callFuncNSp->setPosition(ccp(size.width/2, size.height*0.5));
this->addChild(callFuncNSp);
callFuncNSp->runAction(CCCallFuncN::create(this, callfuncN_selector(HelloWorld::callback2)));
//CCCallFuncND,回调,ND表示CCNode和Data,可以传递对象本身和一个void*类型参数,void*表示可以是任意类型的参数
CCLabelTTF* title = CCLabelTTF::create("void* 要传的参数", "Marker Felt", 16); //自定义一个CCLabelTTF
title->setPosition(ccp(size.width/4*3, size.height*0.6));
this->addChild(title);
CCSprite* callFuncNDSp = CCSprite::create("Icon.png");
callFuncNDSp->setPosition(ccp(size.width/4*3, size.height*0.5));
this->addChild(callFuncNDSp);
callFuncNDSp->runAction(CCCallFuncND::create(this, callfuncND_selector(HelloWorld::callback3), (void*)title));
return true;
}
void HelloWorld::callback1()
{
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLabelTTF *label = CCLabelTTF::create("callback 1 called", "Marker Felt", 16);
label->setPosition(ccp( s.width/4*1,s.height/3));
addChild(label);
}
//CCNode* sender为运行动作的它本身也就是CCSprite* callFuncNSp
void HelloWorld::callback2(CCNode* sender)
{
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLabelTTF *label = CCLabelTTF::create("callback 2 called", "Marker Felt", 16);
label->setPosition(ccp( s.width/4*2,s.height/3));
addChild(label);
//自身做顺时针旋转动作
sender->runAction(CCRepeatForever::create(CCRotateBy::create(1, 360)));
}
//CCNode* sender也就是CCSprite* callFuncNDSp. void的字面意思是“无类型”,void*则为“无类型指针”,void*可以指向任何类型的数据。
void HelloWorld::callback3(CCNode* sender, void* data)
{
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLabelTTF *label = CCLabelTTF::create("callback 3 called", "Marker Felt", 16);
label->setPosition(ccp( s.width/4*3,s.height/3));
addChild(label);
//自身做逆时针旋转动作
sender->runAction(CCRepeatForever::create(CCRotateBy::create(1, -360)));
//void* data也就是CCLabelTTF* title
CCLabelTTF* title = (CCLabelTTF*)data;
title->runAction(CCRepeatForever::create(CCJumpBy::create(1, ccp(0, 0), 30, 2)));
}
效果图: