Cocos2d iphone 如何将CCLabelBMFont添加到NSMutableArray

Cocos2d iphone 如何将CCLabelBMFont添加到NSMutableArray,cocos2d-iphone,nsmutablearray,Cocos2d Iphone,Nsmutablearray,我正在用cocos2D创建我的第一个游戏。我在寻求帮助时遇到了问题 我想创建一些选定的数字并随机下降 这就是我为这个节目所做的 在我的HelloWorldLayer.m -(id) init { if( (self=[super init]) ) { screenSize = [CCDirector sharedDirector].winSize; CCSprite* background = [CCSprite spriteWithFile:@"gam

我正在用cocos2D创建我的第一个游戏。我在寻求帮助时遇到了问题

我想创建一些选定的数字并随机下降

这就是我为这个节目所做的

在我的HelloWorldLayer.m

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

        screenSize = [CCDirector sharedDirector].winSize;
        CCSprite* background = [CCSprite spriteWithFile:@"game.png"];
        background.position = ccp(screenSize.width/2, screenSize.height/2);
        [self addChild:background z:0];

        operatorArray = [[NSMutableArray alloc] init];
        fallingNumberArray = [[NSMutableArray alloc] init];

        [[[CCDirector sharedDirector] scheduler] scheduleSelector:@selector(update:) forTarget:self interval:0.0 paused:NO];

        // Falling Number Font Type & Position

        fallingNumber = [CCLabelBMFont labelWithString:@"99" fntFile:@"MyHelveticaCondensed.fnt"];
        fallingNumber.anchorPoint=ccp(0.5f,0.5f);
        fallingNumber.position = ccp(160,180);
        [self addChild:fallingNumber z:3];

    }
    return self;
}
我有一个生成数字颜色的方法

-(void) colorFallingNumber{
    // FallingNumber random and color ------------- START CODE -------------
    do {
        fallNum = (arc4random() % 60) + 1;
    }
    while ( fallNum == 23 || fallNum == 29 || fallNum == 31 || fallNum == 35 || fallNum == 37 || fallNum == 41 || fallNum == 43|| fallNum == 44|| fallNum == 46|| fallNum == 47|| fallNum == 49 || fallNum == 52|| fallNum == 53 || fallNum == 55 || fallNum == 56 || fallNum == 58|| fallNum == 59);

    if (fallNum == 1 ||fallNum == 7 ||fallNum == 13 ||fallNum == 19 ||fallNum == 26 ||fallNum == 34 ||fallNum == 45 ||fallNum == 60) {
        fallingNumber.color = ccc3(217,101,75);
    }
    if (fallNum == 2 ||fallNum == 8 ||fallNum == 14 ||fallNum == 20 ||fallNum == 27 ||fallNum == 36 ||fallNum == 48) {
        fallingNumber.color = ccc3(79,166,134);
    }
    if (fallNum == 3 ||fallNum == 9 ||fallNum == 14 ||fallNum == 21 ||fallNum == 28 ||fallNum == 38 ||fallNum == 50) {
        fallingNumber.color = ccc3(217,148,15);
    }
    if (fallNum == 4 ||fallNum == 10 ||fallNum == 16 ||fallNum == 22 ||fallNum == 30 ||fallNum == 39 ||fallNum == 51) {
        fallingNumber.color = ccc3(209,75,217);
    }
    if (fallNum == 5 ||fallNum == 11 ||fallNum == 17 ||fallNum == 24 ||fallNum == 32 ||fallNum == 40 ||fallNum == 54) {
        fallingNumber.color = ccc3(75,149,217);
    }
    if (fallNum == 6 ||fallNum == 12 ||fallNum == 18 ||fallNum == 25 ||fallNum == 33 ||fallNum == 42 ||fallNum == 57) {
        fallingNumber.color = ccc3(217,75,32);
    }
}
这就是更新方法

-(void) update:(ccTime)dt{

    NSMutableArray* removeArray = [NSMutableArray array];

    [self colorFallingNumber];

    fallingNumber.string = [NSString stringWithFormat:@"%d",fallNum];

    NSString *fallingNumberName = [NSString stringWithFormat:@"%d",fallNum];    ////// I think here is the problem 

    FallingNumber *newFallingNumber  = [[NSClassFromString(fallingNumberName) alloc] init];    ////// I think here is the problem 

    [newFallingNumber animateFallingNumber];
    newFallingNumber.scale = 1;
    //newFallingNumber.rotation = atan2(newFallingNumber.direction.x,newFallingNumber.direction.y) * 180.0 / M_PI;
    [fallingNumberArray addObject:newFallingNumber];
    [self addChild:newFallingNumber z:4.0];

    for(FallingNumber* fnumber in fallingNumberArray){
        fnumber.position = ccp(fnumber.position.x + fnumber.speed *
                               fnumber.direction.x ,fnumber.position.y + fnumber.speed * fnumber.direction.y);

        if(!CGRectContainsPoint(CGRectMake(-80,-80,320+160,480+160), fnumber.position)){
            [self removeChild:fnumber cleanup:YES];
            [removeArray addObject:fnumber];
        }
    }

    // Operator animation ------------- START CODE -------------
    if(RANDOM_FLOAT() < 0.1 && [operatorArray count] < 15){

        NSString *operatorName = [NSString stringWithFormat:@"operator0%d.png", ((arc4random() % 4)+1)];
        Operator* newOperator = [Operator spriteWithFile:operatorName];
        [newOperator animateOperator];
        newOperator.scale = 1;
        newOperator.rotation = atan2(newOperator.direction.x,newOperator.direction.y) * 180.0 / M_PI;
        [operatorArray addObject:newOperator];
        [self addChild:newOperator z:2.0];
    }

    for(Operator* operator in operatorArray){
        operator.position = ccp(operator.position.x + operator.speed *
                                operator.direction.x ,operator.position.y + operator.speed * operator.direction.y);

        if(!CGRectContainsPoint(CGRectMake(-80,-80,320+160,480+160), operator.position)){
            [self removeChild:operator cleanup:YES];
            [removeArray addObject:operator];
        }
    }    // Operator animation ------------- END CODE -------------

    [operatorArray removeObjectsInArray:removeArray];
    [removeArray removeAllObjects];
}
-(无效)更新:(ccTime)dt{
NSMutableArray*removeArray=[NSMutableArray];
[自变色数字];
fallingNumber.string=[NSString stringWithFormat:@“%d”,fallNum];
NSString*fallingNumberName=[NSString stringWithFormat:@“%d”,fallNum];//我想这就是问题所在
FallingNumber*newFallingNumber=[NSClassFromString(fallingNumberName)alloc]init];//我想问题出在这里
[newFallingNumber animateFallingNumber];
newFallingNumber.scale=1;
//newFallingNumber.rotation=atan2(newFallingNumber.direction.x,newFallingNumber.direction.y)*180.0/M\u PI;
[fallingNumberArray addObject:newFallingNumber];
[self addChild:newFallingNumber z:4.0];
for(FallingNumber*fFallingNumber数组中的编号){
fnumber.position=ccp(fnumber.position.x+fnumber.speed*
fnumber.direction.x,fnumber.position.y+fnumber.speed*fnumber.direction.y);
如果(!CGRectContainsPoint(CGRectMake(-80,-80320+160480+160),则为fnumber.position)){
[self-removeChild:fnumber cleanup:YES];
[removeArray添加对象:fnumber];
}
}
//操作员动画-----------开始代码-------------
if(随机浮点数()<0.1&&[operatorArray count]<15){
NSString*operatorName=[NSString stringWithFormat:@“operator0%d.png”,((arc4random()%4)+1)];
Operator*newOperator=[Operator spriteWithFile:operatorName];
[新操作员动画操作员];
newOperator.scale=1;
newOperator.rotation=atan2(newOperator.direction.x,newOperator.direction.y)*180.0/M_-PI;
[operatorArray添加对象:newOperator];
[self addChild:newOperator z:2.0];
}
用于(操作员*操作员阵列中的操作员){
操作员位置=ccp(操作员位置x+操作员速度*
操作员方向x、操作员位置y+操作员速度*操作员方向y);
如果(!CGRectContainsPoint(CGRectMake(-80,-80320+160480+160),运算符位置)){
[自卸车儿童:操作员清理:是];
[removeArray添加对象:运算符];
}
}//操作员动画-----------结束代码-------------
[operatorArray removeObjectsInArray:removeArray];
[removeArray removeAllObjects];
}
另外,我在其他文件中创建了FallingNumber CCSprite

它包含关于方向、速度等特性的信息

好吧,问题是我不能将递减数对象添加到数组中。我发现其中一个原因是我使用了CCLabelBMFont来创建下降的数字

因为它是工作,如果我使用png文件,它在运算符中工作

正在寻求帮助。

这一行

FallingNumber *newFallingNumber  = [[NSClassFromString(fallingNumberName) alloc] init];
这让我很困惑。看起来您正试图创建FallingNumber类的实例,但通过调用
NSClassFromString(fallingNumberName)
看起来您正试图实例化一个字面上称为“16”的类或任何下降的数字

从我收集的信息来看,您似乎只是试图将(fallingNumberName)的值传递给FallingNumber类的新实例。在这种情况下,我将在FallingNumber中创建一个接受参数的自定义初始化器,如下所示:

in FallingNumber.h:

-(id) initWithString:(NSString*)name;
然后通过以下调用实例化该类:

FallingNumber *newFallingNumber = [[FallingNumber alloc] initWithString:fallingNumberName];

然后,您有一个FallingNumber类的新实例,其值为您想要的字符串。这就是你要找的吗?

太好了!它起作用了!但是随机数不能产生动画!我会设法弄清楚的!太多了!:)