2013年03月27日

Cocos2d-xで作成したAndroidアプリ「単位先生」を公開しました〜

Cocos2d-xでiPhoneとAndroid同時リリースがんばるぞ〜。

ようやくGoogle Playで公開出来ました。

googlePlay.jpg
https://play.google.com/store/apps/details?id=com.itokami1123.TaniSensei&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5pdG9rYW1pMTEyMy5UYW5pU2Vuc2VpIl0.

が、さっきバグを発見。。
今日帰ってからバグを修正して再申請しよっと。

あ、AppleのAppStoreにも申請せねば!
posted by itokami1123 at 12:28| Comment(0) | 日記

2013年03月14日

cocos2d-xで同時、順次、関数後起動のアニメーションを試してみました。

Cocos2d-xでiPhoneとAndroid同時リリースがんばるぞ〜。
っていつ完成する事やら。。

前回、さまざまなアニメーション移動を調べましたので
今回はアニメーションの組み合わせ方に関して調べてみたいと思います。

まず複数同時にアニメーションしたい場合はCCSpawnというのを使うようです。

↓サンプル↓

// 右方向に2回ジャンプと同時に、右に90度づつ回転
CCFiniteTimeAction* jump = CCJumpBy::create( (float)1.0, ccp(44,0), 100, 2 );
CCFiniteTimeAction* rotate = CCRotateBy::create( (float)1.0, (float)90.0 );
CCSpawn* spawn = CCSpawn::create( jump, rotate, NULL);
this->animationSprite->runAction( spawn );


右に蹴られた缶が右に転がる感じみたいですね。


続いて連続してアニメーションを起こすには
CCSequenceというのを使うようです。
さっきのアニメーションの続きに拡大するアニメーションを追加しました。

↓サンプル↓

// 右方向に2回ジャンプしつつ、右に90度づつ回転
CCFiniteTimeAction* jump = CCJumpBy::create( (float)1.0, ccp(44,0), 100, 2 );
CCFiniteTimeAction* rotate = CCRotateBy::create( (float)1.0, (float)90.0 );
CCSpawn* spawn = CCSpawn::create( jump, rotate, NULL);

// その後、2.4倍に膨らむ!
CCFiniteTimeAction* scaleUp = CCScaleBy::create( (float)0.5, (float)2.4 );
CCSequence *squence = CCSequence::create( spawn, scaleUp, NULL );
this->animationSprite->runAction( squence );



最後に全てのアニメーションが終わった後に
関数を起動するようにしてみます。
CCCallFuncN を使えば
CCSequenceの順番待ちしているアニメーションの処理の中に
関数を追加出来ます。


↓サンプル↓

// 右方向に2回ジャンプしつつ、右に90度づつ回転
CCFiniteTimeAction* jump = CCJumpBy::create( (float)1.0, ccp(44,0), 100, 2 );
CCFiniteTimeAction* rotate = CCRotateBy::create( (float)1.0, (float)90.0 );
CCSpawn* spawn = CCSpawn::create( jump, rotate, NULL);

// アニメーション後に 関数を起動する
CCFiniteTimeAction* actionMoveDone =CCCallFuncN::create( this,
callfuncN_selector(Game::nextProc));

CCSequence *squence = CCSequence::create( spawn, actionMoveDone, NULL );
this->animationSprite->runAction( squence );



この例はアニメーション終了後に
nextProc関数を起動します。

色々出来て便利ですね!!



posted by itokami1123 at 17:58| Comment(0) | 日記

2013年03月13日

cocos2d-xでCCSpriteの移動アニメーションを試してみました。

Cocos2d-xでiPhoneとAndroid同時リリースがんばるぞ〜。

後でアニメーション切替で使うため
まず、乱数発生を調べました。

Objective-CでiPhoneゲームを作っているときはを使用していました。
arc4random()

以下サイトが分かりやすいです!助かります〜。
http://tanukichi566.blog.fc2.com/blog-entry-57.html

同じような感じで。。。と思ったのですけど
cocos2d-xが用意してくれておりました。

