2012-06-07 2 views
0

У меня есть NSMutableArray (названные монеты), который не следует методу randomPoint. Когда я перехожу на iOS Simulator, монеты не отображаются (как и нет изображений), и они остаются в центре экрана вместо случайно назначенной точки. Это то, что должен сделать новую монету:Объект Монеты не выполняет следующие функции

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

}

У меня есть несколько случаев следующих одну команды, потому что я не знаю, как сделать один номер появляется чаще, чем другая.

+2

Что вы имеете в виду, что это не «после» функции? Какова фактическая проблема, с которой вы сталкиваетесь? Непонятно, что вы опубликовали. – Dima

+0

Что сказал lolcat. Если вы собираетесь использовать терминологию, пожалуйста, используйте стандартную терминологию или опишите концепцию на простом английском языке. «Следующие функции», «чтобы он соответствовал», «соответствующий void», «после одной команды» - я могу догадаться, что это значит, но я не уверен. – Chuck

+0

Случайная функция и базовый расчет выглядят нормально. Что находится в 'ccp()'? – gaige

ответ

0

Все в порядке с кодом, который вы указали. Вероятно, ваши проблемы находятся в вашем классе Coin.

Вещи, чтобы проверить в вашем Coin классе:

  • ли установка velocity {0,0} непреднамеренно изменить position?
  • Какие методы CCSprite вы переопределили? Обязательно вызовите super этих методов.

Другие вещи, чтобы попробовать:

  • Можете ли вы сделать coin.1.png явно появляются в случайной точке, используя только CCSprite класс? Если нет ...
    • Убедитесь, что файл физического coin.1.png был правильно добавлен в ваш проект.
    • Проверьте родительские объекты: они отмечены как невидимые? добавляются ли они на сцену?

UPDATE: Как избежать подклассов 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]; 
+0

'speed = CGPointZero;' У меня есть это, чтобы остановить его. Я не знаю, сохранит ли это значение скорости (0,0) от изменения положения. Я верю, что это прекращает. \t '[self setPosition: ccp (self.position.x + velocity.x, self.position.y + velocity.y)];' У меня также есть это, но я не думаю, что это что-то делает. – Jimmy

+0

Я могу сделать монету, используя класс CCSprite. – Jimmy

+0

@ PaulTerrell-Perica. Тогда ваш класс «Coin», вероятно, возится. Может быть, попробуйте воспроизвести свою функциональность без подкласса 'CCSprite'? – MechEthan

Смежные вопросы