Ios SpriteKit Objective-C:SKSpriteNode类实例上的touchesbearth()

Ios SpriteKit Objective-C:SKSpriteNode类实例上的touchesbearth(),ios,objective-c,sprite-kit,skspritenode,touchesbegan,Ios,Objective C,Sprite Kit,Skspritenode,Touchesbegan,我有一个对我的类的引用,叫做TBButton。TBButton是SKSpriteNode的子类,它有一个包含多种类型的枚举(一种是“蓝色”)。我如何创建一个touchesbearth()函数,当触碰TBButton类的任何实例时调用该函数?我曾尝试在TBButton类内部使用NSLog()实现一个非常简单的touchesBegind(),但没有成功。我还尝试查找GameSecene.m中的触摸按钮是否是TBButton的实例,代码如下: - (void)touchesBegan:(NSSet *

我有一个对我的类的引用,叫做TBButton。TBButton是SKSpriteNode的子类,它有一个包含多种类型的枚举(一种是“蓝色”)。我如何创建一个touchesbearth()函数,当触碰TBButton类的任何实例时调用该函数?我曾尝试在TBButton类内部使用NSLog()实现一个非常简单的touchesBegind(),但没有成功。我还尝试查找GameSecene.m中的触摸按钮是否是TBButton的实例,代码如下:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInNode:self];
        TBButton *touchedNode = (TBButton *)[self nodeAtPoint:location];

        if (touchedNode && [touchedNode.name isEqualToString:@"button"]) {

            if (touchedNode.type == Blue) {

                // Touched a blue button.
                NSLog(@"Touched a blue button");
                /// Find out how to do this code! It ain't workin!

            }

        }

    }
}
这是我在GameSecene.m中尝试的代码,但当我触摸其中一个按钮时,它不会将任何内容记录到控制台。是的,我已经确定TBButton实例的名称是@“button”,所以这不是问题所在

为了让事情对我来说更简单,请忽略游戏场景中的任何代码。我真正想知道的是,我是否可以在TBButton.m本身中实现touchesBegind()函数!或者我不能?将实例方法放在TBButton.h中,设置它在TBButton.m中触摸按钮时执行代码,并在GameSecene.m中的实例工作时调用它


希望你能理解我的问题

我想你的主要问题是身份问题。SKSpriteNode作为SKNode的一个子类,您有两个简单的选项:

创建TBButton实例时,请将name属性设置为类似“TBButton”的值。然后,您可以在touchesbeent方法中检查节点的名称

if([touchedNode.name isEqualToString:@"TBButton"]) {
    //....
}
如果您需要的不仅仅是一个简单的字符串,那么可以使用SKNode的userData属性。同样,在创建TBButton的实例时:

self.userData = [NSMutableDictionary new];
[self.userData setObject:@"GreenButton" forKey:@"ButtonColor"];
签入touchStarted看起来像这样:

if([[touchedNode.userData objectForKey:@"ButtonColor"]isEqualToString:@"GreenButton"]) {
    //...
}

哦,我自己想出来的,大家!但是谢谢你的帮助。问题是,在我的TBButton类中,我忘记将类的ButtonType设置为属性

下面是我添加到TBButton.m的代码行:

    if (self) {
        self.type = type;
    }

所以,我希望这次“对话”不会贬低我,或者别的什么。不过,我还是很感激你的回答。谢谢

我知道你要去哪里,桑戈妮,但那也不行。没有抛出错误或任何东西,但什么也没有发生。当TBButton.m中出现绿色时,我通过设置NSMutableArray的对象来实现您的代码。我有一个带有几个case的'enum',在case Green中,我将该行添加到'setObject'。我试着在游戏场景中使用你的if语句。很遗憾,它不起作用。您是否已将
userInteractionEnabled
设置为YES?它是“指示节点是否接收触摸事件的布尔值”。是的,我有。尽管这是默认值,但对SKSpriteNode来说,是的(我刚刚看到你在使用它)。不过,对于SKNode来说,情况并非如此!