spacemanagerを使用して、各ステップの後に選択したボディに対してアクションを実行する必要があるため、iterateFuncに対して独自のC関数を定義することが道であると考えました。
同じクラスでobjcメソッドを呼び出す方法がわからないことを除いて、すべてがうまく機能します。つまり、obj cクラスには、iterateFuncを置き換えるc関数と、呼び出す必要のあるメソッドの両方が含まれています。メソッドを呼び出すことができるように、c関数に「自己」が何であるかを伝える方法がわかりません。私の知る限り、新しいiterateFuncに追加情報を渡す方法はありません。
何かアイデア、または物事を進めるためのより良い方法はありますか?
アップデート:
返信ありがとうございます。新しいスペースマネージャーを宣言すると、そのiterateFuncを再定義できます。
smgr = [[SpaceManager alloc] init];
smgr.iterateFunc=doThisFunc;
同じクラスで、「doThisFunc」関数を宣言できます。
spacemanagerでは、これiterateFunc
は「step」メソッドから呼び出されます。
-(void) step: (cpFloat) delta
{
.....
cpSpaceHashEach(_space->activeShapes, _iterateFunc, self);
....
}
したがって、私の最初の考えは、spacemanagerをサブクラス化することでした。カスタムステップメソッドではcpSpaceHashEach
、self(つまり、spacemanager)ではなく、自分のクラスを使用して呼び出します。途中で、自分のステップメソッドをサブクラス化して定義するだけで十分だったので、それを行う必要さえないことに気づきました。私の新しいステップ方法:
-(void) step: (cpFloat) delta
{
[super step:delta];
//Having of course set the "myObject" variable elsewhere as my other object
[myObject doThis];
}
あなたの答えと、将来もっと良い質問を作るのを手伝ってくれてありがとう。