頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


原因不明の不具合はメモリが解放されてた

不具合の原因を探すのに数時間費やしてしまったんだわ。
エラーメッセージも毎回違ったり、時には落ちないこともあって、、、こういう不安定な場合はメモリの確保ができてない(mallocでサイズ間違えてるとか)とかそういうのが多いと思ってるんだけど、そのあたりをいくら調べてもよくわからない。


ようやく気付いたのが、、、

作成中のアプリのスクショ

↑描画にMetal、物理エンジンにBulletを使ってるんだけど、通常自作クラス(例えばMyObjectとか)のオブジェクト(myObjectとかね)を作ってそれを描画にも物理演算にも使うようにしてるんよ。

ところが、

MagicaVoxelで作ったモデルの頂点の数

↑ここに書いたように地面に関しては描画用と物理演算用と別々のオブジェクトを作ったのよ。面倒だけど計算量を減らしたいから。

地面のBullet用オブジェクトを作って、、、つまり例えばMyBulletObjectクラスのmyBulletObjectってのを作って、それを物理エンジンに渡すんだけど、実際は

world->addRigidBody(myBulletObject.body);

みたいな感じで処理してる。つまりMyBulletObjectクラスのプロパティとして実際にBulletに渡すbtRigidBodyオブジェクトを持たしてる。

という構成だったので、myBulletObject.bodyをworldに追加はしてるんだけど、myBulletObjectオブジェクト自体はどこからも参照されていなかったので、このメモリが解放されてたってことみたい。

myBulletObjectを配列に入れておくとかしたら意図通り動いたわ。
うっかりして時間を無駄に使ってしまったよ〜

<< 家族でマインクラフトPE  TopPage  ヨーグルトメーカー 第三弾の結果 >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1025-f9eb6338




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad