我需要執行以下操作:將精靈移動到某個位置,當精靈進入此位置時,需要執行反向操作。
對於本例中的測試,我只是在達到該位置時打印「ok」,避免過度釋放該操作並冒一些異常。無法檢測運行動作的精靈的確切位置
-(id) init
{
if((self=[super init]))
{
soldier=[CCSprite spriteWithFile: @"soldier.gif"];
soldier.position= CGPointMake(250, 250);
[self addChild: soldier];
CGPoint position=[soldier convertToNodeSpace: CGPointZero];
CCMoveTo* move=[CCMoveBy actionWithDuration: 2 position: position];
[move retain];
[soldier addObserver: self forKeyPath: @"position" options: NSKeyValueObservingOptionNew context: (void*)move];
[soldier runAction: move];
}
return self;
}
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
CGPoint position= [self convertToNodeSpace: soldier.position];
if(CGPointEqualToPoint(position, CGPointZero));
{
NSLog(@"ok");
}
}
問題是,它打印「好」很多次,它應該只打印一次,爲什麼?
編輯
我刪除多餘的 ';' :
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
CGPoint position= [self convertToNodeSpace: soldier.position]; // breakpoint here
if(CGPointEqualToPoint(position, CGPointZero))
{
NSLog(@"ok");
}
}
現在,它永遠不會打印「確定」。在我打印位置和最後一個值是(47,47)斷點,它從來沒有達到(0,0)。
那麼你會建議什麼?我需要知道行動停止。 –