使用具有不同名称的相同SKLabelNode

时间:2014-06-07 16:33:53

标签: sprite-kit sklabelnode

我试图在我的游戏中使用SKLabelNode作为菜单按钮

我有4个按钮向上,向上,向下,向下,向下

我给他们起名字,所以我可以抓住触摸节点,但是如果我将标签的名称更改为其他内容,那么它就不会工作并执行两个操作而不是为新名称执行操作< / p>

这是代码的一个例子:

init:

    buttonUpLeft.name = @"UpLeft";
    buttonUpRight.name = @"UpRight";
    buttonDownLeft.name = @"DownLeft";
    buttonDownRight.name = @"DownRight";

touchBegan:

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKLabelNode *node = (SKLabelNode*) [self nodeAtPoint:location];


if ([node.name isEqualToString:@"DownLeft"]) {

        ...
        buttonUpLeft.name = @"Attack";
        buttonUpRight.name = @"Cry";
        buttonDownLeft.name = @"Execution";
        buttonDownRight.name = @"Back";
        ...
}

if ([node.name isEqualToString:@"Back"]) {

    ...
    buttonUpLeft.name=@"UpLeft";
    buttonUpRight.name=@"UpRight";
    buttonDownLeft.name=@"DownLeft";
    buttonDownRight.name=@"DownRight";
    ...
}

if ([node.name isEqualToString:@"Attack"]) {
    ...
}

if ([node.name isEqualToString:@"Cry"]) {   
    ...
}

if ([node.name isEqualToString:@"Execution"]) {
    ...
}

if ([node.name isEqualToString:@"DownRight"]) {
    ...
} 

但是,如果我陈词滥调&#34;执行&#34;或&#34; downleft&#34;它同时启动,同样适用于&#34;返回&#34;和&#34;彻头彻尾&#34;

有什么想法可以避免这种情况吗?

1 个答案:

答案 0 :(得分:0)

很可能是如何构造if块的问题。

例如,如果&#34; DownLeft&#34;按下按钮它将同时执行DownLeft和Execution块,因为在DownLeft被处理后,它的名字将是&#34; Execution&#34 ;,因此如果具有相同触摸的块则运行两者:

if ([node.name isEqualToString:@"DownLeft"]) {

        ...
        buttonDownLeft.name = @"Execution";
        ...
}

if ([node.name isEqualToString:@"Execution"]) {
    ...
}

请注意,nodebuttonDownLeft指向同一节点。

你应该做的是在整个按钮触摸处理块中使用if / else(如果是这样的话):

if ([node.name isEqualToString:@"DownLeft"]) {

        ...
        buttonDownLeft.name = @"Execution";
        ...
}
else if ([node.name isEqualToString:@"Execution"]) {
    ...
}

同时阅读how to set breakpoints并逐步完成代码,使用调试器很容易分析这些内容。