Cocos2d-x勉強_人が動いた
肉が人が動いた。
http://www.cocos2d-x.org/wiki/Chapter_2_-_How_to_Add_a_sprite
http://www.cocos2d-x.org/wiki/Chapter_3_-_How_to_Move_a_sprite
本編はChapter3だけど、Chapter2もやったよ(ほぼ前回やってたようなことが書いてた。)
どこに何を書くかはかなりしっかり書いてあると思うけど、一応。
今回移動させる画像。human.pngで保存。
HelloWorldScene.h
class HelloWorld : public cocos2d::CCLayerColor { public: ... ----ここから追加---- void addTarget(); void spriteMoveFinished(CCNode* sender); void gameLogic(float dt); ----ここまで追加---- }
※CCLayerではなくCCLayerColorを継承しているのは、Chapter2を見ればわかる。
HelloWorldScene.cpp
bool HelloWorld::init() { ... ----ここから追加---- this->schedule( schedule_selector(HelloWorld::gameLogic), 1.0); ----ここまで追加---- return true } ----ここから追加---- void HelloWorld::gameLogic(float dt) { this->addTarget(); } void HelloWorld::addTarget() { CCSprite *target = CCSprite::create("human.png",CCRectMake(0,0,100,100)); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); int minY = target->getContentSize().height/2; int maxY = winSize.height - target->getContentSize().height/2; int rangeY = maxY - minY; int actualY = (rand() % rangeY) + minY; target->setPosition( ccp(winSize.width + (target->getContentSize().width/2), actualY) ); this->addChild(target); int minDuration = (int)2.0; int maxDuration = (int)4.0; int rangeDuration = maxDuration - minDuration; int actualDuration = ( rand() % rangeDuration ) + minDuration; CCFiniteTimeAction* actionMove = CCMoveTo::create( (float)actualDuration, ccp(0-target->getContentSize().width/2, actualY) ); CCFiniteTimeAction* actionMoveDone = CCCallFuncN::create( this, callfuncN_selector(HelloWorld::spriteMoveFinished)); target->runAction(CCSequence::create(actionMove, actionMoveDone, NULL)); } void HelloWorld::spriteMoveFinished(CCNode* sender) { CCSprite *sprite = (CCSprite *)sender; this->removeChild(sprite,true); } ----ここまで追加----
こんな感じ。