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];

}

ある番号を別の番号より頻繁に表示する方法がわからないため、1つのコマンドの後に複数のケースがあります。

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 に答える