CCSprite с файлом изображения и звуковым файлом

Я вижу, как добавить файл изображения в CCSprite, но как я могу также добавить аудиофайл?

Можно ли хранить в атрибуте карту или словарь?

К вашему сведению, я публикую это на мобильном устройстве, поэтому код сейчас не вариант, постараюсь обновить свой вопрос.

ОБНОВИТЬ:

То, что я пытаюсь сделать, это связать аудиофайл с каждым CCSprite и при касании воспроизвести аудиофайл. Каждый CCSprite будет воспроизводить разные аудиофайлы. Я пытаюсь найти самый простой способ прикрепить или связать аудиофайл с CCSprite.


person Phill Pafford    schedule 09.09.2012    source источник


Ответы (4)


Хорошо, вот подход, который я бы предпочел, в зависимости от того, воспроизводите ли вы звук «фоновой музыки» или звук «эффекта»:

Если вы воспроизводите звук MP3, например фоновую музыку:

1) Добавьте в конструктор спрайта параметр для назначения звукового файла:

[MySpriteClass spriteWithSound:@"mySound.mp3"];

2) Просто используйте:

// on touchDragged:
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:self.sound];

// on touchEnded: touchCancelled:
[[SimpleAudioEngine sharedEngine] stopBackgroundMusic];

ПРИМЕЧАНИЕ. Этот подход прост, потому что вы можете воспроизводить только одну фоновую музыку в любой момент времени.


Если вы воспроизводите несжатый звук, например эффект:

1) Добавьте в конструктор спрайта параметр для назначения звукового файла:

[MySpriteClass spriteWithSound:@"mySound.caf"];

2) Воспроизвести эффект на touchDragged:, сохранив возвращаемое значение:

// on touchDragged:
soundID = [[SimpleAudioEngine sharedEngine] playEffect:self.sound];

3) Остановить эффект на touchEnded: с помощью soundID:

// on touchEnded: cancelled:
[[SimpleAudioEngine sharedEngine] stopEffect:soundID];

ПРИМЕЧАНИЕ. Этот подход лучше, поскольку позволяет воспроизводить больше звуков одновременно.


Заключительные замечания:

Если у вас есть подклассы каждого отдельного спрайта (например, FishSprite, DogSprite, ... и т. д.), так что ВСЕ экземпляры любого заданного класса имеют одинаковый звук, было бы лучше добавить статический метод к вернуть звуковое имя для этого класса:

// somewhere in DogSprite.m
+ (NSString *)soundName {
    return @"bark.caf";
}

И для полноты добавьте суперкласс, который реализует touchDragged:, touchEnded:, чтобы у вас не было лишнего кода:

// on touchDragged:
soundID = [[SimpleAudioEngine sharedEngine] playBackgroundMusic:[[self class] soundName]];

// on touchEnded: cancelled:
[[SimpleAudioEngine sharedEngine] stopEffect:soundID];
person Mazyod    schedule 11.09.2012
comment
это то, что мне нужно, попробую +1 за пост. Спасибо! - person Phill Pafford; 11.09.2012
comment
@PhillPafford Надеюсь, это сработает :) .. Кстати, я только что понял, что вы, вероятно, будете использовать sprite.soundName, а не self.soundName, поскольку обработчик касания обычно не является самим спрайтом, но может быть и так. - person Mazyod; 11.09.2012

Добавлять

#import "SimpleAudioEngine.h"

А потом Просто

[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"XYZ.mp3"];
person Ayaz    schedule 11.09.2012
comment
Спасибо за Ваш ответ. Возможно, я не правильно спросил, что я пытаюсь сделать, это связать аудиофайл с каждым CCSprite и воспроизвести аудиофайл при касании. Каждый CCSprite будет воспроизводить разные аудиофайлы. Я пытаюсь найти самый простой способ прикрепить или связать аудиофайл с CCSprite. - person Phill Pafford; 11.09.2012
comment
установить все имена аудио в одном массиве. и установите теги для каждого спрайта. на базе тегов получите имя вашего звукового файла из массива, после чего вы сможете воспроизводить звук на спрайте. - person Ayaz; 11.09.2012

В Cocos2D вы можете добавить audio file следующим образом:

[[SimpleAudioEngine sharedEngine] playEffect:@"soundeffect.mp3"];

После добавления sprite вы можете использовать этот аудиофайл.

person Ankit Gujral    schedule 09.09.2012

Если вы можете создать его подкласс, сделайте это и добавьте свойство для аудиофайла. Насколько я могу судить, нет, вы не можете добавить какую-либо постороннюю информацию без создания подклассов. Но я не использую cocos2d, так что отнеситесь к этому с недоверием.

person Metabble    schedule 09.09.2012