リンク
とp

2012年08月26日

そのよんFour、iPhoneアプリ開発中、cocos2d,バグ、エラー、事例対応検討履歴、目指せー副業収入:月5万円以上、簡単にいきそうで上手くいかないアイフォンアプリ開発ですが徐々にコツがわかってきました。2012年8月20日から8月24日

そのよんFour、iPhoneアプリ開発中、cocos2d,バグ、エラー、事例対応検討履歴、目指せー副業収入:月5万円以上、簡単にいきそうで上手くいかないアイフォンアプリ開発ですが徐々にコツがわかってきました。2012年8月20日から8月24日

今回は、スプライト画像を数枚の画像を切り替わりつつ、A点からB点の2点間移動を設定しようとしました。
そして、一時停止だるポーズPauseを入れようとしました。
そのときのバグとエラーの対応について、検討、改善、調査した履歴です。
一部、または全部改善されていないところもあります。

<現在の状況動画7>
ゲームオーバーで再度ゲームを開始するバージョン

<現在の状況動画8進行中のもの>
1面クリアで2面に移動するバージョン、進行中。

ひよこさんをタップすると得点になります。ひよこさんがワニさんに食べられるとミスです。

<バグ、エラー、事例>
1.runActionが動かない CCAnimation等を利用した場合
  A. 記載する箇所、プログラム行を確認しましょう。
2.PauseはNSTImerがとまらない
  A. NSTimerを止めるときは、invalidateを使いましょう。
NSTimer *tm
とした場合、NSTImerを止めるときは
[tm invalidate]
 でも、cocosのschedule:@selector(test:) interval:1.0fなどを活用すれば、そんなことはなかった?(未検討。)

3.ccTouchEndedが反応していない(前回のバージョンまで問題なく動作していたのに)
 A. スペルミスに気をつけましょう。コンパイルエラーが表示されなくて、実行してもエラーにならないことがあります。

4.XCODEでプロジェクト作成のindexingが延々と作業している状態を止めたい場合
  XCODEでプロジェクトを作成すると、自動でインデックスを作成します。しかし、この処理がMacBookPro(Core i7)であっても数分かかり、処理が重たい。ATOK2012日本語変換が遅いくらいです。
  しかも、どこかで失敗すると、何度も何度もインデックス作業を続けてしまいます。
 当初は100ファイル程度が、600ファイルにまで増えてしまいました。徐々に増えて増殖中。Gぶりの様です。(嫌だ怖い。おじちゃんでも嫌。)
しびれを切らして、どうやって、XCODEのindexingを止めれば良いのか調べてみると
次へ続きます。
xcodeで補完がバグった時の対処法にありました。要点のみ記載すると
オーガナイザを開き、プロジェクトタブを選択し、Derived Dataを削除するそうです。
しかし、実行してもいっこうに、インデックスが止まる気配がありません。

そこで、一旦XCODEを終了して、
再度、起動して、(1)を 試しました。
また、一旦XCODEを終了して、
再度、起動すると、インデックスの作成は止まりました。
そして、補完機能も正常です。

次回からプロジェクトの作成は、storyboadのチェックを無しにしてやってみます。



以下、詳細に記載します。

