このことは私を夢中にさせています!
私は Cocos2d (0.99.5) と Box2D を試しており、レイヤーと 2 つのボディ (実際には跳ねるボール) を持つシーンを作成することに成功しました。ここで、何が起こっているかを正確に確認できるように、DebugDrawing を有効にします。DebugDrawing を無効にしてもすべてが機能することを考慮してください。
コードについて言えば、私の init メソッドには次のものがあります。
m_debugDraw = new GLESDebugDraw(PTM_RATIO);
uint32 flags;
flags = 0;
flags += 1 * b2DebugDraw::e_shapeBit;
flags += 1 * b2DebugDraw::e_jointBit;
flags += 1 * b2DebugDraw::e_aabbBit;
flags += 1 * b2DebugDraw::e_pairBit;
flags += 1 * b2DebugDraw::e_centerOfMassBit;
m_debugDraw->SetFlags(flags);
_world->SetDebugDraw(m_debugDraw);
私の描画方法は次のとおりです。
-(void)draw {
[super draw];
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
_world->DrawDebugData(); // <------ here comes the problem
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
}
問題は、プログラムが行に到達したときに
_world->DrawDebugData();
EXC_BAD_ACCESS 例外がスローされました。デバッガーは次のエラーを表示します。
void b2World::DrawDebugData()
{
if (m_debugDraw == NULL)
{
return;
}
uint32 flags = m_debugDraw->GetFlags(); // <----- this is the row pointed by Xcode
if (flags & b2DebugDraw::e_shapeBit)
{
[...]
メイン ウィンドウに表示されるエラーは、「スレッド 1: プログラムがシグナルを受信しました: 'EXC_BAD_ACCESS'」です。これは私が得る出力です:
GNU gdb 6.3.50-20050815 (Apple バージョン gdb-1515) (Sat Jan 8 00:31:48 UTC 2011) Copyright 2004 Free Software Foundation, Inc.
GDB は、GNU 一般公衆利用許諾契約書の対象となるフリー ソフトウェアであり、特定の条件の下で変更および/またはコピーの配布を歓迎します。
条件を表示するには、「showcopy」と入力します。
GDB の保証は一切ありません。詳細については、「保証を表示」と入力してください。
この GDB は、「--host=x86_64-apple-darwin --target=arm-apple-darwin」.tty /dev/ttys000 ターゲット remote-mobile /tmp/.XcodeGDBRemote-191-40 として構成されました。
リモート macosx プロトコルへの切り替え
メモリ 0x1000 0x3fffffff キャッシュ
メモリ 0x40000000 0xffffffff なし
メモリ 0x00000000 0x0fff なし
[スレッド 11779 に切り替えます]
[スレッド 11779 に切り替えます]
共有ライブラリの適用-ロード-ルールすべて
2011-03-03 22:10:36.477 MyApp[2738:707] cocos2d: cocos2d v0.99.5
2011-03-03 22:10:36.529 MyApp[2738:707] cocos2d: ディレクターの種類を使用: CCDirectorDisplayLink
2011-03-03 22:10:36.936 MyApp[2738:707] cocos2d: OS バージョン: 4.3 (0x04030000)
2011-03-03 22:10:36.943 MyApp[2738:707] cocos2d: GL_VENDOR: イマジネーション テクノロジー
2011-03-03 22:10:36.949 MyApp[2738:707] cocos2d: GL_RENDERER: PowerVR SGX 535
2011-03-03 22:10:36.956 MyApp[2738:707] cocos2d: GL_VERSION: OpenGL ES-CM 1.1 IMGSGX535-58.1
2011-03-03 22:10:36.966 MyApp[2738:707] cocos2d: GL_MAX_TEXTURE_SIZE: 2048
2011-03-03 22:10:36.973 MyApp[2738:707] cocos2d: GL_MAX_MODELVIEW_STACK_DEPTH: 16
2011-03-03 22:10:36.979 MyApp[2738:707] cocos2d: GL_MAX_SAMPLES: 4
2011-03-03 22:10:37.020 MyApp[2738:707] cocos2d: GL は PVRTC をサポートしています: はい
2011-03-03 22:10:37.026 MyApp[2738:707] cocos2d: GL は BGRA8888 テクスチャをサポートしています: はい
2011-03-03 22:10:37.033 MyApp[2738:707] cocos2d: GL は NPOT テクスチャをサポートしています: はい
2011-03-03 22:10:37.039 MyApp[2738:707] cocos2d: GL は、discard_framebuffer をサポートしています: はい
2011-03-03 22:10:37.060 MyApp[2738:707] cocos2d: NPOT サポート付きでコンパイル: いいえ
2011-03-03 22:10:37.066 MyApp[2738:707] cocos2d: TextureAtlas で VBO サポートを使用してコンパイル: はい
2011-03-03 22:10:37.072 MyApp[2738:707] cocos2d: CCNode でアフィン行列変換を使用してコンパイル: はい
2011-03-03 22:10:37.078 MyApp[2738:707] cocos2d: プロファイリング サポートでコンパイル: いいえ
2011-03-03 22:10:44.375 MyApp[2738:707] cocos2d: フレーム間隔: 1
2011-03-03 22:10:44.420 MyApp[2738:707] cocos2d: 表面サイズ: 320x480
2011-03-03 22:10:44.654 MyApp[2738:707] メモリ警告を受け取りました。レベル=1
2011-03-03 22:10:44.696 MyApp[2738:707] cocos2d: 割り当て解除
"MenuBackGround.png", "Star.png", "fps_images.png"
)>
現在の言語: auto; 現在C++
(gdb)
グーグルを試してみましたが、このエラーについて多くのことがわかりましたが、まだ解決できません。シミュレーターと iPhone の両方で発生します。別の議論の誰か (申し訳ありませんが、リンクを失いました) は、それがコンパイラまたは最適化に関連している可能性があると指摘したため、LLVM から GCC、LLVM-GCC に切り替えてさまざまなレベルで最適化を設定するさまざまな組み合わせを試しましたが、成功しませんでした。
誰かが私を正しい方向に向けることができますか? さらに情報が必要な場合はお知らせください。
みなさん、ありがとう、
ダニエレ・サラッティ