夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

2013-04-01から1ヶ月間の記事一覧

【Clip Studio】今日からClip Studio Modelerベータテスト参加者募集中

2Dのお絵描きツールとして私はセルシスのClip Studio Paint Proを使っています。 このセルシスから2013年夏に3DモデリングソフトClip Studio Modelerがリリース予定だそうです。 それに先立ち、本日4月30日よりクローズドベータテストの参加者を募集するよう…

【cocos2d】タッチ情報取得用にレイヤーを分けてみた

今まではゲームのメインとなるレイヤーでタッチ情報を取得し、タッチイベントが発生する度に自分のキャラクターの位置情報を更新していました。オブジェクト指向的な考え方をすると、キャラクターの位置情報が別のオブジェクトから勝手に更新される事に違和…

【Objective-C, cocos2d】任意の範囲のfloatのランダム値を得るマクロ

ある数値に係数を掛けて数値を若干ランダムに変化させる必要が出てきたので作ったマクロです。UINT_MAXの前に(float)をつけ忘れると整数の割り算になってしまうので要注意です。 #define MYRAND(min, max) ((arc4random()/(float)UINT_MAX)*((max)-(min))+(m…

【cocos2d】replaceSceneでシーンを切り替えてみた

今開発しているアプリは縦スクロールシューティングゲームなので、ステージをクリアすると次のステージに進むように作らなければなりません。 そこで、cocos2dのシーンを次々に進めて行く機能を実装してみました。 あるステージから次のステージに直接シーン…

【cocos2d】教訓:replaceScene後、シングルトンの子ノードを削除する

次回シーン切り替えについて書こうと思いますが、その実装中、前のシーンのスプライトの残骸が画面に残るバグに悩まされました。結論としては、シングルトンのCCSpriteBatchNodeのインスタンスにaddChildされているスプライト達をシーン切り替えのタイミング…

【cocos2d】iAd, AdMobの広告をつけてみた

いきなり有料のアプリをリリースするのは気が引けるので最初のアプリは無料の広告付きでリリースしたいと思います。 まずiAdでの広告表示を試みて、広告がなければAdMobの広告を表示するというのが流行りらしいので、こちらのサイト、続きを参考にさせていた…

【cocos2d】cocos2dのタイトル画面をオリジナルのスプラッシュとタイトルに変えてみた

毎回ゲームを起動するたびにcocos2dのスプラッシュとタイトル画面が表示されるのにも飽きてきたので、そろそろオリジナルの物に変更したいと思います。 スプラッシュ画面は起動したときに表示される例のやつです。 これです。縦画面のゲームでも横向きに表示…

【cocos2d】CCAnimationでスプライトをアニメーションしてみた

今回はキンバエのキャラクターを作りアニメーションをつけてみました。 まずはアニメーションに使用するハエの絵を描きます。絵を描くのにはセルシスのClip Studio Paintというソフトを使っています。CLIP STUDIO PAINT PROセルシスAmazonペンタブレットはWa…

【cocos2d】敵のキャラクター生成ルーチンを実装してみた

今回は、前回作成した.plistファイルから読み込んだデータを使って敵キャラクターを画面上に発生させてみます。このポストの最後に実行画面の動画が貼付けてありますのでご参照ください。 一番上の行がDisctionaryのキーになり、2行目以降は各エントリーのそ…

【Objective-C】.plistファイルの作り方と読み込み方

追記:.plistファイルを経由せずに.csvファイルを直接プログラムから読み込む方法は、 【Objective-C】.plistファイルを経由せず直接.csvファイルからデータを読み込む方法 - 夏までにiPhone アプリつくってみっか! をご参照ください。現在作成中の縦スクロ…

【cocos2d】scheduleOnceで失敗。本当に1回しか呼べない

