如何让CCMenuItemSprite选择器调用其他图层void?

时间:2013-04-05 07:55:21

标签: objective-c cocos2d-iphone kobold2d

当我在同一个.m文件中调用void时,下面的代码效果很好但是我希望我的选择器转到我的场景中的第二层,因为它的'MoveUpSelected'void(包含我对sprite运动的动作) )。我怎么能这样做?

HUDLayer.m我的图层中的按钮代码与其他图层进行通信

    self.dpad = [CCSprite spriteWithFile:@"dpad.png"];
    CCSprite *dpadSelectedSprite = [CCSprite spriteWithTexture:[dpad texture]];
    dpadSelectedSprite.color = ccGRAY;
    //float dpadHeight = flareSprite.texture.contentSize.height;
    CCMenuItemSprite *dpadButtons = [CCMenuItemSprite itemWithNormalSprite:dpad selectedSprite:dpadSelectedSprite target:Level1 selector:@selector(MoveUpSelected)];
    dpadButtons.position = CGPointMake(size.width / 2, 150);
    [menu addChild:dpadButtons];

Level1.m Void在我的第二层等待第一层按钮调用

- (void)MoveUpSelected {
    int yPosition = self.Player.position.y;
    yPosition += [self.Player texture].contentSize.height/2;

    CGSize size = [[CCDirector sharedDirector] winSize];
    if (yPosition >= (size.height - [self.Player texture].contentSize.height/2)) {
        yPosition = (size.height - [self.Player texture].contentSize.height/2);
    }

    self.Player.position = CGPointMake(self.Player.position.x, yPosition);
}

我有一个GameScene1.m将两个图层保存在不同的文件中。

    +(id) scene
{
    CCScene *scene = [CCScene node];

    HudLayer *HUD = [HudLayer node];
    [scene addChild:HUD z:2];

    Level1 *layer = [Level1 node];
    [scene addChild:layer];

    return scene;
}

请用代码行解释。

1 个答案:

答案 0 :(得分:0)

很难理解你想做什么。正如史蒂芬在评论中提到的那样,“使用虚空”和“无效行动”这些短语毫无意义。无论如何,如果你只想在btn点击上调用某个实例的方法,只需将其设置为菜单项的目标即可。在你的情况下

CCMenuItemSprite *dpadButtons = [CCMenuItemSprite itemWithNormalSprite:dpad selectedSprite:dpadSelectedSprite target:self selector:@selector(MoveUpSelected)];

使用self作为目标。将其更改为self.parent或任何其他实例和菜单项将尝试在此目标上调用选择器。

编辑:

CCMenuItemSprite *dpadButtons = [CCMenuItemSprite itemWithNormalSprite:dpad selectedSprite:dpadSelectedSprite target:levelInstance selector:@selector(MoveUpSelected)];

我编辑你试图使用类对象,而不是它的实例作为目标。所以它找不到静态方法。