Как получить похожий звук на два или более (одинаковых) клика спрайтов? - PullRequest
1 голос
/ 21 октября 2011

Я новичок в cocos2d.В моей игре шары разного цвета появляются случайным образом снизу, и есть определенный звук, связанный с похожим (два или более) спрайтом / воздушным шаром щелчком , который не работает.Например.С изображением воздушного шара red.png ассоциируется red.wav, а с blue.png - blue.wav и так далее.Снова, когда появляется красный шар, с ним ассоциируется red.wav.Ниже приведен код, который я использую для звуковой ассоциации: -

  • (void) selectSpriteForTouch: (CGPoint) touchLocation {for (CCSprite * sprite in target) {

    if (CGRectContainsPoint([sprite boundingBox], touchLocation))
    
    {
        //NSLog(@"sprite was touched");
        NSLog(@"strGetImgName%@",strGetImgName);
        [targets removeObject:sprite];
        if ([strGetImgName isEqualToString:@"balloon1"]) {
            [[SimpleAudioEngine sharedEngine] playEffect:@"button1.wav"];
            [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
        }
        else if ([strGetImgName isEqualToString:@"balloon2"]) {
            [[SimpleAudioEngine sharedEngine] playEffect:@"button2.wav"];
            [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
        }
        else if ([strGetImgName isEqualToString:@"balloon3"]) {
            [[SimpleAudioEngine sharedEngine] playEffect:@"button3.wav"];
            [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
        }
        else if ([strGetImgName isEqualToString:@"balloon4"]) {
            [[SimpleAudioEngine sharedEngine] playEffect:@"button4.wav"];
            [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
        }
        else if ([strGetImgName isEqualToString:@"balloon5"]) {
            [[SimpleAudioEngine sharedEngine] playEffect:@"button5.wav"];
            [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
        }
        else if ([strGetImgName isEqualToString:@"balloon6"]) {
            [[SimpleAudioEngine sharedEngine] playEffect:@"button6.wav"];
            [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
        }
        else if ([strGetImgName isEqualToString:@"balloon7"]) {
            [[SimpleAudioEngine sharedEngine] playEffect:@"button7.wav"];
            [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
        }
        else if ([strGetImgName isEqualToString:@"balloon8"]) {
            [[SimpleAudioEngine sharedEngine] playEffect:@"button8.wav"];
            [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
        }
        else if ([strGetImgName isEqualToString:@"balloon9"]) {
            [[SimpleAudioEngine sharedEngine] playEffect:@"button9.wav"];
            [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
        }
        else if ([strGetImgName isEqualToString:@"balloon10"]) {
            [[SimpleAudioEngine sharedEngine] playEffect:@"button10.wav"];
            [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
        }
        else {
            NSLog(@"nothing remaining");
        }
    
        [self balloonBlastAnimation:sprite];
    
    
        [sprite.parent removeChild:sprite cleanup:YES];
    
    
        break;
    
    }
    

    }}

Ответы [ 3 ]

2 голосов
/ 21 октября 2011

Balloon должен быть классом, каждый Balloon является экземпляром класса Balloon.

Когда вы инициализируете воздушный шар, вы должны сделать:

Balloon* newBalloon1 = [[Balloon alloc] initWithFile:@"balloon-red.png" sound:@"poppedipopp.wav"];
Balloon* newBalloon2 = [[Balloon alloc] initWithFile:@"balloon-blue.png" sound:@"pluppeddi.wav"];
Balloon* newBalloon3 = [[Balloon alloc] initWithFile:@"balloon-green.png" sound:@"flupffrrrrfrrr.wav"];

Метод init делает это:

-(id) initWithFile:(NSString*)imageFile sound:(NSString*)sound
{
  if ((self = [super init]))
  {
     sprite = [CCSprite spriteWithFile:imageFile];
     soundFile = sound;
  }
}

@interface объявляет CCSprite * sprite и NSString * soundFile в качестве переменных экземпляра.

Когда всплывающее окно должно появиться, вы отправите всплывающее сообщение на всплывающее окно:

[aBalloon pop];

Метод pop реализован следующим образом:

-(void) pop
{
   // maybe play an animation

   [[SimpleAudioEngine sharedEngine] playEffect:soundFile];
}

Таким образом, воздушные шары становятся автономными объектами, которые знают, что они должны делать, и воздушный шар может быть параметризован во время инициализацииили, возможно, через свойства.

Предложение Бонге о создании воздушных шаров на основе их типа по-прежнему применимо.

2 голосов
/ 21 октября 2011

Я бы использовал enum для этого, это дешевле и может быть сделано простым переключателем.

Объявите ваше перечисление

typedef enum {
    BalloonType_1,
    BalloonType_2,
    BalloonType_3
} BalloonType;

Подкласс CCSprite - возможно, BalloonSprite, присвойте ему перечисление как свойство

@interface BalloonSprite : CCSprite {

    BalloonType typeOfBalloon;

}

@ обобщение свойства или создание собственных объявлений методов для получения и установки (я делаю это потому, что когда я устанавливаю свои типы объектов, я устанавливаю другие значения здоровья / брони внутри спрайта)

-(BalloonType) typeOfBalloon;
-(void) setTypeOfBalloon:(BalloonType) type;

При создании вашего спрайта установите тип воздушного шара.

Тогда ваш метод игры на wavs выглядит примерно так ...

switch ([sprite typeOfBalloon]) {
   case: BalloonType_1 {
        [[SimpleAudioEngine sharedEngine] playEffect:@"button1.wav"];
        [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
   }
        break;
   case: BalloonType_2 {
        [[SimpleAudioEngine sharedEngine] playEffect:@"button2.wav"];
        [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
   }
        break;
   case: BalloonType_3 {
        [[SimpleAudioEngine sharedEngine] playEffect:@"button3.wav"];
        [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
   }
        break;
}

Надеюсь, это поможет.

0 голосов
/ 24 октября 2011

У меня есть решение моей проблемы, и оно прекрасно работает:)

// Я установил тег для каждого всплывающего окна и использовал метод переключения регистра.Вот код, который я использовал.

- (void) addTarget {int enType = arc4random ()% 11;

CCSprite *target=[CCSprite spriteWithFile:[NSString stringWithFormat:@"balloon%d.png",enType]  rect:CGRectMake(0, 0, 100, 119)];
target.tag = enType;

// И метод переключателя

  • (void) selectSpriteForTouch: (CGPoint) touchLocation {

    для (CCSprite * спрайт в целях) {

    if (CGRectContainsPoint([sprite boundingBox], touchLocation))
    
    {
        switch (sprite.tag) {
            case 1:
                [[SimpleAudioEngine sharedEngine] playEffect:@"button1.wav"];
                [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                break;
              case 2:  
                [[SimpleAudioEngine sharedEngine] playEffect:@"button2.wav"];
                [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                break;
            case 3:
                [[SimpleAudioEngine sharedEngine] playEffect:@"button3.wav"];
                [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                break;
            case 4:
                [[SimpleAudioEngine sharedEngine] playEffect:@"button4.wav"];
                [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                break;
            case 5:
                [[SimpleAudioEngine sharedEngine] playEffect:@"button5.wav"];
                [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                break;
            case 6:
                [[SimpleAudioEngine sharedEngine] playEffect:@"button6.wav"];
                [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                break;
            case 7:
                [[SimpleAudioEngine sharedEngine] playEffect:@"button7.wav"];
                [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                break;
            case 8:
                [[SimpleAudioEngine sharedEngine] playEffect:@"button8.wav"];
                [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                break;
            case 9:
                [[SimpleAudioEngine sharedEngine] playEffect:@"button9.wav"];
                [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                break;
            case 10:
                [[SimpleAudioEngine sharedEngine] playEffect:@"button10.wav"];
                [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                break;
            default:
                break;
        }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...