11

Chipmunk Physics のcpShapeオブジェクトを、オブジェクトと次のコード行をNSMutableDictionary介して格納しています。NSValue

NSValue *shapeValue = [[NSValue alloc] initWithBytes: shape objCType: @encode(cpShape)];
[staticBodiesInUse setObject: shapeValue forKey: name];

cpShape別の形状と比較するために、背面を取り出す必要があります。どうやってやるの?getValue:メソッドが表示されますが、バッファが必要です。どうすればよいかわかりNSValueません。

4

2 に答える 2

15

したがって、trojanfoe による回答は部分的にしか正しくありません。

それを行うには大きな問題があります。そのように作成すると、構造体NSValueをコピーし、cpShapeそれを元に戻すと、再度コピーします。cpShape構造体はほとんど参照によって排他的に使用されます。コピーするたびに、新しいコピーへの新しい参照が取得され、それらのコピーの一部がスタックに存在し、黙って自動的に破棄されます。ものすごく悪い。

代わりに、using を作成し、そのポインターをNSValueusingで取得します。このように、NSValue は元の へのポインタのみを格納しています。[NSValue valueWithPointer:shape][value pointerValue]cpShape

于 2013-02-05T01:29:55.217 に答える
8

それは単にではありません:

NSValue *value = [staticBodiesInUse objectForKey:name];
cpShape shape;
[value getValue:&shape];
于 2013-02-04T11:42:13.217 に答える