我正在尝试在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分数。
我希望你理解..谢谢,
答案 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--;
}
}
}