0

Cocos2d を使用して iOS でゲームを作成しています。

これは、キューブが触れられているかどうかを確認するために私が使用している方法です。

- (void)selectSpriteForTouch:(CGPoint)touchLocation {
    CubeSprite * newSprite = nil;
    for (CubeSprite *sprite in movableSprites) {
        NSLog(@"tested against sprite %i", sprite.boundingBox.origin.x);
        if (CGRectContainsPoint(sprite.boundingBox, touchLocation)) {      
            singleCube = true;
            newSprite = sprite;
            activeTag = sprite.tag;
            break;
        }
    }    
    if (newSprite != selSprite) {

        selSprite = newSprite;
    }
}

しかし、何らかの理由で sprite.boundingBox が正しく設定されていません。

「スプライトに対してテスト済み」ログは「スプライト 0 に対してテスト」を出力するだけですが、画面にスプライトが表示されているため、これは不可能のようです。

立方体をシーンに追加するために使用する方法は次のとおりです。

-(void)addCube:(CubeSprite *)cube {
    int totalCubes = [cubes count];
    [cube setPosition:ccp(700 - (totalCubes * 50), 120)];
    [cubes addObject:cube];
    [movableSprites addObject:cube];
    [self addChild:cube];
}

何が間違っている可能性がありますか?

前もって感謝します。

編集、これが私のキューブ初期化メソッドです

-(id)initWithNumber:(int)number {
    if( (self=[super init])) {
        [self setTag:number];
        CCSprite* sprite = [CCSprite spriteWithFile:string];
        [self addChild:sprite];
        NSLog(@"Cube created with value of %i and with file %@", number, string);
    }
    return self;
}
4

3 に答える 3

0

これを使ってみてください

 for (CubeSprite *sprite in movableSprites) {
CGRect projectileRect = [sprite boundingBox];

if (CGRectContainsPoint(projectileRect, touchLocation)) {      
            singleCube = true;
            newSprite = sprite;
            activeTag = sprite.tag;
            break;
        }
    }    
于 2012-08-30T07:05:16.543 に答える
0

Xcode は不正なフォーマット文字列に関する警告を表示しませんでしたか?

NSLog(@"tested against sprite %i", sprite.boundingBox.origin.x);

%i整数値を意味します。CGPointの座標は浮動小数点値です。%f代わりに使用してください。

于 2012-08-30T10:39:29.550 に答える
0

CGRectContainsPoint が偽陽性を返す可能性があります。「break ;」を無効にすると、ステートメントでは、すべてのキューブを反復処理する必要があります。

間違っている可能性があるもの: - キューブのバウンディング ボックスが大きすぎて、位置が思った場所にない - すべてのキューブの位置が同じ - touchLocation が (0,0)

于 2012-08-30T07:10:51.807 に答える