【问题标题】:In Spritekit, is there a way to handle touch event on a temporarily created SKSpriteNode variable?在 Spritekit 中,有没有办法在临时创建的 SKSpriteNode 变量上处理触摸事件?
【发布时间】:2026-02-12 09:25:02
【问题描述】:

我想检测触摸并在触摸精灵时对其做出反应,但我不希望使用它自己的类来覆盖它(因此,在 touchesBegan 方法中处理)。我只是希望它被视为场景中的另一个精灵。我目前正在这样做:

UITouch * touch = [touches anyObject];

CGPoint location = [touch locationInNode:self];

SKSpriteNode *touchedNode = (SKSpriteNode *)[self nodeAtPoint:location];

if(touchedNode == self.AnswerButton) {
    NSLog(@"ANSWER button pressed.");
    return;
}

if(touchedNode == self.HangupButton) {
    NSLog(@"HANGUP button pressed.");
    [self hangUp];
    return;
}

但是,我想知道是否有更直接的方法来访问 self.HangupButon 和 self.AnswerButton 子精灵的触摸?

【问题讨论】:

    标签: objective-c events sprite-kit touch sprite


    【解决方案1】:

    您几乎已经确定了它,而无需子类化。

    逻辑是:

    1) 触摸场景
    2) 确定节点
    3) 基于节点的处理。

    我可能会做的唯一不同的事情是让它成为一个单独的函数并将 else 添加到第二个 if(如果这是 Swift 我会说使用开关)

    【讨论】:

      【解决方案2】:

      添加到精灵的点击手势识别器可能就是您要寻找的。​​p>

      https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/

      【讨论】:

      • 视图和节点是两个不同的东西,你不能直接将识别器添加到精灵中,他必须将它添加到视图中。然后将识别器委托添加到场景中,然后用他已经在使用的代码确定它在场景中的哪个位置
      最近更新 更多