使用空間管理器,我需要在每個步驟之後對選定的實體執行一個操作,所以我認爲爲iterateFunc定義我自己的C函數將是一條可行的路。使用iterateFunc調用目標c方法
一切都很好,除非我不確定如何在同一個類中調用obj c方法。換句話說,obj c類包含替換iterateFunc的c函數和需要調用的方法。我不知道如何告訴c函數什麼是「自我」,這樣我就可以調用這個方法。據我所知,沒有辦法將任何額外的信息傳遞給新的iterateFunc。
任何想法,或更好的方式去做事情?
更新:
感謝您的答覆。聲明一個新的spacemanager,可以重新定義其iterateFunc:
smgr = [[SpaceManager alloc] init];
smgr.iterateFunc=doThisFunc;
在同一個班級,一個「doThisFunc」功能可以宣佈。
在spacemanager,這iterateFunc
從「階梯」的方法叫:
-(void) step: (cpFloat) delta
{
.....
cpSpaceHashEach(_space->activeShapes, _iterateFunc, self);
....
}
所以,我首先想到的是子類spacemanager,在我的自定義步驟方法,調用cpSpaceHashEach
用我自己的類,而不是自我(太空管理員,就是這樣)。在那邊的一半,我意識到我甚至不需要這樣做,因爲子類化和定義我自己的步驟方法是我所需要做的。我的新步驟方法:
-(void) step: (cpFloat) delta
{
[super step:delta];
//Having of course set the "myObject" variable elsewhere as my other object
[myObject doThis];
}
非常感謝,您的答案都可以提供,並幫助我在將來制定更好的問題。
感謝您的投入,你是對的,我的原始代碼嚴重缺乏。從iPad發佈信息,無法訪問我的XCode,以後再也無法添加代碼。對那些試圖幫助我的人沒有幫助。對於那個很抱歉。然而,爲了添加一些代碼,除了事實上,在Spacemanager中重新分配iteratorFunc的方法是通過簡單的屬性賦值,我想到的正是你所提到的。 smgr.iteratorFunc = doThisFunction; 沒有指定參數或任何東西。當然,我可以繼承,但我想知道是否有更清晰的方式讓我失蹤。 – 2010-06-13 01:25:31
需要更多的代碼;我發現唯一的空間管理者是純粹的C,並且始終保持「void *」......當你說'smgr.iteratorFunc = doThisFunction'時,上下文是什麼以及後面的行爲如何觸發? – bbum 2010-06-13 03:28:51