1.runActionが動かない
アクションの設定[CCAnimate action...や[sprite runAction:...]を(void)updateに設定しましたが動かず、コンパイルエラーはないのですが、実行してエラー。
そこで、
 アクションの設定[CCAnimate action...や[sprite runAction:...]を(id)initに設定したところ、動作しました。
<画像111>
画像111.png


runActionの記載設定位置が悪かったようです。
 また、CCAnimationをスプライト毎に配列に入れてましたが、やめました。理由は、正常に動作しなくて、フレームレートが再生するたびに低くなって、60、30、20、10フレームとカクカクになってしまいました。
いくつも追加されているようでした。

アクションとスプライトが対になるので、同一のアクションがスプライト毎に複数個必要とならないようです。
なお、個別にアニメーションをしたい場合は、複数個のアクションが必要となるのかもしれません。


2.PauseはNSTimerがとまらない(schedule:@selector(test:) interval:1.0fを使えばいいんではないですか?)
コーディングのはじめはNSTimerを使って、 [CCDirecter ..]pause]を使用しました。
アニメーション等の動きは止まりましたが、NSTimerは動いていました。
正確には、プログラム自体は動作しているので、タイマーを止めたければ、他の処理を入れて止めなさい、ということでしょうか。
NSTimer *tm
について
[tm invalidate]
として、止まりました。Resumeについて、正常に動き始めます。これでいいらしい。
そもそも、NSTimerをつかわずに、schedule:@selector(test:) interval:1.0f
を使えばよいらしい。
-(void)test:(ccTime)dt{count++://etc.}
そうすれば、 pauseで止まるかもしれない。(未対応です。現時点8月25日)

3.ccTouchEndedが反応していない(結論は、スペルミスです。)
上記の1,2の他、シーンを追加した後、タッチイベントが反応しません。CCAnimaも動作しました。
 replacesceneシーンを追加してシーンの切り替えも期待した動きではありませんがほぼOK。
いままで、ccTouchEndedは反応していました。ひよこさんをタッチできていました。
 ここで、整理します。
(1)症状
 ccTouchBegan,ccTouchEndedを設定しました。iPhoneアプリをシミュレータにて実行し、タッチをするもccTouchBeganは、正常に反応します。
 しかし、ccTouchEndedは、タップしても反応せず、ブレークポイントを入れてもその場所を全く通過していません。
そのため、デバッグとれーすできず。

(2)その前の動作
CCTouchBeganは、記述してあるが、return YESのみ記載。
ccTouchEndedは正常に動作していた。ひよこをタップできていた。問題なく、動作OK。

(3)直前に記載追加したコードや内容
replacescene用シーンクラスを追加、ccTouchBeganに座標判定用のIF文を追加、CCAnime等を追加。

(4)検討、推測、調査
  1.前バージョンのプロジェクトコードを利用して、ccTouchBegan,ccTouchEndedの動作を確認する
  2.CCAnime等のコードを記述して動作を確認する。
  3.シーンクラスを追加して動作を確認する。replacesceneが悪さをしている可能性有り

(5)原因
  (4)の結果をまとめます。
 <1.前バージョンで動作の確認ができた場合>
 前バージョンで動作が可能で、現バージョンで動作不良の場合、現バージョンのコード記載が間違っていることになる。
 関数メソッドの記載順、コードの記載順を再確認してみる。
 どうしても原因がわからない場合は、前バージョンを、もとに改めてプロジェクトを作成してコードの入力をしなおしてみる。
 <実施状況>
 1.前バージョンのプロジェクトコードを利用して、ccTouchBegan,ccTouchEndedの動作を確認しました。
 2.CCAnime等のコードを記述して動作を確認しました。
 前バージョンで正常に動作します。
 次に 3.については、現バージョンの追加したシーンクラスを削除します。
 これで、現バージョンが正常に動作すれば、追加したシーンクラスが原因でタッチのイベントが正常に動作しないことがわかります。
 コメントにしましたが変化ありませんでした。
 原因がわかりました。
 

ccTouchEndedの誤記

でした。これが原因で、タッチのイベント取得できていませんでした。
ccTouchEndedを

ccTouchesEnded(誤記)

にしていたミスです。
コンパイルエラーも表示されていないことからそのまま、何も気にせずに使っていました。
ふとよく見ると、Touchではなくて、Touch*es*になっていました。
きちんとccTouchEndedにして、確認できました。
 追加したシーンクラスの影響ではありませんでした。
 なんともスペルミスとは。
熱中していると、他のことが見えませんね。

 <2.前バージョンでも同様の結果の場合>
 ccTouchBeganは、タッチ反応するので、ccTouchBeganにccTouchEndedに記載された内容を移してみる。
 また、ccTouchEndedは、これまで動作していたのだから、ccTouchBeganを削除してみる。
>>前バージョンでは正常に動作しましたので、この調査は打ち切ります。


(6)対策、回避策、別案
 対策は、

ccTouchesEnded(誤記)

を正常な、「ccTouchEnded」として記載しました。

(7)結論、今後の対応
 今後の教訓:
 動かないときは、ログを出力して、一旦、前のバージョンで確認し、その後、現バージョンを確認しましょう。
 そして、コンパイルエラーが表示されなくても、スペルミス、変数、メソッド関数、クラス名の誤記がないかを確認しましょう。


 
次は、ポーズの設定、別のシーン、2面、3面への切り替えです。
pauseポーズの設定は、簡単にcocos2dに用意されている pauseを使用しました。
方法は、
画面のある領域かポーズ用のボタンをタップするとポーズとなるようにします。
ここで、問題がありました。
標準のpauseでは、画面をタップできることです。当然ながらresumeする必要があるので、タップできなければなりません。
しかし、タップできるスプライト画像が、resumeのみのスプライト画像ならよいのですが、他のスプライト画像もタップできます。当然です。

つまり、ポーズにしたとき、Resumeボタンのみを押せると思っていると、画面の制止しているスプライト画像をタップできてしまいます。
ポーズと言うことなので、画面上のどこを触っても変化しないはず。これを期待したのですが、違ったようです。

そこで、pause用のフラグ変数を別途用意しました。
この値が0ならば、スプライト画像がタップできます。
この値が1ならば、スプライト画像の処理を無視するように条件判定を入れました。
また、NSTimerについては、resumeをしても再起動しませんので、再度NSTimerを設定しました。
<画像211>

もっとかっこよくスマートな方法は、
レッスンノートのように、一部のアニメーションを動作させながら、ポーズはもう少し勉強してからにします。

他にも
playsnackgames.com - Making delicious games. このサイトが参考になりそうです。
ポーズの問題は、単にシーンが切り替わるだけではなくて、アニメーションやタップの処理をある程度限定して、止めなければなりません。
そして、再開させる必要があることです。
意外にこれが難しいですね。
単に、ループで別の処理に移動させれば良いのでしょうか。



次に、シーンの切り替わりというかゲームの2面、3面への切り替えとゲームの進行を進めます。
ある一定数のひよこを救出できたら、次の面に移動します。
できれば、2面、3面と、他のシーンに切り替わることがわかるように、バックグラウンド画像を変更するか、面数をどこかに表示させたいと思います。
<画像212>

たとえば、
A.2匹助けます。
B.成功表示シーンに代えて、「1ミッション成功です。クリアしました。」
C.次の2面シーンに変わります。
D.2匹助けます。
E.成功表示シーンに代えて、「2ミッション成功です。クリアしました。」
F.次の3面シーンに変わります。
G.また、2匹助けます。
H.成功表示シーンに代えて、「ゲームクリア。おめでとう。」、1メニュ「Regame」、2メニュ「(他)」
I.(H)のメニューで分岐
 となるようにしてみます。


<<今後の予定>>
次の作業は次のようにしてみようかと思っています。
これくらいあれば、ゲームとしての機能が一通りそろったのではないでしょうか。

8ランキング表示、
9 サウンド作成、設定
11 ボーナスアイテムの出現
12 ボーナスアイテムの取得による各種変更、

以上

画像1/35 ガンヘッドコトブキヤ [KP190 ガンヘッド]


画像【新品】プラモデル プラモデル 1/144 RG RX178 ガンダムMk-II(エゥーゴ仕様) 「機動戦士Zガンダム」RG第7弾RX-78のガンダムの正統後継機登場RX-178 ガンダムMk-IIです。新規アドヴァンストMSジョイントを採用したムーバブル・フレームの可動性の自由度の高さ
posted by goodman at 20:23| Comment(0) | アイフォンiPhoneアプリ開発 | このブログの読者になる | 更新情報をチェックする

2012年08月21日

ゲームプレー動画デッドオアアライブ5 こころミニスカ着物コスチューム、かすみコンバットコスチューム対戦

ゲームプレー動画デッドオアアライブ5 こころミニスカ着物コスチューム、かすみコンバットコスチューム対戦
Kokoro vs. Kasumi on The Ends of the Earth - Dead of Alive 5 Gameplay
こころは八極拳だったかな。
着物裾が短くて良いと思いましたが、思ったほどセクシーでもありませんね。
着物の裾を長くしてひらひら、ちらちらのほうが、まだセクシーなのかも。



着物、洋服、帯、ひも、髪などの細かい小物についての物理演算が非常に違和感なくなっています。


画像METAL BOX MB合金 MBG-02 UFOロボ グレンダイザー「グレンダイザー」が登場!各関節の可動・新規造形のオプションパーツ・発光ギミックなど、キット版をベースに合金トイ


画像【夏休み特別企画セール】トランスフォーマーDA-13 スカイハンマーディセプティコンの新キャラクター、スカイハンマーの変形フィギュア。戦闘ヘリコプターからロボットに変形。新作映画に合わせて、完全新規設計

画像BRAVE合金32 機動戦艦ナデシコ エステバリス 0G戦フレームアキト機&アマノ機 「エステバリス 0G戦フレ−ム アキト機&アマノ機」。イミディエットナイフとラピッドライフルが付属し槍型武器のフィールドランサーを追加しました。胴体のアサルトピットは分離し移動形態へ変形します。ピットはアキト機とアマノ機で換装ができます。そして陸戦&空戦とも換装が可能です。
posted by goodman at 11:26| Comment(0) | 静止画ムービー | このブログの読者になる | 更新情報をチェックする

2012年08月20日

エクセルにて、マクロを使ったセルを、他のシートにコピペ(コピーペースト)したら、#REF!がコピペされたときは、形式を選択して貼り付けで、数式を除外する

エクセルにて、マクロを使ったセルを、他のシートにコピペ(コピーペースト)したら、#REF!がコピペされたときは、形式を選択して貼り付けで、数式を除外する

マクロを設定したセルに表示された情報を、他のシートにコピペしようとしました。
すると
例 #REF! が出現、表示されました。
せっかく、マクロを使って整理したセルなのに。
この場合の対処は、

コピーした後に、ペーストするシートにて、右マウスクリックで、「形式を選択して貼り付け」を選ぶと良いでしょう。

そのときに、表示されるダイアログで、数式のチェックを外します。
数式がペースとされると、シートが異なるために、数式マクロが正常に動作できず、#REF!となります。

他のテキストチェックボックスはチェックがあって良いです。


昔、覚えていたことでも使わないと忘れっぽくなります。
ちなみに、MacのMountainLionのOpenOfficeでも有効でした。


posted by goodman at 12:04| Comment(0) | メモ テクニック | このブログの読者になる | 更新情報をチェックする

2012年08月19日

その3、 iphoneアプリ開発、 2012年8月12日から8月19日までの作業内容,アイフォンアプリ開発のエラーのときの対応記録、履歴、メモNSTimerのときの注意点、動かないとき

その3、 iphoneアプリ開発、 2012年8月12日から8月19日までの作業内容


■アイフォンアプリ開発のエラーのときの対応記録、履歴、メモ

テンプレートで作成するときにレティナ対応にしない場合
は、コメントにします。
120818-0001_retina.png

1.NSTimerのときの注意点、動かないとき
2.cocos2dココス2DのCCSpriteFrameとCCAnimationは、正しく設定しないと、描画速度の低下を招く。



・エラー、バグの経緯
iPhoneアプリをiPhone実機で確認中に色々とバグが出ました。




エラー1
一つは時間制限60秒としたときに、60秒経過すると画面が固まってしまいました。
 なにをしたいのかというと、
60秒を経過すると、別のシーン(Bシーン)に切り替わり、別のシーン(Bシーン)からゲームシーン(Aシーン)に戻ります。
そして、また、60秒を経過すると
別のシーン(Bシーン)に切り替わりというものです。つまり、A,B,A,B、、、を繰り返します。


画像




 時間制限において、判定のための閾値をある値よりも上であれば処理をするというようにしていました。


この点についてタイマーによって、加算しています。
 判定を><にて設定しています。これが原因でした。
if(a>60)
イコール=判定if(a==60+1)によって何度も読み込みが発生していたのが防げる事となって改善されたようです。
つまり、><にて設定していたので、制限時間の値を越えるとなんども同じ処理を繰り返していたのが原因でした。
 プログラムを組んだときは、シーンが切り替われば、条件判定は無視されると思いました。
 しかし、NSTImerが正しく設定されていないこともあって、何度も条件判定が実行されることとなり、期待した動きになりませんでした。



また、タイマーについてはタイマーが正常に停止,
終了してなかったようでしたのでタイマー部分についてinvalidateを入れるようにしました。
ここで、現在のバージョンではXcode 4.4はreleaseリリースを入れるとクラッシュします。


時間制限については時間制限を越えると他のシーンを読み込います。ここで、他のシーンを読むときに何度も何度も連続して呼び込むために画面の整理が行われなかったようです。この点についてはタイマーの設定が介護増すごとに同じタイマーが働きつつ動くのでタイマーのカウントについても原因がありました。

120819-0001_NSTimer_invalidate.png


つまり、5回シーンを切り替えると、5回分のタイマーが動作して、時間が5倍速(たぶん)になります。
そのため、カウントダウンを表示させていると5倍速で、時間表示がカウントダウンします。
本来の期待した動きは、1秒ごとに数字が1つ減っていきます。






エラー2


2つめは、ゲームで遊んでいるとフレーム数がゲーム中に徐々に低下しました。はじめは60フレーム、30フレーム、10フレームとなり、徐々にかくかくな動きとなりました。




次にスプライトアニメつまり、cocos2dココス2DのCCSpriteFrameとCCAnimationを使っていた部分をコメントにしました。
現在、

CCSpriteFrameとCCAnimationを使っていた部分はそのまま保留となっています。

コメントにしてあります。
120819-0002_now_comment_CCAnime.png


現在検討中です。




posted by goodman at 17:45| Comment(0) | アイフォンiPhoneアプリ開発 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。