0

我似乎无法让 CCCallFuncO 将 actionWithTarget 设置为 (JoinedMapsLayer*)self.parent

JoinedMapsLayer 是添加精灵类的父节点。

在精灵类里面我有一个方法:

-(void) playAction:(NSString*)name withMessagePart:(NSString *)messagePart {

    id displayMessageBox = [CCCallFuncO actionWithTarget:(JoinedMapsLayer*)self.parent
                                                selector:@selector(displayMessageBox:)
                                                 object:[NSString stringWithFormat:messagePart]];


    if([name isEqualToString:@"shiver"]){

        id a1 = [CCMoveTo actionWithDuration:.05 position:ccp(self.sprite.position.x+2, self.sprite.position.y)];
        id a2 = [CCMoveTo actionWithDuration:.05 position:ccp(self.sprite.position.x-4, self.sprite.position.y)];
        id a3 = [CCMoveTo actionWithDuration:.05 position:ccp(self.sprite.position.x+4, self.sprite.position.y)];
        id a4 = [CCMoveTo actionWithDuration:.05 position:ccp(self.sprite.position.x-2, self.sprite.position.y)];
        [self.sprite runAction:[CCSequence actions:a1,a2,a3,a2,a3,a2,a3,a2,a3,a2,a3,a2,a3,a2,a3,a2,a3,a2,a3,a2,a3,a2,a3,a4,displayMessageBox, nil]];

    }

    else if([name isEqualToString:@"spin"]){

        id a1 = [CCRotateBy actionWithDuration:.5 angle:360];
        [self.sprite runAction:[CCSequence actions:a1,displayMessageBox, nil]];

    }
}

它在精灵上运行的动作很好,但我试图让它调用父节点中的方法。我有一个 NSLog 在那里检查,没有任何反应。有什么明显的原因吗?

在我的父节点的初始化中,该类被添加到一个可变数组中

HummingClass *hummingChar = [[HummingClass alloc] init];

            [characterArr addObject:hummingChar]

我稍后会访问该课程,例如:

HummingClass *hummingChar = [characterArr objectAtIndex:interactionIndex];

有趣的是它不会与 self.parent 崩溃,所以我想我没有正确指向父节点。在我有的对象标题中

#import "JoinedMapsLayer.h"
@class JoinedMapsLayer

编辑:即使我像这样进行常规方法调用,它也不起作用:

[(JoinedMapsLayer*)self.parent displayMessageBox:@"whatever"];
4

1 回答 1

0

我在一些糟糕的论坛的帮助下弄清楚了。如果将精灵添加到数组中,则必须手动分配父属性。

在 JoinedMapsLayer 的 init 中,我创建了一个指向数组索引的临时指针:

tempHummingChar.parent = 自我;

于 2012-04-17T17:20:33.983 回答