与cocos2d评分系统有一些问题

时间:2012-07-09 14:46:33

标签: iphone xcode cocos2d-iphone

我正在尝试在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分数。

我希望你理解..谢谢,

3 个答案:

答案 0 :(得分:0)

我怀疑,你需要从场景图中删除它后从bug数组中删除bug。

答案 1 :(得分:0)

这是一个适合你的简单方法(当然可以更高效,但我决定保持简单)

创建一个名为Bug的类,其中包含一些属性,其中例如一个名为'killed'的BOOL,每当一个bug被杀死时你就设置为true。让bug有一个sprite的引用,或者扩展sprite类,这样你就可以知道它在哪里以及它是否被触及。

现在,当你按下一个bug时,一定要检查它是否被杀死,如果是,请不要为它奖励分数。

将所有错误对象添加到bugsarray,而不是精灵。您可以通过bug对象访问sprite。当您的bug被杀死时,重复使用它们以节省内存(即将它们从屏幕上移开并让它们稍后再次出现,再次将“killed”属性设置为false)

快乐的狩猎!

答案 2 :(得分:0)

您的源代码较少。但是,您可以使用将在接口中声明的整数变量。在实现中将整数变量设置为0(在init方法中),并且当你创建新bug时将整数增加到一个并将bug精灵标记设置为整数值,如下所示:

// 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--;
        }
    }

}