こんにちはStackOverflowの達人。これが私の最初の質問なので、すぐに参加できることに興奮しています。
私はiOSアレイをもう少しよく理解しようとしていますが、壁にぶつかりました。FMODを使ったサウンドアプリを作っています。私はすべてが完璧に機能していますが、9つのボタンがあり、それぞれが押すと異なる.wavファイルを再生し、リリースするとそのサウンドを停止することを除いて、ほぼ同じことを実行します。それを配列に入れて、コードを単純化して短縮したいと思います。そこで迷子になります。私はコードを取り除いて、現在何が起こっているかを示しました。何か案は?
.h
@interface {
FMOD::Sound *sound1;
FMOD::Sound *sound2;
FMOD::Sound *sound3;
FMOD::Sound *sound4;
FMOD::Sound *sound5;
FMOD::Sound *sound6;
FMOD::Sound *sound7;
FMOD::Sound *sound8;
FMOD::Sound *sound9;
}
- (IBAction)playSound1:(id)sender;
- (IBAction)stopSound1:(id)sender;
- (IBAction)playSound2:(id)sender;
- (IBAction)stopSound2:(id)sender;
- (IBAction)playSound3:(id)sender;
- (IBAction)stopSound3:(id)sender;
- (IBAction)playSound4:(id)sender;
- (IBAction)stopSound4:(id)sender;
- (IBAction)playSound5:(id)sender;
- (IBAction)stopSound5:(id)sender;
- (IBAction)playSound6:(id)sender;
- (IBAction)stopSound6:(id)sender;
- (IBAction)playSound7:(id)sender;
- (IBAction)stopSound7:(id)sender;
- (IBAction)playSound8:(id)sender;
- (IBAction)stopSound8:(id)sender;
- (IBAction)playSound9:(id)sender;
- (IBAction)stopSound9:(id)sender;
m。
- (void)viewWillAppear:(BOOL)animated {
[[NSString stringWithFormat:@"%@/sound1.wav", [[NSBundle mainBundle] resourcePath]] getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_LOOP_NORMAL, NULL, &sound1);
ERRCHECK(result);
[[NSString stringWithFormat:@"%@/sound2.wav", [[NSBundle mainBundle] resourcePath]] getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_LOOP_NORMAL, NULL, &sound2);
ERRCHECK(result);
[[NSString stringWithFormat:@"%@/sound3.wav", [[NSBundle mainBundle] resourcePath]] getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_LOOP_NORMAL, NULL, &sound3);
ERRCHECK(result);
[[NSString stringWithFormat:@"%@/sound4.wav", [[NSBundle mainBundle] resourcePath]] getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = system->createSound(buffer, FMOD_SOFTWARE, NULL, &sound4);
ERRCHECK(result);
result = sound4->setMode(FMOD_LOOP_NORMAL);
ERRCHECK(result);
[[NSString stringWithFormat:@"%@/sound5.wav", [[NSBundle mainBundle] resourcePath]] getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_LOOP_NORMAL, NULL, &sound5);
ERRCHECK(result);
[[NSString stringWithFormat:@"%@/sound6.wav", [[NSBundle mainBundle] resourcePath]] getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_LOOP_NORMAL, NULL, &sound6);
ERRCHECK(result);
[[NSString stringWithFormat:@"%@/sound7.wav", [[NSBundle mainBundle] resourcePath]] getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_LOOP_NORMAL, NULL, &sound7);
ERRCHECK(result);
[[NSString stringWithFormat:@"%@/sound8.wav", [[NSBundle mainBundle] resourcePath]] getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_LOOP_NORMAL, NULL, &sound8);
ERRCHECK(result);
[[NSString stringWithFormat:@"%@/sound9.wav", [[NSBundle mainBundle] resourcePath]] getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_LOOP_NORMAL, NULL, &sound9);
ERRCHECK(result);
}
- (IBAction)playSound1:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = system->playSound(FMOD_CHANNEL_FREE, sound1, false, &wob01);
ERRCHECK(result);
}
- (IBAction)stopSound1:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = wob01->stop();
ERRCHECK(result);
}
- (IBAction)playSound2:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = system->playSound(FMOD_CHANNEL_FREE, sound2, false, &wob02);
ERRCHECK(result);
}
- (IBAction)stopSound2:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = wob02->stop();
ERRCHECK(result);
}
- (IBAction)playSound3:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = system->playSound(FMOD_CHANNEL_FREE, sound3, false, &wob03);
ERRCHECK(result);
}
- (IBAction)stopSound3:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = wob03->stop();
ERRCHECK(result);
}
- (IBAction)playSound4:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = system->playSound(FMOD_CHANNEL_FREE, sound4, false, &wob04);
ERRCHECK(result);
}
- (IBAction)stopSound4:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = wob04->stop();
ERRCHECK(result);
}
- (IBAction)playSound5:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = system->playSound(FMOD_CHANNEL_FREE, sound5, false, &wob05);
ERRCHECK(result);
}
- (IBAction)stopSound5:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = wob05->stop();
ERRCHECK(result);
}
- (IBAction)playSound6:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = system->playSound(FMOD_CHANNEL_FREE, sound6, false, &wob06);
ERRCHECK(result);
}
- (IBAction)stopSound6:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = wob06->stop();
ERRCHECK(result);
}
- (IBAction)playSound7:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = system->playSound(FMOD_CHANNEL_FREE, sound7, false, &wob07);
ERRCHECK(result);
}
- (IBAction)stopSound7:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = wob07->stop();
ERRCHECK(result);
}
- (IBAction)playSound8:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = system->playSound(FMOD_CHANNEL_FREE, sound8, false, &wob08);
ERRCHECK(result);
}
- (IBAction)stopSound8:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = wob08->stop();
ERRCHECK(result);
}
- (IBAction)playSound9:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = system->playSound(FMOD_CHANNEL_FREE, sound9, false, &wob09);
ERRCHECK(result);
}
- (IBAction)stopSound9:(id)sender
{
FMOD_RESULT result = FMOD_OK;
result = wob09->stop();
ERRCHECK(result);
}
ご覧のとおり、すべてのコードが繰り返されています。これが私がそれを機能させることができた唯一の方法ですが、これらを配列に入れることができることを私は知っています、私はそれを理解することができません。おそらくNSMutableArrayと「sound1」、「sound2」などをリストアップしてから、インターフェイスビルダーで各ボタンにタグを割り当てますか?理想的には、stopSound用に1つ、playSound用に1つ、タグを使用して正しいサウンドファイルを再生または停止する関数が必要です。FMODのsystem->createSound()を使用する場合、最後の引数は新しく作成されたサウンドを格納する変数です。代わりに配列または辞書に格納する方法はありますか?もしそうなら、私はそれを理解することはできません。
どんなアドバイスでもありがたいです。この単純な問題に対して頭を殴るのはやめたいと思います。
ありがとうございました!