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

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

cocos2d

cocos2d 2.1を2.2にバージョンアップして恐怖の64bit対応 (続編)

さて、前回行った、TravelShooting JPの64bitプロセッサへの対応ですが、問題もほとんど出ずに完了したので、本当に64bitで動作しているのか不安になってしまいました。前回の記事:cocos2d 2.1を2.2にバージョンアップして恐怖の64bit対応 - 夏までにiPhone…

cocos2d 2.1を2.2にバージョンアップして恐怖の64bit対応

cocos2d 2.1で開発したTravelShooting JP iOS版ですが、Appleによる64bitアーキテクチャ対応への期限が迫ってきたので恐る恐るcocos2dをバージョン2.2にアップグレードし、64bit対応を実施しました。64bitアーキテクチャに対応していない場合、6月1日以降は…

【TravelShooting JP】スペハリ風移動アルゴリズムを試すも不採用に

セガ3D復刻アーカイブスを買って以来スペハリをやりまくっていますが、ハリアーの移動に若干の違和感を感じました。 円を描くように操作しているつもりなのですが、ハリアーは菱形に移動してしまいます。 試しにプレステ3版を起動して試しましたが、結果は同…

【cocos2d】全てのSEをピタッと止める

ゲームにポーズ機能をしばらく前に付けましたが、ポーズした時に鳴っているSEがすぐに鳴り止まず、弾の発射音や爆発音が後を引くのがずっと気になっていました。 BGMはSimpleAudioEngineのpauseBackgroundMusicで一時停止できますが、エフェクトの方はどのエ…

【cocos2d】処理待ち時間にグルグル回るやつを表示する機能を実装

GameCenter機能やIn App Purchase機能など、サーバーとやり取りする機能を付け始めると、サーバーからのレスポンス待ちの間にLoading...とかPlease Wait...などと表示しつつ何か画面内で動かす事でユーザーを安心させる必要が出てきます。今回はcocos2dの画…

【TravelShooting JP】cocos2dでデバッグ用コリジョン円を表示

現在開発中のスペハリ風シューティングゲームTravelShooting JPでは単純な円を使った当り判定を採用しています。2つのノード間の距離とそれぞれのノードが持つコリジョン円の半径を足した値を比較するだけの非常に単純で高速なコリジョン検出方法です。簡単…

【cocos2d】scheduleUpdateでプライオリティを指定するのは超重要

久々にハマりました。 例によってTravelShooting JPというスペハリ風擬似3Dシューティングゲームの開発をしていまが、新たなボスキャラを実装し、それを満足げに眺めているうちに嫌なことに気がついてしまいました。このゲームでは自キャラが上下に動くとそ…

【TravelShooting JP】ゲーム開始時の処理をタイトル画面で済ませてレスポンスアップ!

順調に開発が遅れているTravelShooting JPですが、そろそろタイトル画面を付けて見たくなり、タイトル画面としてcocos2dのシーンを1つ追加しました。タイトル画面にボタンを1つ配置し、押すとゲームがスタートするようにしてみたのですが、嫌なことに気がつ…

【TravelShooting JP】衛星オブジェクトを持つボスのモーションの作り方

夏までに完成しなかったTravelShooting JPに新しいボスを追加しました。 スペハリで言うところのシュラのようにボス本体の回りに衛星のように別のオブジェクトが回るタイプのボスです。動画で見るとわかりやすいと思います。なお、スプライトのテクスチャー…

bmGlyphでゲーム用にゴージャスなフォントを作る

