spacemanager를 사용하여 각 단계가 끝난 후 선택 바디에서 액션을 수행해야하므로 iterateFunc에 대한 자체 C 함수를 정의하는 것이 최선의 방법이라고 생각했습니다.iterateFunc를 사용하여 objective c 메서드 호출
같은 클래스에서 obj 메소드를 호출하는 방법을 모르겠다는 것을 제외하면 모든 것이 잘 작동합니다. 즉, obj 클래스에는 iterateFunc를 대체하는 c 함수와 호출해야하는 메소드가 모두 들어 있습니다. 어떻게 C 함수에 'self'가 무엇인지 알려주지 않아서 메서드를 호출 할 수 있습니다. 내가 알 수있는 한, 새로운 iterateFunc에 추가 정보를 전달할 방법이 없습니다.
어떤 아이디어가 더 좋습니까?
업데이트 : 응답
감사합니다. 새로운 spacemanager 선언, 하나는 iterateFunc을 다시 정의 할 수 있습니다 :
smgr = [[SpaceManager alloc] init];
smgr.iterateFunc=doThisFunc;
을 같은 클래스에서, "doThisFunc"기능을 선언 할 수 있습니다. spacemanager에서
이iterateFunc
은 "단계"메서드에서 호출됩니다
-(void) step: (cpFloat) delta
{
.....
cpSpaceHashEach(_space->activeShapes, _iterateFunc, self);
....
}
그래서 내 첫번째 생각은 spacemanager을 하위 클래스, 그리고 내 사용자 지정 단계 방법에서, 내 자신의 클래스와 cpSpaceHashEach
를 호출하는 대신 자기 (spacemanager, 즉). 거기에 중간 단계로, 나는 그것을 할 필요조차하지 않았다는 것을 깨달았습니다. 내 단계 방법을 서브 클래스 화하고 정의하는 것이 내가해야 할 전부 였기 때문에. 저의 새로운 단계 방법 :
-(void) step: (cpFloat) delta
{
[super step:delta];
//Having of course set the "myObject" variable elsewhere as my other object
[myObject doThis];
}
감사합니다. 답장을 보내 주시고 장래에 더 나은 질문을하도록 도와주십시오.
감사합니다, 당신 말이 맞아, 내 원본은 코드에서 나 빠졌다. 내 Xcode에 액세스하지 않고 iPad에서 게시 한 것이므로 나중에 코드를 추가 할 필요가 없습니다. 나를 도와 주려고하는 사람들에게 도움이되지 않습니다. 미안합니다. 코드를 추가하려면 Spacemanager의 iteratorFunc를 다시 할당하는 방법은 간단한 속성 할당을 사용한다는 점만 제외하면 내가 언급 한 것을 정확히 생각하고있었습니다. smgr.iteratorFunc = doThisFunction; 아무 것도 지정하지 않아도됩니다. 물론 하위 클래스가 될 수도 있지만, 제가 누락 된 깨끗한 방법이 있는지 궁금합니다. –
더 많은 코드가 필요합니다. 내가 발견 한 유일한 우주인은 순수한 C이며, 전체적으로'무효 * '를 유지하고 있습니다. 당신이'smgr.iteratorFunc = doThisFunction'을 말할 때, 문맥은 무엇이며 어떻게 그 행동이 나중에 촉발 될까요? – bbum