0

我已经通过更改起始生命值来测试我的代码,问题是它不会在声明生效时删除它们,我该如何解决这个问题?我已经尝试将它放在我的 .m 文件中,但它似乎在任何地方都无法正常工作,关于它的去向有什么想法吗?我会发布 .m 但它大约有 500 行,所以它有点大,所以我只是粘贴了它的相关部分。我也是 15 岁,我对 cocos2d 开发还很陌生

  - (void) addMonster {
  CCSprite * monster = [CCSprite spriteWithFile:@"startH.png"];

// Determine where to spawn the monster along the Y axis
CGSize winSize = [CCDirector sharedDirector].winSize;
int minY = monster.contentSize.height / 2;
int maxY = winSize.height - monster.contentSize.height/2;
int rangeY = maxY - minY;
int actualY = (arc4random() % rangeY) + minY;

// Create the monster slightly off-screen along the right edge,
// and along a random position along the Y axis as calculated above
monster.position = ccp(winSize.width + monster.contentSize.width/2, actualY);
[self addChild:monster];


// Determine speed of the monster}
if (Strategyscore < 10) {
    int minDuration = 5.0;
    int maxDuration = 10.0;
    int rangeDuration = maxDuration - minDuration;
    int actualDuration = (arc4random() % rangeDuration) + minDuration;
    eate the actions
    CCMoveTo * actionMove = [CCMoveTo actionWithDuration:actualDuration
                                                position:ccp(-monster.contentSize.width/2, actualY)];
    CCCallBlockN * actionMoveDone = [CCCallBlockN actionWithBlock:^(CCNode *node) {
        [node removeFromParentAndCleanup:YES];
        [_monsters removeObject:node];
        Life--;

        CCSprite *Life3 = [CCSprite spriteWithFile:@"heart.png"];
        Life3.position = ccp(210,200);
        CCSprite *Life2 = [CCSprite spriteWithFile:@"heart.png"];
        Life2.position = ccp(220,200);
        CCSprite *Life1 = [CCSprite spriteWithFile:@"heart.png"];
        Life1.position = ccp(230,200);
        [self addChild:Life3];
        [self addChild:Life2];
        [self addChild:Life1];
        if(Life == 2) {
            [self removeChild:Life3];
        }
        else if(Life == 1) {
            [self removeChild:Life2];
            [self removeChild:Life3];
        }
        else if(Life <= 0) {
            [self removeChild:Life1];
            [self removeChild:Life2];
            [self removeChild:Life3];


    // Cr [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[MainMenu scene]]];
        }
    }];
    [monster runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
    //collision stuff
    monster.tag = 1;
    [_monsters addObject:monster];
}

还有.h文件

int StrategyBullet;
int Strategyscore;
int high;
int Life;

CCLabelTTF *highlabel;
CCLabelTTF *StrategyBulletLabel;
CCLabelTTF *StrategyscoreLabel;
@interface Strategy: CCLayer
{
NSMutableArray * _monsters;
NSMutableArray * _projectiles;
int _monstersDestroyed;

}


+(CCScene *) scene;

@end
4

2 回答 2

0

你在哪里表达生命的价值?在打勾方法中?

    if(Life == 2) {
        [self removeChild:Life3];
    }
    else if(Life == 1) {
        [self removeChild:Life2];
        [self removeChild:Life3];
    }
    else if(Life <= 0) {
        [self removeChild:Life1];
        [self removeChild:Life2];
        [self removeChild:Life3];
        [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[MainMenu scene]]];
    }
于 2013-09-16T11:50:56.220 回答
0

每次添加新怪物时,都会添加一组新的精灵 Life1、Life2 和 Life3,叠加在之前的精灵之上。你可能想要拥有一套生命之心。

在.h

CCSprite *Life1,*Life2,*Life3;

in .m,初始化方法

    Life3 = [CCSprite spriteWithFile:@"heart.png"];
    Life3.position = ccp(210,200);
    Life2 = [CCSprite spriteWithFile:@"heart.png"];
    Life2.position = ccp(220,200);
    Life1 = [CCSprite spriteWithFile:@"heart.png"];
    Life1.position = ccp(230,200);

    [self addChild:Life1];
    [self addChild:Life2];
    [self addChild:Life3];

在你的 actionMoveDone 调用块中,不要删除它们,只是让它们不可见

CCCallBlockN * actionMoveDone = [CCCallBlockN actionWithBlock:^(CCNode *node) {

    [node removeFromParentAndCleanup:YES];
    [_monsters removeObject:node];
    Life--;


    if(Life == 2) {
        Life3.visible=NO;
    }
    else if(Life == 1) {
        Life3.visible=NO;
        Life2.visible=NO;
    }
    else if(Life <= 0) {
        Life3.visible=NO;
        Life2.visible=NO;
        Life1.visible=NO;
    }
}];

对于初学者。我只是让它尽可能“像你的编码风格”,但随着游戏变得越来越复杂,最终你会发现不同的模式来做到这一点。阅读正常的 iOS 代码和命名约定,它将帮助您,并使您的代码示例更容易被这里试图帮助您的人所接受。

于 2013-09-16T12:36:09.537 回答