使用空间管理器,我需要在每个步骤之后对选定的实体执行一个操作,所以我认为为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