0

我有一个不遵循 randomPoint 方法的 NSMutableArray(命名为硬币)。当我进入 iOS 模拟器时,硬币没有出现(因为没有图像),它们停留在屏幕的中心,而不是随机分配的点。这就是制作新硬币的方法:

if ([coins count] == 0){

    CGSize windowSize = [CCDirector sharedDirector].winSize;
    CGPoint randomPointOnScreen = ccp((float)(arc4random() % 100) / 100 * windowSize.width, (float)(arc4random() % 100) / 100 * windowSize.height);

   randomCoinType = arc4random() % kNumberOfCoinTypes + 1; // I have this because my files are named like "coin.1.png" and such

kNumberOfCoinTypes 被定义为 10 给我一个数字 1-10。这是应该制造硬币的相应空隙:

-(void)createCoinsAt:(CGPoint)position withCointype:(int)type{

NSString *imageFile;

switch (type) {


    case 1:

        imageFile = @"coin.1.png";
        break;

    case 2:
        imageFile = @"coin.2.png";
        break;

    case 9:
    case 3:
        imageFile = @"coin.3.png";
        break;

    case 7:
    case 8:
    default:
    case 4:
        imageFile = @"coin.4.png";
        break;

    case 5:
        imageFile = @"coin.5.png";
        break;

    case 6:
        imageFile = @"coin.6.png";
        break;

      }

Coins *c = [Coins spriteWithFile:imageFile];
//Coins *c = [Coins spriteWithFile:[NSString stringWithFormat:@"coin.%d.png", arc4random() % 5 + 1 ]];

c.type = type;
c.position = position;
c.velocity = ccp(0,0);
[coins addObject:c];
[self addChild:c z:2];

}

我在一个命令之后有多个案例,因为我不知道如何使一个数字比另一个数字出现得更频繁。

4

1 回答 1

0

您显示的代码一切正常。你的问题可能在你的Coin课堂上。

在课堂上检查的事项Coin

  • 设置velocity为 {0,0} 是否会无意中更改position
  • CCSprite你重写了哪些方法?确保调用super这些方法。

其他要尝试的事情:

  • 您可以仅使用该类coin.1.png在随机点显眼地出现吗?CCSprite如果不...
    • 确保将物理coin.1.png文件正确添加到您的项目中。
    • 检查父对象:它们是否被标记为不可见?他们被添加到场景中了吗?

更新:避免子类化 CCSprite

@interface Coin : NSObject 

@property (nonatomic, retain) CCSprite *sprite;
@property (nonatomic, assign) CGPoint velocity; 
@property (nonatomic, assign) int type;
@end

--

-(void)createCoinAt:(CGPoint)position withCointype:(int)type{

    NSString *imageFile;
    ...
    //imageFile switch statement here
    ...
    Coin *c = [[Coin alloc] init];

    c.sprite = [CCSprite spriteWithFile:imageFile];
    c.sprite.position = position;
    c.type = type;
    c.velocity = ccp(0,0);
    [coins addObject:c];
    [parentNode addChild:c.sprite z:2]; //make sure to add to correct parent CCNode
}

-- 一旦给硬币一个速度:

//duration assumes velocity is pixels-per-second
CCAction *moveSprite = [CCRepeatForever actionWithAction:[CCMoveBy actionWithDuration:1.0 position:c.velocity]];
[c.sprite runAction:moveSprite]; 

一旦硬币消失/死亡/无论如何:

[c.sprite stopAllActions];
[c.sprite removeFromParentAndCleanup:YES];
c.sprite = nil;
[coins removeObject:c];
于 2012-06-08T16:21:45.560 回答