我有一个用作数据容器的Polygon类,但出于调试目的,我想通过将它们作为子节点添加到SKNode来绘制多边形。当我这样做时,我想让Polygon对象为它自己添加边界精灵子元素。由于性能的原因,我只想在多边形作为子节点添加到另一个节点时添加这些精灵。当SKNode被添加为子时检测
有没有什么方法可以让Polygon对象本身检测到它已被添加到场景中,还是我需要通过在场景中添加一个额外的createSprites
电话来告诉它?
我想我可以轮询父母的属性,但我正在寻找事件驱动。
我有一个用作数据容器的Polygon类,但出于调试目的,我想通过将它们作为子节点添加到SKNode来绘制多边形。当我这样做时,我想让Polygon对象为它自己添加边界精灵子元素。由于性能的原因,我只想在多边形作为子节点添加到另一个节点时添加这些精灵。当SKNode被添加为子时检测
有没有什么方法可以让Polygon对象本身检测到它已被添加到场景中,还是我需要通过在场景中添加一个额外的createSprites
电话来告诉它?
我想我可以轮询父母的属性,但我正在寻找事件驱动。
在Swift中,您可以定义属性观察者,以了解您继承的类的属性。
你可以在自定义SKNode子类的parent
财产观察变化,就像这样:
class MyNode : SKNode {
override var parent: SKNode? {
didSet {
// parent node changed; do something
}
}
}
编辑:就像我在评论中提到,在Objective-C(在那里你可以不使用财产观察员),您可以改为使用键值观察(KVO),并观察SKNode
的parent
属性中的更改:
实际代码:
- (instancetype) init
{
if (self = [super init]){
// REGISTER for KVO
[self addObserver:self
forKeyPath:@"parent"
options:NSKeyValueObservingOptionNew
context:NULL];
}
return self;
}
- (void) dealloc
{
// UNREGISTER from KVO
[self removeObserver:self forKeyPath:@"parent" context:NULL];
}
// Method that is called when any keyPath you subscribed to is modified
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
// (Check keypath in case you are observing several different
// properties. Otherwise, remove if statement:)
if ([keyPath isEqualToString:@"parent"]) {
// parent node changed; do something
}
}
在Objective-C,你可以做这样的:
[node addObserver:self forKeyPath:@"parent" options:NSKeyValueChangeOldKey context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
//logic here
}
或在这种情况下,简单地继承SKNode
和覆盖setParent:
感谢。我有点含糊。我的问题涉及objective-c。我不认为我想扩展这些基类。我正在寻找内置的东西,但也许没有这样的解决方案。 –
然后,使用键值观察并在属性“父”更改值时收到通知。 –