1

cocs2dでスコアリングシステムを作成しようとしていますが、スコアに問題があります。これらを.mで記述しました。

if (CGRectContainsPoint(bug.boundingBox, location)) {
        [self removeChild:bug cleanup: YES];
        score += 1;
        NSLog(@"%i", score);
    }

そして私は.hでスコアを宣言しました

@interface GameScene : CCLayer {
        NSMutableArray *bugs;
        int score;

}

しかし、スプライトに触れると1スコアが得られ、スプライトは削除されますが、そこにあるスプライトに触れると、そこに触れるたびに+1スコアが得られます。

ご理解いただければ幸いです。ありがとう、、

4

3 に答える 3

0

シーングラフからバグを削除した後、バグ配列からバグを削除する必要があると思います。

于 2012-07-09T14:52:45.020 に答える
0

これはあなたのために働くはずの単純なアプローチです(もちろんより効率的かもしれませんが、私はそれを単純に保つことにしました)

いくつかのプロパティを含むBugというクラスを作成します。たとえば、バグが強制終了されるたびにtrueに設定する「killed」というBOOLなどです。バグにスプライトへの参照を持たせるか、スプライトクラスを拡張して、バグがどこにあり、触れられているかを知ることができるようにします。

さて、バグを押すときは、常にそれが殺されているかどうかを確認し、殺されている場合は、スコアを与えないでください。

スプライトではなく、すべてのバグオブジェクトをbugsarrayに追加します。bugs-objectsを介してスプライトにアクセスできます。バグが殺されたら、それらを再利用してメモリを節約します(つまり、バグを画面から離して後で再び表示し、「killed」プロパティを再びfalseに設定します)

ハッピーバグハンティング!

于 2012-07-09T14:59:42.390 に答える
0

あなたのソースコードは少ないです。ただし、インターフェイスで宣言される整数変数を使用できます。実装では、整数変数を0に設定し(initメソッドで)、新しいバグを作成するときは、整数値をもう1つ増やし、バグスプライトタグを次のように整数値に設定します。

// Interface
@interface yourScene:CCLayer {
    int bugsCount; // add new variable for counting current bugs
}

// implementation
@implementation
-(id) init {   

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

        // Your code in init

        // integer value for counting current bugs
        bugsCount = 0;

    }

    return self;
}

-(void) addNewBug {

    // your code of adding bugs
    CCSprite *bug = [CCSprite spriteWithFile:@"bug.png"];
    bugsCount++;
    bug.tag = bugsCount; // Your bug sprite tag should be equal current bugsCount value
    bug.position = ccp(x,y);
    [self addChild:bug];

}

ccTouchEndedメソッドでは、forループを実行して、次のように選択されたバグを検出します。

-(void) ccTouchesEnded:(NSSet*)touches withEvent:(id)event {

    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:[touch view]]; 
    location = [[CCDirector sharedDirector] convertToGL:location];
    location = [self convertToNodeSpace:location];

    // Detecting bug by touch
    for (i=1; i <= bugsCount; i++) {

        // get bug sprite by tag (from bugsCount idea)
        CCNode *bug = [self getChuldByTag:i];
        if (CGRectContainsPoint(bug.boundingBox, location)) {

            // add new score (now this will work)
            score += 1;
            NSLog(@"%i", score);

            // remove bug from scene
            [self removeChildByTag:1 cleanup:YES];

            // decrease number of bugs
            bugsCount--;
        }
    }

}
于 2012-07-09T19:41:25.303 に答える