0

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

我有 4 个按钮,左上,右上,左下,右下

我给他们起名字,这样我就可以开始接触节点了,但是如果我将标签的名称更改为其他名称,它就不起作用并且同时执行两个操作而不是执行新名称的操作

这是代码示例:

在里面 :

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

触摸开始:

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"]) {
    ...
} 

但如果我点击“执行”或“左下”,它会同时启动,“后退”和“右下”也是如此

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

4

1 回答 1

0

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

例如,如果按下“DownLeft”按钮,它将同时执行 DownLeft 和 Execution 块,因为在 DownLeft 被处理后,它的名称将是“Execution”,因此以相同的触摸运行两个 if 块:

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

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

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

注意nodebuttonDownLeft都指向同一个节点。

您应该做的是在整个按钮触摸处理块中使用 if / else if :

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

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

还要阅读如何设置断点和单步执行代码,使用调试器很容易分析这些内容。

于 2014-06-07T16:52:36.410 回答