我有一個用作數據容器的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。我不認爲我想擴展這些基類。我正在尋找內置的東西,但也許沒有這樣的解決方案。 –
然後,使用鍵值觀察並在屬性「父」更改值時收到通知。 –