比較的簡単な方法です。4 つのセグメント シェイプを追加し、それらの衝突プロパティと位置を設定するだけです。Objective-Chipmunk のライブラリ ルーチンとして追加されたのは、すべてのゲームの半分が最終的に行うことの 1 つであるためです。
比較的簡単な方法です。4 つのセグメント シェイプを追加し、それらの衝突プロパティと位置を設定するだけです。Objective-Chipmunk のライブラリ ルーチンとして追加されたのは、すべてのゲームの半分が最終的に行うことの 1 つであるためです。
元のソースは次のとおりです。ボックスのすべてのコーナーの間にセグメントを追加するだけです。
static ChipmunkStaticSegmentShape *
boundSeg(ChipmunkBody *body, cpVect a, cpVect b, cpFloat radius, cpFloat elasticity,cpFloat friction, cpLayers layers, cpGroup group, cpCollisionType collisionType)
{
ChipmunkStaticSegmentShape *seg = [ChipmunkStaticSegmentShape segmentWithBody:body from:a to:b radius:radius];
seg.elasticity = elasticity;
seg.friction = friction;
seg.layers = layers;
seg.group = group;
seg.collisionType = collisionType;
return seg;
}
- (void)addBounds:(CGRect)bounds thickness:(cpFloat)radius
elasticity:(cpFloat)elasticity friction:(cpFloat)friction
layers:(cpLayers)layers group:(cpGroup)group
collisionType:(cpCollisionType)collisionType;
{
cpFloat l = bounds.origin.x - radius;
cpFloat r = bounds.origin.x + bounds.size.width + radius;
cpFloat b = bounds.origin.y - radius;
cpFloat t = bounds.origin.y + bounds.size.height + radius;
[self add:boundSeg(_staticBody, cpv(l,b), cpv(l,t), radius, elasticity, friction, layers, group, collisionType)];
[self add:boundSeg(_staticBody, cpv(l,t), cpv(r,t), radius, elasticity, friction, layers, group, collisionType)];
[self add:boundSeg(_staticBody, cpv(r,t), cpv(r,b), radius, elasticity, friction, layers, group, collisionType)];
[self add:boundSeg(_staticBody, cpv(r,b), cpv(l,b), radius, elasticity, friction, layers, group, collisionType)];
}
また、それがまったく機能しないと言うとき、それはどういう意味ですか? どこにも境界がないように見えるか、期待する場所に表示されませんか? レンダリング座標が期待どおりの場所にあると確信していますか?- (void)addBounds:(CGRect)bounds thickness:(cpFloat)radius
また、それがまったく機能しないと言うとき、それはどういう意味ですか? どこにも境界がないように見えるか、期待する場所に表示されませんか? レンダリング座標が期待どおりの場所にあると確信していますか?- (void)addBounds:(CGRect)bounds thickness:(cpFloat)radius