【问题标题】:SKSpriteNode subclass and touches eventsSKSpriteNode 子类和触摸事件
【发布时间】:2023-03-23 18:50:01
【问题描述】:

我不明白为什么如果我将实现 UIResponder 协议的 SKSpriteNode 子类化,那么与触摸相关的方法永远不会被调用。

例如,这是一个非常简单的类,我将其用作测试:

//INTERFACE ----------------
#import <SpriteKit/SpriteKit.h>

@interface TestClass : SKSpriteNode

@end

//IMPLEMENTATION -----------
#import "TestClass.h"

@implementation TestClass


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     NSLog(@"oook");
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{}

@end

如果我将此类的一个实例附加到场景中,触摸对象...什么也不会发生。

我是不是忘记了什么?

【问题讨论】:

    标签: ios sprite-kit


    【解决方案1】:

    我刚刚看到 SKNode 的参数 userInteractionEnabled 默认等于 NO。只需将其设置为YES 即可使代码正常工作。

    【讨论】:

    • 但是如果它被一个没有启用交互的精灵覆盖,覆盖的精灵会吞下触摸......
    • @Smick,你的意思是如果它们有 userinteractionEnabled = YES ,就可以点击“通过”覆盖精灵?
    • 我刚试过这个,覆盖精灵是否有 userInteractionEnabled 似乎并不重要,它无论如何都会阻止对下面精灵的触摸。我很想找到解决这种行为的方法,因为我希望透明的云在前景中移动。
    • 我看到你看过另一篇文章,但如果你尝试我的回答,你会看到场景可以在那个时候循环遍历所有节点,所以覆盖精灵会检测到命中!但是实际的节点 beginTouch 没有被调用。
    • @AndreyGordeev 使按钮呈现在“覆盖”精灵的顶部,这违背了拥有覆盖精灵的目的,因为它不再覆盖。我实际上写了一篇关于这个的帖子,并将我的解决方案放在 gist gist.github.com/bobmoff/7110052 上。我不知道它是否可以链接到自写的博客文章:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多