0

シーンに 20 個のスプライトを追加しましたNSMutableArray。私の問題は、あるスプライトを別のスプライトにドラッグすると、もう一方も移動することです。手を加えていないスプライトの動きを制限するにはどうすればよいですか?

コードで私を助けてください (私は Cocos2d が初めてです)。

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

    collection=[[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;
        [collection addObject:hole];
        x=x+75;
    }

    self.isTouchEnabled=YES;

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


for(CCSprite *s in collection)
{
   if(CGRectContainsPoint([s boundingBox], location))
    s.position=ccp(location.x,location.y);
    return;
 }
}
4

1 に答える 1

1

出来るよ:

これを interface .h ファイルで宣言します

CCSprite *mSpriteOnHand;
CGPoint mLastPos;

init 内で nil に割り当てます。

mSpriteOnHand = nil;

触ってこんな感じでメソッドチェック開始

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *myTouch = [touches anyObject];
    CGPoint location = [myTouch locationInView:[myTouch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];


    for(CCSprite *s in collection)
    {
        if(CGRectContainsPoint([s boundingBox], location))
        {
            mLastPos = s.position;
            s.position=ccp(location.x,location.y);

            mSpriteOnHand = s;
            break;
        }
    }

}

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch=[touches anyObject];
    CGPoint location=[touch locationInView:[touch view]];
    location=[[CCDirector sharedDirector]convertToGL:location];
    location=[self convertToNodeSpace:location];

    if(mSpriteOnHand)
    {
        mSpriteOnHand.position = location;
    }
}



- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    if(mSpriteOnHand)
    {
         mSpriteOnHand.position = mLastPos;
         mSpriteOnHand = nil;
    }
}
于 2013-01-30T08:09:54.447 に答える