-1

シーンに7つのスプライトがあります。すべてのスプライトがmutablearrayに追加されます。1つのスプライトにタッチして移動すると、タッチした後に他のスプライトが表示されない移動方法

これが私のコードです

if( (self=[super init])) {

sprites=[[NSMutableArray alloc]init];

CCLayer *base=[CCSprite spriteWithFile:@"Base.png"];
base.position=ccp(512,384);
[self addChild:base];

 x=0;
 for(int i=1;i<=7;i++)
 {
    CCSprite *hole=[CCSprite spriteWithFile:@"ball.png"];
    hole.position=ccp(140+x,318);
    hole.tag=i;
 [self addChild:hole];
    hole.visible=YES;
    [sprites addObject:hole];
    x=x+75;
 }

self.isTouchEnabled=YES;

}
return self;
}


My touchesmove method:



-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"count:%i",[sprites count]);
UITouch *touch=[touches anyObject];
CGPoint location=[touch locationInView:[touch view]];
location=[[CCDirector sharedDirector]convertToGL:location];
location=[self convertToNodeSpace:location];

for(CCSprite *s in sprites)
{
s.position=ccp(location.x,location.y);
}
}
4

2 に答える 2

2

ccTouchesMoved のコードは、すべてのスプライトを 1 つのタッチ位置に移動するため、スプライトは 1 つだけ表示され、残りは実際にはその下に積み重ねられます。

タッチ時にスプライトをドラッグするだけの場合は、ccTouchBegan でタッチ位置と各スプライトのバウンディング ボックスとの交差をテストする必要があります。ループしてタッチの下にあるスプライトを見つけたら、そのスプライトへの参照を保存し、ccTouchMoved で、最後に ccTouchMoved が呼び出されてから移動した量と共にそのスプライトの位置を変換します。

Ray Wenderlich のチュートリアルをご覧ください: http://www.raywenderlich.com/2343/how-to-drag-and-drop-sprites-with-cocos2d

于 2013-01-29T07:13:11.557 に答える
0

あなたのccTouchesMoved方法では、次の行ですべてのスプライトを一緒に置き換えて移動しています。(1)

for(CCSprite *s in sprites)
{
    s.position=ccp(location.x,location.y);
}

また、あなたのスプライトはすべて同じサイズなので、スプライトが 1 つなのか複数なのか区別がつかないと思います。


メソッドでは、各スプライトにタグを提供し、メソッド内のタグinitで変更する必要があります。ccTouchesMoved

その方法では、どのスプライトが触れられているかを知り、それに応じて行動する必要があります。の周りに長方形を定義してみてくださいlocationこのようなもの。

複数のスプライトがタッチされている場合は、何かをする必要があるかもしれません。最も一般的なのは、上部のスプライトに対してアクションを実行する ( z) か、スプライトによって決定することtagです。


(1)スプライトをある場所に移動するには、いくつかのCCActionを使用する必要があります。ほとんどの場合はCCMoveToで、場合によってはCCMoveByです。

于 2013-01-29T07:14:21.160 に答える