2012-01-11 13 views
2

ココス2dゲーム開発では、CGRectContainsPointメソッドは、CCSpriteでタッチするかどうかを検出するためによく使用されます。私はに便利な方法があるかどうかを知りたい、私は便利な方法でスプライトrectを取得するには?

 
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event { 
    CCLOG(@"ccTouchEnded"); 
    CGPoint location = [touch locationInView:[touch view]]; 
    location = [[CCDirector sharedDirector] convertToGL:location]; 
    CCLOG(@"location.x:%f, y:%f", location.x, location.y); 
    CGRect rect; 

    rect = CGRectMake(self.firstCard.face.position.x-(self.firstCard.face.contentSize.width/2), self.firstCard.face.position.y-(self.firstCard.face.contentSize.height/2), 
         self.firstCard.face.contentSize.width, self.firstCard.face.contentSize.height); 
    if (CGRectContainsPoint(rect, location)) { 
     CCLOG(@"first card touched"); 
     [firstCard open]; 
    } 

    rect = CGRectMake(self.secondCard.face.position.x-(self.secondCard.face.contentSize.width/2), self.secondCard.face.position.y-(self.secondCard.face.contentSize.height/2), 
         self.secondCard.face.contentSize.width, self.secondCard.face.contentSize.height); 
    if (CGRectContainsPoint(rect, location)) { 
     CCLOG(@"second card touched"); 
     [secondCard open]; 
    } 


} 

をスプライトの(CCNode中)RECTプロパティを取得するには、コードfllowを使用

はCCSpriteのRECT簡単なを取得しますか?

+2

。方法。私はそれがあなたのために働くと思う。 Rect全体を返します。 – Marine

答えて

2

boundingBoxを使用してください。使用するのに最適なオプションだと思います。

このよう

:あなたは[sprite_nmにBoundingBox]でスプライトの矩形を取得することができます

- (void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    locationTouchBegan = [touch locationInView: [touch view]]; 

    //location is The Point Where The User Touched 

    locationTouchBegan = [[CCDirector sharedDirector] convertToGL:locationTouchBegan]; 

    //Detect the Touch On sprite 

    if(CGRectContainsPoint([sprite boundingBox], locationTouchBegan)) 
    { 
     isSpriteTouched=YES; 
    } 

} 
2

Kobold2Dは、プロジェクト内で複製することができますCCNode拡張子(Objective-Cのカテゴリ)などの便利なメソッドをcontainsPointあります

-(BOOL) containsPoint:(CGPoint)point 
{ 
    CGRect bbox = CGRectMake(0, 0, contentSize_.width, contentSize_.height); 
    CGPoint locationInNodeSpace = [self convertToNodeSpace:point]; 
    return CGRectContainsPoint(bbox, locationInNodeSpace); 
} 

あなたのコードは、このように単純化し、それが/回転とで動作します(boundingBoxメソッドは、回転したスプライトとスケーリングしたスプライトを正しくテストできません)。

if ([firstCard.face containsPoint:location]) { 
     CCLOG(@"first card touched"); 
} 
関連する問題