0

画面上をランダムに動く敵の動きを作成しましたが、Y軸の動きから出てくることがありますが、Y軸の動きでスプライトが出ないようにするにはどうすればよいですか???? ??

これは、スプライトをランダムに移動するコードです。

 
[敵runAction:[CCSequenceアクション:[CCMoveByactionWithDuration:2.0位置:ccp(-winSize.width * 0.4、0)]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(winSize.width * 0.2、-winSize.width * 0.2)、
                                                                       randomValueBetween(winSize.height * 0.2、-winSize.height * 0.2))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(winSize.width * 0.2、-winSize.width * 0.2)、
                                                                       randomValueBetween(winSize.height * 0.2、-winSize.height * 0.2))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(winSize.width * 0.2、-winSize.width * 0.2)、
                                                                       randomValueBetween(winSize.height * 0.2、-winSize.height * 0.2))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(winSize.width * 0.2、-winSize.width * 0.2)、
                                                                       randomValueBetween(winSize.height * 0.2、-winSize.height * 0.2))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(winSize.width * 0.2、-winSize.width * 0.2)、
                                                                       randomValueBetween(winSize.height * 0.2、-winSize.height * 0.2))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(-winSize.width * 0.3、winSize.width * 0.3)、
                                                               randomValueBetween(winSize.height * 0.3、-winSize.height * 0.3))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(-winSize.width * 0.2、winSize.width * 0.2)、
                                                               randomValueBetween(winSize.height * 0.2、-winSize.height * 0.2))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(-winSize.width * 0.3、winSize.width * 0.3)、
                                                               randomValueBetween(winSize.height * 0.3、-winSize.height * 0.3))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(-winSize.width * 0.2、winSize.width * 0.2)、
                                                               randomValueBetween(winSize.height * 0.2、-winSize.height * 0.2))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(-winSize.width * 0.3、winSize.width * 0.3)、
                                                               randomValueBetween(winSize.height * 0.3、-winSize.height * 0.3))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:randomValueBetween(1.0、0.3)
                                                  position:ccp(randomValueBetween(-winSize.width * 0.2、winSize.width * 0.2)、
                                                               randomValueBetween(winSize.height * 0.2、-winSize.height * 0.2))]、
                              [CCDelayTime actionWithDuration:0.5]、
                              [CCMoveBy actionWithDuration:2.0 position:ccp(-winSize.width * 1.5、0)]、
                              [CCCallFuncN actionWithTarget:selfセレクター:@selector(invisNode :)]、nil]];
4

1 に答える 1

1

CCMoveByとランダムな距離を使用すると、スプライトが画面から消えるのを防ぐことはできません。スプライトが任意の軸に沿って長距離を移動するように、ランダム化されたオフセットが合計される可能性は常にあります。

複数のランダムなCCMoveByアクションをスタックしても、スプライトが最終的にどこに到達するか、または途中でどこに移動するかを制御することはできません。

シーケンスを個々の「待機と移動」シーケンスに分割する必要があります。このようにして、ランダムオフセットを生成し、CCMoveByを作成する前に、それらをスプライト位置に追加して、結果の位置が画面外になるかどうかをテストできます。その場合、値を画面内の場所に制限します。

PS:

[CCCallFuncN actionWithTarget:self selector:@selector(invisNode:)]

それがスプライトを非表示に設定するだけの場合は、単にCCHideアクションに置き換えることができます。

于 2012-09-15T08:14:30.430 に答える