これが私の問題です。シマリスの剛体 (ソーダ缶が立っている) があり、その重心をオブジェクトの底に変更して、上部に力が加えられたときに側面に落ちるようにしたいと考えています。
私は正しい軌道に乗っていますか?
1) 何らかの理由で、ボディの重心を特定の値に設定するのに苦労しています。誰でも簡単な解決策を教えてください。
2)スプライトの重心はどうですか? これも変更する必要がありますか?もしそうなら、どのように?
それを明確にしていただきありがとうございます。
ヨハン T.
これが私の問題です。シマリスの剛体 (ソーダ缶が立っている) があり、その重心をオブジェクトの底に変更して、上部に力が加えられたときに側面に落ちるようにしたいと考えています。
私は正しい軌道に乗っていますか?
1) 何らかの理由で、ボディの重心を特定の値に設定するのに苦労しています。誰でも簡単な解決策を教えてください。
2)スプライトの重心はどうですか? これも変更する必要がありますか?もしそうなら、どのように?
それを明確にしていただきありがとうございます。
ヨハン T.
どうでも !
16時間前だったので、自分の質問に答えています。自分でそれを見つける必要がありました(そうです、それを理解するのにそれほど時間がかかりました、なんて時間の無駄です)。幸いなことに、私は解決策を共有するつもりなので、理解するのに何時間も費やす必要はありません.
1) どういうわけか、ボディの重心を特定の値に設定するのに苦労しています。誰でも簡単な解決策を教えてください。
答え: 実際にシミュレートされた世界では、オブジェクトを実際にモーフィングしない限り、重心は変更できないため、ボディの重心を変更することはできません。! !
その方法は、「箱」の形をしたボディを作成しないことです。頂点を使用してオブジェクトを作成する必要があるため、動きだけでなく、あらゆる種類の物理の影響を受けることができます。
オブジェクトの周りにボックスを作成するために使用したコードは次のとおりです。
int num = 4;
cpVect verts[] = {
cpv(-15,-15),
cpv(-15, 15),
cpv( 15, 15),
cpv( 15,-15),
};
body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero));
body->p = cpv(-280, 240);
cpSpaceAddBody(space, body);
shape = cpPolyShapeNew(body, num, verts, cpvzero);
shape->e = 0.0f; shape->u = 1.5f;
shape->collision_type = 1;
cpSpaceAddShape(space, shape);
2) スプライトの重心は?これも変更する必要がありますか?もしそうなら、どのように?
この方法を使用します。
[sprite setTransformAnchor:ccp(27,54)];
ただし、座標は画面の左下隅から始まることに注意してください。しかし、体の物理を正しく扱えば、スプライトに触れる必要はありません。
頑張ってください!
ヨハン T.