tima620のゆらぎ

「のlog.txt」を畳み、「の」が崩御し、「のはざま」をはさんだ後に生まれた「のゆらぎ」

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);
}
----ここまで追加----

こんな感じ。