1.菜单的使用:
CCMenuItemimage*image=CCMenuItemImage*create("xxx.png",
"xxx,png",
"xxx.png",
this,
menu_selector(HelloWorld::selfdefinefunc));//第一个参数:未选中时使用的图片,第二个参数:选中时使用的图片,第三个参数:进入时选用的图片,第四个参数:在哪个对象上,第四个参数:具体的响应函数。
CCMenu*menu=CCMenu::create(iamge,NULL);//创建菜单
menu->addChild(menu);
2.精灵执行的动作:
CCMoveBy*moveby=CCMoveBy::create(2.0f,ccp(800,0));
CCCallFuncN*selfaction=CCCallFuncN::create(this,callfuncN_selector(HelloWorld::selfdefine));//CCCallFuncN也是一个动作,只不过这个动作是回调一个函数(带一个参数)。
CCSequence*action=CCSequence::create(moveby,selfaction,NULL);//组合动作
sprite1->runAction(action);
3.怎样开启定时器:
bool HelloWorld::init()
{
//省略很多代码
this->schedule(schedule_selector(HelloWorld::usecreatesprite),2);//第一个参数:响应函数,第二个参数:间隔多久执行一次。
return true;
}
void HelloWorld::usecreatesprite(float dt){
createsprite();
}
void HelloWorld::createsprite(){
CCSize visiblesize=CCDirector::sharedDirector()->getVisibleSize();
CCSprite* sprite1=CCSprite::create("sprite.png");//因为要创建很多精灵,所以使用局部变量,不适用类成员。
int y=rand()%(int)(visiblesize.height);
sprite1->setPosition(ccp(10,y));
this->addChild(sprite1);
CCMoveBy*moveby=CCMoveBy::create(2.0f,ccp(800,0));
CCCallFuncN*selfaction=CCCallFuncN::create(this,callfuncN_selector(HelloWorld::selfdefine));
CCSequence*action=CCSequence::create(moveby,selfaction,NULL);
sprite1->runAction(action);
}
提问:为什么在用定时器时不直接启用createsprie函数,而是在usecreatesprite(float dt)函数中调用?
因为schedule里的执行函数的原型是固定的,返回值是void型,参数类型是float,而createsprite函数不符合要求,所以用usecreatesprite函数起到一个过渡函数的作用。