0

このcocos2dアプリでは、ccspriteを押してもnslogが起動しません。誰かが私を助けてもらえますか?

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{
NSMutableArray *targetsToDelete = [[NSMutableArray alloc] init];
for (CCSprite *target in _targets) {
    CGRect targetRect = CGRectMake(target.position.x - (target.contentSize.width/2), 
                                   target.position.y - (target.contentSize.height/2), 
                                   27, 
                                   40);


CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
if (CGRectContainsPoint(targetRect, touchLocation)) {            
    NSLog(@"Moo cheese!");
    }
}
return YES;   
}
4

2 に答える 2

3

まず、タッチ用のスプライトをonEnterメソッドに登録してください。次に例を示します。

- (void)onEnter
{
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:defaultTouchPriority_ swallowsTouches:YES];
    [super onEnter];
}

これにより、スプライトがタッチ可能になり、ユーザーがスプライトを押すと、イベントがスプライトに発生します。次に、コードをリファクタリングして読みやすくし、次のようにテストします。

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];

    NSArray *targetsToDelete = [self touchedSpritesAtLocation:touchLocation];

    // Put your code here
    // ...

    return YES;
}

- (NSArray *)touchedSpritesAtLocation:(CGPoint)location
 {
    NSMutableArray *touchedSprites = [[NSMutableArray alloc] init];

    for (CCSprite *target in _targets)
        if (CGRectContainsPoint(target.boundingBox, location))
            [touchedSprites addObject:target];

    return [touchedSprites autorelease];
}

触れられたターゲットを返す必要があります。

于 2012-07-07T21:01:20.320 に答える
0

レイヤー初期化メソッドでこれを追加します

self.isTouchEnabled = true;

このコードをタッチ検出に使用します

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

    CGRect rect = [self getSpriteRect:yourSprite];

    if (CGRectContainsPoint(rect, location))
    {
        NSLog(@"Sprite touched\n");
    }

}

スプライトを修正するには:

-(CGRect)getSpriteRect:(CCNode *)inSprite
{
    CGRect sprRect = CGRectMake(
                                inSprite.position.x - inSprite.contentSize.width*inSprite.anchorPoint.x,
                                inSprite.position.y - inSprite.contentSize.height*inSprite.anchorPoint.y,
                                inSprite.contentSize.width, 
                                inSprite.contentSize.height
                                ); 

    return sprRect;
}
于 2012-07-09T17:24:26.320 に答える