2
ノードを移動し、移動が完了した後にブロックを呼びたいと思っています。しかし、時々、ノードが移動している間にノードを別の位置に移動する必要があります(宛先の変更)。アクションの開始後、CCMoveToの宛先を変更するにはどうすればよいですか?
コールバックが呼び出されず、一貫性のない状態になるため、以前のアクションを停止して新しいアクションを開始することはできません。
id move = [CCMoveTo actionWithDuration:time position:pos];
id call = [CCCallBlock actionWithBlock:^{
// do something like clean up
}];
CCSequence *action = [CCSequence actions:move, call, nil];
action.tag = kMovingActionTag;
[node runAction:action];
私はCCSequence *action = (id)[node getActionByTag:kMovingActionTag];
でアクションを取得するが、私が行うことができる唯一のことは、それを停止し、CCCallBlockアクションを失っているよりもすることができます。
@interface CCMoveTo (SetEndPosition)
- (void)setEndPosition:(CGPoint)position;
@end
@implementation CCMoveTo (SetEndPosition)
- (void)setEndPosition:(CGPoint)position {
CGPoint pos = [target_ position];
CGFloat dis = ccpLength(delta_);
CGFloat move = ccpDistance(endPosition_, pos);
CGFloat percent = move/dis;
endPosition_ = position;
delta_ = ccpSub(endPosition_, pos);
delta_.x /= percent;
delta_.y /= percent;
startPosition_ = ccpSub(endPosition_, delta_);
}
@end
'setEndPosition:'を呼び出すと、ノードがジャンプします。私はそれがそれより複雑だと思う。 –
@ xlc0212あなたはすでにあなたの問題を解決しましたか?あなたが既にここに答えを刻んでいれば、それはそれを意味するからです。 – Lukman
改善されたコードを私の質問に入れました。私はあなたの答えを受け入れるため、あなたは良い出発点を与えます。 –