前作BeeClusterでは「フラットデザイン」と言い張り、飾り気のない真っ白なフォントを使っていました。 手抜きはいとも簡単に見破られ、レビューで「文字にやる気が感じられない」とのご指摘を受けてしまいました。 そこで、今作のTravelShooting JP(名前初…

【cocos2d】BGMをシークしてデータ量を削減

現在開発中のスペースハリアー風シューティングゲームではスペースハリアーと同じように、テーマソングは1曲だけでその再生開始位置を面ごとにズラすことで変化をつける予定です。 つまり、1面はBGMのイントロから、2面はAメロ、3面はBメロという感じです。 …

【cocos2d】VertexZをやめてZソートで半透明表示の問題を回避

現在開発中のスペハリ風シューティングゲームではcocos2dのVertexZを使って3D空間でのキャラクターの重ね合わせを行っていました。 【偽スペースハリアー】地上物を追加。だが違う。何かが違う! - 夏までにiPhone アプリつくってみっか! 上記の記事にある…

GarageBandでループ再生用ファイルを作る方法(ただし時間制限あり)

ゲーム用BGMの多く、特にボス戦用の曲はつなぎ目無くループ再生されますよね? 曲が終わってから次に始まるまでにたとえわずかでも曲間が開いているとどうでしょう。 シューティングゲームの場合はノリが悪くなってゲームに集中できなくなるかもしれません。 …

主人公の絵が完成。ゲームに組み込んでみた

主人公の女子高生の全ての動きの絵が完成しましたので、ゲームに組み込んで正しく表示される事を確認しました。また、飛行時の絵を切り替える位置も最適化し、できるだけよく動くように調整しました。本物のスペハリは地面を走っていると茂みに弾を当てるの…

【cocos2d】Core Motionを使ってcocos2dゲームをモーションセンサーで操作

前回、 【偽スペースハリアー】自家製スペハリfor iPhone完成!これからが本番 - 夏までにiPhone アプリつくってみっか! で一応完成した偽スペハリですが、まだまだプロトタイプとして実験に使って行きます。今回は、CoreMotionフレームワークを導入し、加…

【偽スペースハリアー】自家製スペハリfor iPhone完成!これからが本番

iPhone用のスペハリ的な擬似3Dシューティングゲームを作ろうと思い立ってから約2ヶ月間、なぜか本物のスペハリをそのまま移植してきました。理由としましては:1. プロトタイプ用の絵や音楽を作るのが面倒くさい 2. 擬似3Dゲームの様々なノウハウを吸収した…

【Objective-C, cocos2d】BGMの切り替えを並列処理して画面のコマ落ちを防ぐ方法

前回、 【cocos2d】テクスチャーをキャッシュに先読みしてゲーム中に画面が一瞬止まるのを防ぐ方法 - 夏までにiPhone アプリつくってみっか! で画面のコマ落ちを防ぐためにテクスチャーの先読みを行いました。 これで完璧か!とテストをしてみると、改善は…

【cocos2d】テクスチャーをキャッシュに先読みしてゲーム中に画面が一瞬止まるのを防ぐ方法

ゲームで使うテクスチャーが多くなってくると1枚のスプライトシートに収まらなくなり、複数のスプライトシートの分ける必要が出てきます。 iPhone4の最大テクスチャーサイズは2048x2048らしいのでこれをリミットとすると、私の偽スペハリの場合はボスのテク…

【cocos2d】あえて同時発声を制限してキレのいいSEを鳴らす

昔のゲーム機やパソコンのハードウェアのスペック表には同時発声数: FM音源8音、PSG3音などと必ず記載されていました。 いつしかPCM音源が標準になり、ソフト的に何音でも重ねられようになり、好きなだけジャンジャン音を鳴らせるようになりました。しかし、…

【cocos2d】cocos2d v2.0プロジェクトをv2.1にアップグレードする方法

これまでcocos2d v2.0を使い続けて来ましたが、v2.1がリリースされてからしばらく経ちます。 現状v2.0で特に困ることはありませんし、問題なく動いているプロジェクトに余計な手を入れるのは気が進みませんが、完成間近に何らかの理由でアップデートせざるを…

【偽スペースハリアー】CCRenderTextureで影の重なりが濃くなるのを防ぐ

偽スペハリでドラゴンの影同士が重なり合うとその部分が濃くなるという問題がありましたので少し強引な方法で修正しました。 たぶんここに書いてある方法は他の条件だと上手く行かない場合があると思います。まず、問題となっている現象はこれです。 影が重…

【偽スペースハリアー】サイン・コサインでドラゴンの動きを完コピ?

雑魚キャラのモーション作成の目処もついたので、いよいよボスキャラをどう実装するか検討してみたいと思います。スペースハリアーの多くのボスキャラはやられない限り永遠に画面に居続けるため、雑魚キャラのようにあらかじめ動きの軌跡をデータとして持っ…

【偽スペースハリアー】3D座標を簡単に見つけるためのツールを作成

前回、 【偽スペースハリアー】ベジェ曲線で滑らかに敵を動かしてみた - 夏までにiPhone アプリつくってみっか! ではベジェ曲線に沿って敵キャラクターを動かしてみました。ベジェ曲線はいくつかの3D座標からなる直線データを元に生成しているのですが、実…

【偽スペースハリアー】ベジェ曲線で滑らかに敵を動かしてみた

これまでは岩とか木とか動かない敵ばかりでしたが、いよいよまともに動く敵の登場です。 3D空間を動かすとなると残念ながらx, y座標限定のcocos2dのCCActionは役に立ちません。 3D空間を動かす方法はいろいろ考えられますが、スペハリのほとんどの雑魚キャラ…

【偽スペースハリアー】.plistに従い敵キャラを生成

これまではランダムな位置に敵キャラを生成していましたが、今回からあらかじめ決めた位置・タイミングで敵を生成するようにしました。敵キャラは「名前」、「x座標」、「インターバル」をキーとした.plistに記述し、そこから読み込むようにしました。.plist…

【cocos2d】Xcode5で新規cocos2dプロジェクトを一番簡単にARC対応にする方法

以前、 【cocos2d】cocos2dプロジェクトをARC対応にする - 夏までにiPhone アプリつくってみっか! でcocos2dプロジェクトのARC対応について書いたのですが、久々に新しいプロジェクトを作ってみると上手く行きませんでした。環境がXcode5に変わったのがが原…

【偽スペースハリアー】ロックオンしない通常弾はダミーターゲットを追尾

今回は敵をロックオンしない状態で発射される通常弾を実装しました。 ロックオン弾より簡単に思えますが、実はこっちの方が難しいので後回しにしていました。 「まっすぐ飛ばせばいいんじゃないの?」と思うかもしれませんが、3D座標上でまっすぐ前方に飛ば…

【偽スペースハリアー】CCActionとupdate:の併用で敵の爆発を演出

前回、 【偽スペースハリアー】超能力ホーミングミサイル発射! - 夏までにiPhone アプリつくってみっか! ではホーミングミサイルを発射して敵をやっつける機能を追加しましたが、爆発させる処理を入れていなかったのでただ消えるだけの物足りない状態でし…

【偽スペースハリアー】超能力ホーミングミサイル発射!

今までは敵キャラを避けるだけだったハリアー君ですが、今回ようやく攻撃能力を身につけました。本物のスペースハリアーと同様に、弾はロックオンした敵に向かって飛んで行きますので、敵をやっつけるのは比較的簡単です。 弾は一定間隔で自動的に発射されま…

【偽スペースハリアー】CCActionを駆使してやられシーンを演出

今回はコリジョン検出を実装し、ハリアーが地上物や空中物に当ったときにやられたりバランスを崩したりするシーンを再現してみました。本物のスペハリを改めてじっくり観察してみると結構複雑で、久々にcocos2dのCCActionをたくさん使いました。 また、せっ…

【偽スペースハリアー】迫力を出すため3Dの計算にインチキを投入

前回地上物を表示させた偽スペハリですが、本家スペハリのような迫力がありませんでした。どうやら普通に3Dの計算をするとダメなようなので少し計算にインチキを加えてやりました。 ついでに背の高い木と空中を浮遊する岩を追加しています。 岩の下の地面に…

【偽スペースハリアー】地上物を追加。だが違う。何かが違う!

偽スペースハリアープロジェクトにようやく敵キャラクター的なオブジェクトを追加します。 今回は地上のスクロールとシンクロして動く茂みを表示してみました。こんな感じです。しかし、本家のスペハリと比較するとかなりの違和感を感じます。 本物はもっと…

【偽スペースハリアー】なんと美しい!日本の空、山、森を再現。

前回チェック模様の地面の表示まで進んだ偽スペースハリアープロジェクト。 今回は地面の奥に表示される空、山、森を表示してみました。グラデーションが美しい空は地平線に合わせて上下させているだけで左右にはスクロールしていません。 奥の山と手前の森…

【偽スペースハリアー】地面のチェッカー模様を完全再現

前回はスプライトでスペースハリアー風の地面の横縞を作りました。 しかしながらスプライトに動く縞模様をつけるのは無理っぽいことに気がつきました。 そこで、逆転の発想で地面全体から横縞以外の部分を抜く事にしました。 その後ろに別の色の地面を重ね合…

【偽スペースハリアー】地面の横縞をとりあえず表示。まだ真っ白だけど。

偽スペースハリアープロジェクトを引き続き進めています。 今回は手前にスクロールする横縞を表示します。 まだ地面のチェッカー模様は実現できていませんが、縦方向へのスクロールが完成しました。横縞はスプライトで表示しますが、CCSpriteのpositionやsca…

【Sprite Kit vs cocos2d】パフォーマンス対決(最終戦) どっちを使うか決めました!

さて、前回の対戦(前編、後編)ではほぼ引き分けとなりましたSprite Kitとcocos2dのパフォーマンス対決、いよいよ今回が最終戦となります。 この対戦の勝者が私の(エセ)スペースハリアープロジェクトのゲームエンジンに採用されることになります。今回は、…

【SpriteKit】Sprite Kit vs cocos2d パフォーマンス対決 (続編) バッチノードでばっちり?

前回の、「Sprite Kit vs cocos2d パフォーマンス対決! 意外にも?」の続編になります。Sprite Kitに関しましてはAppleのオフィシャルドキュメント「Sprite Kit Programming Guide」が現状唯一の解説書になりますので、ひたすら読んでいるところです。(Get…

【SpriteKit】Sprite Kit vs cocos2d パフォーマンス対決! 意外にも?

次のプロジェクトでSprite Kitにチャレンジしようかcocos2dを引き続き使おうか迷っています。 そこで、パフォーマンス対決をやってみました。ちなみにSprite Kitのプロジェクトを作るのは簡単で、Xcode5のWelcomeスクリーンからCreate a new Xcode projectを…

【cocos2d】タイルマップに壁を作る

以前のポスト、「【cocos2d】慣性スクロールの実装。背景をヌルヌル動かす」でキャラクターをタイルマップ上で自由自在に動かすことができるようになりました。 今回は、キャラクターの行く手を阻む壁をタイルマップ上に表現してみます。例によって、この本…

【cocos2d】convertToWorldSpace, convertToWorldSpaceAR 親に聞くか自分に聞くか

cocos2dで原点が異なるオブジェクト同士、あるいはタッチ位置とオブジェクトの座標を比較するときに便利なconvertToWorldSpace系のメソッドですが、良く理解していなかったので少し調べました。convertToWorldSpaceの類似メソッドとしてconvertToWorldSpaceA…

【BeeCluster】iOS7対応?版をサブミット。実機確認はしていない。

3日ほど前にアップルから「Submit your iOS 7 apps today」というメールが来ました。自分のiPhoneをiOS7に上げてしまうとiOS6での実機テストができなくなってしまうので、とりあえずXcode5をダウンロードし、iOS7シミュレーターで動作を確認してみました。c…

【cocos2d】タッチを処理するクラスを作っていたらtouchDisptcherもどきになった

CCSpriteのオブジェクトでタッチを処理しようとしたら結局cocos2dのtouchDispatcherみたいなものを作っていたという話。 touchDispatcherの事は今日まで使った事がなく、よく理解していなかったのですが、「もしかしたら同じようなものなのでは」と思い調べ…

【BeeCluster】外人のレビューでヘコむ

アプリマーケティング研究所さんの「レビュー評価とランキングに相関関係あり?アプリのレビュー評価を引き上げる4つのポイント。」を読みました。 App Storeのレビューの重要さを改めて認識し、早速App AnnieでBeeClusterのレビューをチェック!いきなり目…

【cocos2d】慣性スクロールの実装。背景をヌルヌル動かす

タッチ操作に合わせて気持ちよく背景を慣性スクロールさせてみます。 実際にはタッチ操作で自機の座標を動かし、同時に背景の座標をを逆方向に動かす事でキャラクターを画面の中心に保ったまま背景をスクロールさせています。早速キャラクターのクラスCatク…

【cocos2d】タイルマップの隙間に四苦八苦。解決策は?

引き続きタイルマップと格闘しておりますが、今日はタイルマップのマップチップの間の隙間に悩まされました。 この醜いギャップを何とかしないことには先に進めないのです。問題その1: マップを動かさない状態で特定の位置に出現する線状の隙間前回作ったプ…

【cocos2d, Tiled】Tiled 0.9.1のサンプルデータで画面が変に。tsxファイルありのタイルマップは要注意

つぎのアプリではタイルマップを使ってみようと思い、しばらく放置していたTiledを0.8.1から最新版の0.9.1にアップグレードし、早速タイルマップを表示するプログラムを組んでみました。マップのデータを用意していないので、とりあえずTiledのexamplesフォ…

【iPhoneアプリ、cocos2d】アプリをGame Center対応にする方法(後編: プログラミング編)

cocos2dで開発したiPhoneアプリをGame Center対応にする方法の後編です。 前編はこちら。 前編でiTunes Connectでの設定を終えました。後編の今回はGame CenterのLeaderboard機能を実装するプログラミングを行います。1. Info.plistファイルの編集 プロジェ…

【cocos2d】ポーズメニューの実装方法

BeeClusterにポーズメニューを実装したときの方法をメモしておきます。cocos2dでアプリの動作を一時停止するにはCCDirectorにpauseメッセージを送ります。 [[CCDirector sharedDirector] pause]; BGMを止める場合はSimpleAudioEngineにpauseBackgroundMusic…

【cocos2d】パーティクルを表示中にパーティクルバッチノードからRemoveするとクラッシュ!どうするか?

cocos2dのCCParticleBatchNodeって、パーティクル表示中にremoveAllChildrenで子ノードを削除するとクラッシュしませんか?いろいろ調べたのですが、結局クラッシュの原因は分かりませんでした。 もしかするとcocos2dのバグかもしれません。同じ現象が報告さ…

【BeeCluster】一瞬「うっ」となるTwitterボタンのレスポンスを改善

すみません。この方法は根本的にダメでした。 iOS5.0.1の実機だと一応動作していたのですが、iOS6のシミュレーターでクラッシュしました。 __weak指定の_tweetViewControllerが解放されるのが原因でした。 __weakを外すとリテインサイクルになるかもしれない…