我试图在我的游戏中使用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;
有什么想法可以避免这种情况吗?
答案 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"]) {
...
}
请注意,node
和buttonDownLeft
指向同一节点。
你应该做的是在整个按钮触摸处理块中使用if / else(如果是这样的话):
if ([node.name isEqualToString:@"DownLeft"]) {
...
buttonDownLeft.name = @"Execution";
...
}
else if ([node.name isEqualToString:@"Execution"]) {
...
}
同时阅读how to set breakpoints并逐步完成代码,使用调试器很容易分析这些内容。