ファイル名:ccMacros.h
#define CCRANDOM_0_1() ((float)rand()/RAND_MAX)

でこんな感じで使えました。
これで算数問題の数値が生成できますねぇ。
// 0〜99の乱数を発生
int randNum = (int)( CCRANDOM_0_1()*100 );


前回がパラパラアニメーションでしたので
今回は移動するアニメーションを調査したいと思います。

移動アニメーションの種類は一杯あるんですね〜。

1. 指定した場所に移動
CCMoveTo::create( 時間, ccp( 移動先のX座標, 移動先のY座標 ) );

2. 現在位置から増分移動
CCMoveBy::create( 時間, ccp( X座標の増分, Y座標の増分 ) );

3. ジャンプしながら指定場所に移動
CCJumpTo::create( 時間, ccp( 移動先のX座標, 移動先のY座標 ), ジャンプの高さ, ジャンプ回数 );

4. ジャンプしながら増分移動
CCJumpBy::create( 時間, ccp( X座標の増分, Y座標の増分 ), ジャンプの高さ, ジャンプ回数 );

5. 指定サイズに拡大縮小
CCScaleTo::create( 時間, 拡大縮小のスケール );

6. 増分による拡大縮小
CCScaleBy::create( 時間, 増分のスケール );

7. 指定角度に回転
CCRotateTo::create( 時間, 指定角度 );

8. 増分角度の回転
CCRotateBy::create( 時間, 増分の角度 );

こんな感じでサンプルを作ってみました〜。
CCSpriteが手軽にいろんな動きをして楽しいですね!


// 0〜7の乱数を発生
int animationSwitch = (int)(CCRANDOM_0_1()*8);
CCLog("乱数にてアニメーション種類を確定 %01d",animationSwitch);

// アニメーションの種類を設定
CCFiniteTimeAction* actionMove;
float aniDuration = 1.0f; // アニメーションにかける時間
switch (animationSwitch) {
case 0:{
// MoveToは場所指定
CCSize size = CCDirector::sharedDirector()->getWinSize();
actionMove = CCMoveTo::create( aniDuration, ccp( size.width/2, size.height/2 ) );
break;
}
case 1:{
// MoveByは増分移動
int addX = (int)( CCRANDOM_0_1()*200 );
int addY = (int)( CCRANDOM_0_1()*200 );
actionMove = CCMoveBy::create( aniDuration, ccp( addX, addY ) );
break;
}
case 2:{
// CCJumpToはジャンプしながら場所指定
CCSize size = CCDirector::sharedDirector()->getWinSize();
actionMove = CCJumpTo::create( aniDuration, ccp( size.width/2, size.height/2 ), 100.0f, 2 );
break;
}
case 3:{
// CCJumpByはジャンプしながら増分移動
int addX = (int)( CCRANDOM_0_1()*200 );
int addY = (int)( CCRANDOM_0_1()*200 );
actionMove = CCJumpBy::create( aniDuration, ccp( addX, addY ), 100.0f, 2 );
break;
}
case 4:{
// CCScaleTo 表示Spriteの指定拡大縮小
float scale = (float)( CCRANDOM_0_1()*6 );
actionMove = CCScaleTo::create( aniDuration, scale );
break;
}
case 5:{
// CCScaleBy 表示Spriteの増分拡大縮小
float scale = (float)( CCRANDOM_0_1()*6 );
actionMove = CCScaleBy::create( aniDuration, scale );
break;
}
case 6:{
// CCRotateTo 表示Spriteの指定回転
float fDeltaAngle = (float)( CCRANDOM_0_1()*360 );
actionMove = CCRotateTo::create( aniDuration, fDeltaAngle );
break;
}
case 7:{
// CCRotateBy 表示Spriteの増分回転
float fDeltaAngle = (float)( CCRANDOM_0_1()*360 );
actionMove = CCRotateBy::create( aniDuration, fDeltaAngle );
break;
}

}

this->animationSprite->runAction( actionMove );



次回はアニメーション終了のタイミングで
別の処理を起動できるかを調べてみたいと思います。

posted by itokami1123 at 17:55| Comment(0) | 日記