1

基本的に、CCSequence に入れたいスケジューラ関数が 2 つあります。

id func1 = [CCCallFuncN actionWithTarget:self selector:@selector(pan1)];
id func2 = [CCCallFuncN actionWithTarget:self selector:@selector(pan2)];
id seq = [CCSequence actions: func1, func2, nil];
[img runAction:seq];

pan1 は左から右にパンし、pan2 は右から左にパンします。

-(void) pan1{
    [self schedule:@selector(panLtoR) interval:0.05]; 
}

-(void) pan2{
    [self schedule:@selector(panRtoL) interval:0.05];
}

私の望む結果は、func2 が始まる前に func1 が完全に完了することです。しかし今のところ... func1がまだ実行されているときにfunc2が始まります。そして、私はその理由を理解できません。どうすればこの問題を解決できますか? 前もって感謝します。

追加: panLtoR のコードは次のようになります

-(void) panLtoR{
   [self panLtoR: 1 andY:0.5];
} 

-(void) panLtoR:(float) x andY: (float) y{

   float rightAnchorX = x - m_minAnchorX;

   if(m_curAnchorX <= rightAnchorX)
   {
       m_img.anchorPoint = ccp(m_curAnchorX, y);
       m_curAnchorX += 0.005;
   }

    else{
       [self unschedule:@selector(panLtoR)];
   }
}

panRtoL も同様のことを行います。基本的に私がやろうとしていたのは、位置ではなくアンカーポイントを移動してパンを実現することです。func2 を開始する前に func1 を終了するようにするにはどうすればよいですか?

4

1 に答える 1

1

あなたが書いたものを分解しましょう:

id func1 = [CCCallFuncN actionWithTarget:self selector:@selector(pan1)];
id func2 = [CCCallFuncN actionWithTarget:self selector:@selector(pan2)];
id seq = [CCSequence actions: func1, func2, nil];
[img runAction:seq];

ここでは、これは callpan1を意味し、終了したらcall を意味しますpan2。これは基本的に次のとおりです。

[self pan1];
[self pan2];

これは、2 つのスケジューラーが (ほぼ) 同時に開始されていることを意味します。彼らが内部で実行するアクションは、互いに戦います。


限られたコードで何を達成しようとしているのか正確にはわかりませんが、次のようなものが必要だと思います。

id func1 = [CCMoveBy actionWithDuration:0.5f position:ccp(-100, 0)];
id func2 = [CCMoveBy actionWithDuration:0.5f position:ccp( 100, 0)];
id seq = [CCSequence actions: func1, func2, nil];
[img runAction:seq];
于 2012-09-16T23:05:49.760 に答える