今日のハマりポイント第2弾はscheduleOnceです。 セレクターをscheduleOnceでスケジュールして、そのセレクターの中で別の時間を設定してscheduleOnceを再スケジュールするというような使い方を考えていましたがダメでした。例: (id) init { .... [self sch…

【cocos2d】convertToWorldSpaceで失敗。座標がおかしくなった

今日のハマりポイントその1、converToWorldSpaceです。 あるスプライトに別のスプライトをaddChildしたとき、子スプライトのpositionプロパティが示す座標は親のスプライトの左下を原点としたローカル座業で表現されます。 当たり判定などで子スプライトの位…

【cocos2d】背景をスクロールさせてみた。えっ、こんなにかんたんなの?

縦スクロールシューティングゲームを作ると宣言しながらもずっと横画面だったこの自作アプリもようやく前回から縦画面になり縦シューらしくなってきました。 今回は背景を付け、それをスクロールさせる事でよりそれっぽくしたいと思います。ようやく黒背景か…

【cocos2d】オリエンテーションをランドスケープからポートレイトに変えてみた

cocos2dのテンプレートから作成したプロジェクトのオリエンテーションはランドスケープモードのみに設定されています。オリエンテーションとは画面の向きの事で、iPhoneを縦に持つか横に持つかで変わります。ランドスケープは横持ち、ポートレイトは縦持ちの…

【cocos2d】ぎこちないCCActionの動きを滑らかにしてみた Part 3

前々回、前回で作成したSteering BehaviorsのArrivalアルゴリズムを実装したMySteeringクラスを2つの方法で使ってみたいと思います。 1つ目は継承です。これまで作ってきたMyEnemyクラスを修正し、MySteeringクラスのサブクラスに変更します。MyEnemyクラス…

【cocos2d】ぎこちないCCActionの動きを滑らかにしてみた Part 2

前回のPart 1に掲載したSteering BehaviorのArrivalアルゴリズムのプログラムについて解説したいと思います。自分の理解を深めるために絵を描きましたのでプログラムの各部をとそれに対応する絵を使って説明します。説明の中で、速度、加速度、位置など単位…

【cocos2d】ぎこちないCCActionの動きを滑らかにしてみた

cocos2dのCCActionのCCMoveByなどをつかってキャラクターを方向転換させると角のあるカクカクとした動きになってしまいます。もちろん角がなくなるよういくつものアクションを連続して行えば滑らかになると思いますが、非常に面倒くさそうです。 そこで、今…

【cocos2d】CocosDenshionでSEを出してみた

敵が爆発する音と自機が弾を撃つ音をつけてみました。音の素材はGarageBandのFXループのAbstract Atmosphere 155とSwirly Filter 14です。もしかするとGarageBand標準のループではなくMainStage 2に付属してくるJam Packに入っている物かもしれません。私は…

【cocos2d】CCAction実行中に他のCCActionを重ねて実行できるのか検証

前回、CCCallBlockのところで「例えば、一発で死なないオブジェクトの場合、フェードアウトではなく点滅アクションを入れ、その後でscheduleUpdateであたり判定を再開するような感じでCCCallBlockアクションを使えると思います。」などと書いたのですが、敵…

【cocos2d】自作のパーティクルエフェクトを作ってみた

前回はcocos2dのあり物のパーティクルを使ってみましたが爆発というにはカラフルすぎたので自分でそれっぽいパーティクルエフェクトを作ってみたいと思います。パーティクルを作るのに便利なParticle Designerなどというツールもありますが、今回は自分でパ…

【cocos2d】パーティクルエフェクトをつけてみた

前回はあたり判定を実装し、被弾した敵キャラを抹消しました。しかし一瞬で消えてしまうのではやっつけた感が薄いので今回はパーティクルエフェクトで敵キャラを宇宙の塵にしたいと思います。パーティクルの粒は多数のスプライトなのですが、スプライトとし…

【cocos2d】当たり判定を実装してみた

ようやく各クラスをCCNodeのサブクラスからCCSpriteのサブクラスに直し終わりました。ずいぶんすっきりとしたように感じます。当たり判定に関する処理や情報を各クラス共通で入れたかったので実際は、CCSpriteを継承するCollisionSpriteというクラスを作り、…

【Objective-C, cocos2d】イニシャライザ内でself.parentを参照すると危険

またハマりました。 イニシャライザ内の処理でcocos2dのノード階層上の親ノードにアクセスするためにself.parentを使うとハマります。というより、その時点では親ノードにはつながっていません。例えば、MyClass* myobj = [[MyClass alloc] init]; [self add…

【Objective-C, cocos2d】Weakのインスタンス変数についての疑問解決しました

前回悩んでいたweak指定のインスタンス変数にオブジェクトを入れるにはどうすれば良いかという疑問が解決しました。__weak CCSprite* testと言うインスタンス変数があったとして、_test = [[CCSprite alloc] initWithFile@"test-sprite.png"]; [self addChil…

【Objective-C】プロパティを使ってみる(nonatomic, readonly, weakどうすりゃいいの?)

前回のMyEnemyのテストプログラムにより、CCNodeのサブクラスに対してCCFadeInなどのアクションを設定するとクラッシュ事が判明しました。現時点ではMySprite, MyBulletでは動きに関するアクションしか設定していないため、たまたま動作していますが、今後に…

【cocos2d】敵キャラ登場!

今回はいよいよ敵キャラを画面に登場させてみます。 シューティングゲームには様々な見た目、動きの敵キャラが登場しますが、それらをどのように管理するか考えます。キャラ毎にクラスを分けるとものすごいクラス数とファイル数になるので避けるべきでしょう…

【cocos2d, Objective-C】CCSpriteBatchNodeをシングルトンで実装してみる

今回はスプライトバッチノードをシングルトンとして実装してみたいと思います。シングルトンのインスタンスはクラスメソッドから取り出せるので、ヘッダファイルさえインポートしておけばどのクラスのどのメソッドからも[MyBatch sharedMybach]の形でアクセ…

【cocos2d】テクスチャアトラスを使ってみる

今回は、CCSpriteBatchNodeを使わずに実装した前回の弾を放射状に撃つプログラムをCCSpriteBatchNodeを使って実装してみたいとおもいます。が、その前に考えなくてはならない事があります。 キャラクターが発射する弾のサイズはキャラクターより小さい方が良…

【cocos2d】弾を撃ってみた

今回は弾を撃ってみました。 弾のクラスとしてMyBulletを作成。MySpriteのオプションスプライトから放射状に連射します。 こんな感じの画面になります。 MyBulletクラスの実装ファイルはこうなりました。CCNodeを継承しています。 イニシャライザが受け取る…

【cocos2d】CCActionを試してみる

未だにCCSpriteBatchNodeを使うかどうか迷っているのですが、とりあえず、CCSpriteBatchNodeを使わない自然なノード階層(node hierarchy)になおし、CCActionを使ってみたいと思います。 で、完成したのがこのMySpriteクラス。前回のプログラムと同様、メイン…