6
私は現在、アンドロイドゲームの問題に直面しています。通常SoundPool.play()を呼び出すとき、関数は約0.003秒で完了しますが、時には0.2秒かかるためゲームが狂ってしまいます。彼の異常はどこから来たのだろうか?Android SoundPool.play()が時々遅れる
私は現在、アンドロイドゲームの問題に直面しています。通常SoundPool.play()を呼び出すとき、関数は約0.003秒で完了しますが、時には0.2秒かかるためゲームが狂ってしまいます。彼の異常はどこから来たのだろうか?Android SoundPool.play()が時々遅れる
Timのおかげで、再生用のスレッドを使用して問題を解決できたようです。私たちにいくつかのコードを表示
スレッド
package org.racenet.racesow.threads;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import org.racenet.racesow.models.SoundItem;
import android.media.SoundPool;
/**
* Thread for playing sounds
*
* @author soh#zolex
*
*/
public class SoundThread extends Thread {
private SoundPool soundPool;
public BlockingQueue<SoundItem> sounds = new LinkedBlockingQueue<SoundItem>();
public boolean stop = false;
/**
* Constructor
*
* @param soundPool
*/
public SoundThread(SoundPool soundPool) {
this.soundPool = soundPool;
}
/**
* Dispose a sound
*
* @param soundID
*/
public void unloadSound(int soundID) {
this.soundPool.unload(soundID);
}
@Override
/**
* Wait for sounds to play
*/
public void run() {
try {
SoundItem item;
while (!this.stop) {
item = this.sounds.take();
if (item.stop) {
this.stop = true;
break;
}
this.soundPool.play(item.soundID, item.volume, item.volume, 0, 0, 1);
}
} catch (InterruptedException e) {}
}
}
SoundItem
package org.racenet.racesow.models;
/**
* SoundItem will be passed to the SoundThread which
* will handle the playing of sounds
*
* @author soh#zolex
*
*/
public class SoundItem {
public soundID;
public volume;
public stop = false;
/**
* Default constructor
*
* @param soundID
* @param volume
*/
public SoundItem(int soundID, float volume) {
this.soundID = soundID;
this.volume = volume;
}
/**
* Constructor for the item
* which will kill the thread
*
* @param stop
*/
public SoundItem(boolean stop) {
this.stop = stop;
}
}
は、いくつかの助けになることができます。あなたのゲームについて何も知らずに、私はそれは恐らくスレッドに関連しています。 – Aidanc
これは何とか複雑なコードなので、何を見たいですか? –
アプリケーションでスレッドをどのように処理していますか? – Aidanc