soundlösung zu langsam für spiele

Status
Nicht offen für weitere Antworten.
J

jared

Gast
hallo!
ich spiele sound - kurz gefasst - so ab:
Code:
        SourceDataLine line=null;
        AudioFormat audioFormat=new AudioFormat((float)8000.0,16,2,true,false);
        DataLine.Info info=new DataLine.Info(SourceDataLine.class,audioFormat);
        try{
            line = (SourceDataLine) AudioSystem.getLine(info);
            line.open(audioFormat);
        }catch (LineUnavailableException e){}
        ////
        line.write(buffer,0,buffersize);

(hoffe, es ist alles wichtige drin)
das ist leider zu langsam für ein spiel.
es vergeht ca. 1/2 sekunde vom befehl bis man den sound hört.

wie kann man das schneller machen??

gez:jared
 

Bert Brenner

Bekanntes Mitglied
Ist jetzt nur geraten, aber warum initialisierst du die SourceDataLine nicht früher, so das du noch line#write zur gegebenen zeit benutzen musst?
 

Soulfly

Bekanntes Mitglied
Mach ich zwar ungern, aber ich hab hier die WaveFile Klasse von meiner 2D-engine. Es gibt auch noch Ogg und Midi.
Damit solltest du keine Probleme mehr haben.

Code:
import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;



/**
 * Diese erstellt aus einer Wav-File ein abspielbares Objekt. Und sollte wenn möglich nur für Sounds verwendet werden
 * 
 * @author Soulfly alias Ingo Müller
 */
public class WaveFile implements Runnable
{
	/** Vereinfacht die Steuerung für einen unendlichen Sound(Musik) */
	static final boolean	LOOP	= true;

	/** Vereinfacht die Steuerung für einenSound */
	static final boolean	PLAY	= false;

	/** Die Lautstärke vom abgespielten Sound */
	private float			gain;

	/** zeigt, ob loop aktiviert ist */
	private boolean			loop;

	/** Name der Sound-Datei */
	private String			name;

	/** Links-Rechts-Modifier für die Sound-Datei */
	private float			pan;

	/** zum Steuern des loop-Sounds */
	private boolean			shouldplay;

	/** SoundThread */
	private Thread			t;

	/**
	 * Kontruktor
	 * 
	 * @param n
	 *            Sound-Datei
	 * @param g
	 *            Gain-Lautstärke
	 */
	public WaveFile(String n, float g)
	{
		pan = 0f;
		gain = g;
		name = n;
	}

	/**
	 * Abspiel-Thread der WaveFile
	 */
	public void run()
	{
		if (loop)
		{
			shouldplay = true;
			loop();
		}
		else
		{
			play();
		}
	}

	/**
	 * Startet den Sound einmal oder im Loop
	 * 
	 * @param LOOP
	 *            Loop oder nicht
	 */
	public void start(boolean LOOP)
	{
		loop = LOOP;

		t = new Thread(this);
		t.start();
	}

	/**
	 * Stop den unendlichen Sound
	 */
	public void stop()
	{
		shouldplay = false;
	}

	/**
	 * Spielt den Sound oder die Musik unendlich ab bis der Sound gestoppt
	 */
	private void loop()
	{
		while (shouldplay)
		{
			try
			{
				System.out.println("loop start");
				AudioInputStream ais;

				Clip clip;

				AudioFormat format;

				ais = AudioSystem.getAudioInputStream(new File(WaveFile.getResource(name).getFile()));
				format = ais.getFormat();

				if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW))
				{
					AudioFormat tmp = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, format.getSampleSizeInBits(), format
							.getSampleSizeInBits() * 2, format.getChannels(), format.getFrameSize() * 2, format.getFrameRate(),
														true);
					ais = AudioSystem.getAudioInputStream(tmp, ais);
					format = tmp;
				}

				DataLine.Info info = new DataLine.Info(Clip.class, format, ((int) ais.getFrameLength() * format.getFrameSize()));

				clip = (Clip) AudioSystem.getLine(info);
				clip.open(ais);

				FloatControl panControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
				panControl.setValue(pan);

				FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
				gainControl.setValue(gain);

				clip.start();

				while (true)
				{
					try
					{
						Thread.sleep(100);
					}
					catch (Exception e)
					{
					}

					if (!clip.isRunning())
						break;
				}
				clip.stop();
				clip.close();

			}
			catch (LineUnavailableException e1)
			{
				e1.printStackTrace();
			}
			catch (IOException e1)
			{
				e1.printStackTrace();
			}
			catch (UnsupportedAudioFileException e)
			{
				e.printStackTrace();
			}
		}
	}

	/**
	 * Spielt den Sound einmal ab
	 */
	private void play()
	{
		try
		{
			AudioInputStream ais;

			Clip clip;

			AudioFormat format;

			ais = AudioSystem.getAudioInputStream(new File(WaveFile.getResource(name).getFile()));
			format = ais.getFormat();

			if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW))
			{
				AudioFormat tmp = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, format.getSampleSizeInBits(), format
						.getSampleSizeInBits() * 2, format.getChannels(), format.getFrameSize() * 2, format.getFrameRate(), true);
				ais = AudioSystem.getAudioInputStream(tmp, ais);
				format = tmp;
			}

			DataLine.Info info = new DataLine.Info(Clip.class, format, ((int) ais.getFrameLength() * format.getFrameSize()));

			clip = (Clip) AudioSystem.getLine(info);
			clip.open(ais);

			FloatControl panControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
			panControl.setValue(pan);

			FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
			gainControl.setValue(gain);

			clip.start();

			while (true)
			{
				try
				{
					Thread.sleep(100);
				}
				catch (Exception e)
				{
				}

				if (!clip.isRunning())
					break;
			}
			clip.stop();
			clip.close();

		}
		catch (LineUnavailableException e1)
		{
			e1.printStackTrace();
		}
		catch (IOException e1)
		{
			e1.printStackTrace();
		}
		catch (UnsupportedAudioFileException e)
		{
			e.printStackTrace();
		}
	}
        
        /**
	 * Einfacher statische URL Loader für Jar-Archive und Ordner
	 * 
	 * @param filename
	 *            Datei die geladen werden soll
	 * @return Passende URL zur Datei
	 */
	public final static URL getResource(final String filename)
	{
		// Try to load resource from jar
		URL url = ClassLoader.getSystemResource(filename);
		// If not found in jar, then load from disk
		if (url == null)
		{
			try
			{
				url = new URL("file", "localhost", filename);
			}
			catch (Exception urlException)
			{
			} // ignore
		}
		return url;
	}
}
 
J

jared

Gast
[/quote]Ist jetzt nur geraten, aber warum initialisierst du die SourceDataLine nicht früher, so das du noch line#write zur gegebenen zeit benutzen musst?
mach ich natürlich :wink: . was ich da geschrieben hab ist gekürzt, damit man es schnell versteht.
 
J

jared

Gast
danke für die klasse.

bei mir meldet der aber fehler:
zeile 90:
"the constructor Thread(WavFile) is undefined"

wie kann ich das fixen?
 

Soulfly

Bekanntes Mitglied
Wenn da wirklich "WavFile" steht, dann benenn mal deine Datei um in WaveFile.java.
Sind da noch andere Fehleranzeigen.
Ich hab die nämlich halbdirekt aus meiner Engine rauskopiert. Sorry dafür.

MfG
Soulfly
 
J

jared

Gast
die anderen fehler konnte ich alle fixen,
indem ich imoprted habe.
jetzt ist da nur noch der mit dem thread.
naja, ich versuch mal, das programm zu verstehen,
dann kann ich direkt teile bei mir einbauen.
mfg, jared
 

EgonOlsen

Bekanntes Mitglied
Soulfly hat gesagt.:
Mach ich zwar ungern, aber ich hab hier die WaveFile Klasse von meiner 2D-engine. Es gibt auch noch Ogg und Midi.
Damit solltest du keine Probleme mehr haben.
Warum lädst du den Sound für jedes Abspielen neu? Spielst du es deswegen in einem Thread, damit die ständige Initialisierung keinen Schluckauf im Spiel verursacht? Es macht meiner Ansicht nach viel mehr Sinn, den Sound im <init> zu laden und dann nur noch abzuspielen. Und dafür braucht man keine Threads. Sich bei Java darauf zu verlassen, das ein Thread auch rechtzeitig drankommt ist eine sehr wackelige Angelegenheit.
In diesem Thread findest du ein Beispiel, wie ich das meine (der untere Code (StrippedSound)): www.java-forum.org/de/viewtopic.php?t=17095
 

Soulfly

Bekanntes Mitglied
Hi
ich weiß wieder woran es. Ich vorher über eine allgemeine Schnittstelle für Soundklassen, mit dieser kommuniziert
und in der Schnittstelle war auch das Interface Runnable.
Implementiere diese Schnittstelle für die Klasse und alles funktioniert.
Ich ändere das oben auch, damit nicht jeder, der das will immer diesen Fehler hat.

Mfg
sOUFLLY
 
J

jared

Gast
ja.
ich hab jetzt eine klasse draus gemacht:

Code:
package soul2d.engine.audio;

import java.io.File;
import java.io.IOException;

import javax.sound.sampled.*;

public class WavFileCore extends Thread{
	
	float pan=0;
	float gain=1;
	String name;
	boolean ended=false;
	
	public WavFileCore(String filename){
		super();
		name=filename;
	}
	
	public void run(){
		play();
	}
	
	private void play() 
	{ 
	      try 
	      { 
	         AudioInputStream ais; 

	         Clip clip; 

	         AudioFormat format; 

	         ais = AudioSystem.getAudioInputStream(new File(WaveFile.getResource(name).getFile())); 
	         format = ais.getFormat(); 

	         if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW)) 
	         { 
	            AudioFormat tmp = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, format.getSampleSizeInBits(), format 
	                  .getSampleSizeInBits() * 2, format.getChannels(), format.getFrameSize() * 2, format.getFrameRate(), true); 
	            ais = AudioSystem.getAudioInputStream(tmp, ais); 
	            format = tmp; 
	         } 

	         DataLine.Info info = new DataLine.Info(Clip.class, format, ((int) ais.getFrameLength() * format.getFrameSize())); 

	         clip = (Clip) AudioSystem.getLine(info); 
	         clip.open(ais); 

	         FloatControl panControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); 
	         panControl.setValue(pan); 

	         FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); 
	         gainControl.setValue(gain); 

	         clip.start(); 

	         while (true) 
	         { 
	            try 
	            { 
	               Thread.sleep(100); 
	            } 
	            catch (Exception e) 
	            { 
	            } 

	            if (!clip.isRunning()) 
	               break; 
	         } 
	         clip.stop(); 
	         clip.close(); 

	      } 
	      catch (LineUnavailableException e1) 
	      { 
	         e1.printStackTrace(); 
	      } 
	      catch (IOException e1) 
	      { 
	         e1.printStackTrace(); 
	      } 
	      catch (UnsupportedAudioFileException e) 
	      { 
	         e.printStackTrace(); 
	      } 
	      ended=true;
   } 
}

dann habe ich den clip durch eine SourceDataLine ersetzt:

Code:
package soul2d.engine.audio;

import java.io.File;
import java.io.IOException;

import javax.sound.sampled.*;

public class LineCore extends Thread{

	float pan=0;
	float gain=1;
	String name;
	boolean ended=false;
	
	public LineCore(String filename){
		super();
		name=filename;
	}
	
	public void run(){
		play();
	}
	
	private void play() 
	{ 
	      try 
	      { 
	         AudioInputStream ais; 

	     	SourceDataLine line;

	         AudioFormat format; 

	         File soundfile=new File(WaveFile.getResource(name).getFile());
	         ais = AudioSystem.getAudioInputStream(soundfile); 
	         format = ais.getFormat(); 

	         /*if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW)) 
	         { 
	            AudioFormat tmp = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, format.getSampleSizeInBits(), format 
	                  .getSampleSizeInBits() * 2, format.getChannels(), format.getFrameSize() * 2, format.getFrameRate(), true); 
	            ais = AudioSystem.getAudioInputStream(tmp, ais); 
	            format = tmp; 
	         } */

	         DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); 

	         line = (SourceDataLine)AudioSystem.getLine(info); 
	         line.open(format); 

	         FloatControl panControl = (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN); 
	         panControl.setValue(pan); 

	         FloatControl gainControl = (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN); 
	         gainControl.setValue(gain); 

	         line.start(); 

     		byte[] abData=new byte[1024];
    		int nRead=0;
	         for(int i=0;i<soundfile.length();i++)
	         { 
	            try 
	            { 
       				nRead=ais.read(abData,0,abData.length);
        			if(nRead>=0){
        				line.write(abData,0,nRead);
        			}
	            } 
	            catch (Exception e) 
	            { 
	            } 
	         } 
	         line.stop(); 
	         line.close(); 

	      } 
	      catch (LineUnavailableException e1) 
	      { 
	    	  System.out.println("gaytnich");
	         e1.printStackTrace(); 
	      } 
	      catch (IOException e1) 
	      { 
	    	  System.out.println("gaytnich");
	         e1.printStackTrace(); 
	      } 
	      catch (UnsupportedAudioFileException e) 
	      { 
	    	  System.out.println("gaytnich");
	         e.printStackTrace(); 
	      } 
	      ended=true;
   } 
}

das klappt, vom knopfdrücken bis man den sound hört vergeht fast keine zeit.

jetzt versteh ich aber nicht warum es bei meinem anderen programm so lange dauert.
(das andere programm hat eine andere funktion)

ich poste es mal. (hoffentlich ist es verständlich, ich werde ein paar erklärungen einfügen):

Code:
package byteplay;

import java.io.*;
import javax.sound.sampled.*;

public class BytePlay416BitStereo extends Thread{
	public byte[] playByte; //eine reihe von bytes
                //, die als sound interpretiert immer wieder abgespielt werden. 
                //in soundplay fügt man in dieses array ein anderes array ein...
	public AudioFormat audioFormat=new AudioFormat((float)8000.0,16,2,true,false);
	SourceDataLine line;
	public boolean stopit=false;//von aussen kann man stopit true setzen, dann stoppt der thread.
	public int at=0;//welchen teil des arrays gerade auf die SourceDataLine geschrieben wird
	int buffersize;//s.u.

	public static byte[] filezubyte(File soundfile){

                       //konvertiert eine wav-file (16bit,stereo,48000khz) in ein bytearray
                       //wird z.B. benutzt, wenn man einen wavsound von aussen abspielen will (siehe playSound())

		byte[] returnbyte=new byte[(int)soundfile.length()];
		AudioInputStream audioInputStream=null;
		try{
			audioInputStream=AudioSystem.getAudioInputStream(soundfile);
		}catch (Exception e){}
		try{
			audioInputStream.read(returnbyte,0,returnbyte.length);
		}catch (IOException e){}
		return returnbyte;
	}
	
	public void playSound(byte[] sound,double volL,double volR){//sollte 16bit,stereo,samplerate=48000 sein

                                //diese methode wird von aussen benutzt, um ein bytearray in 'playbyte' einzufügen
                                //hier wird eigentlihc nichts abgespielt

		boolean links=true;
		boolean erstes=true;
		for(int i=0;i<sound.length;i++){
			int einsetzbei=at+i;
		                 //bei 'at', also dem teil, der gerade in die line geschrieben wird wird das bytearray eingefügt
			if(einsetzbei>=playByte.length)einsetzbei-=playByte.length;
			if(links){playByte[einsetzbei]+=(byte)(volL*sound[i]);}
			else{playByte[einsetzbei]+=(byte)(volR*sound[i]);}
			if(!erstes)links=!links;
			erstes=!erstes;
		}
	}
	
	public BytePlay416BitStereo(int maxeinspielsoundlänge,int buffersize) {
		super();
		this.buffersize=buffersize;
		playByte=new byte[maxeinspielsoundlänge];
		line=null;
		DataLine.Info info=new DataLine.Info(SourceDataLine.class,audioFormat);
		try{
			line = (SourceDataLine) AudioSystem.getLine(info);
			line.open(audioFormat);
		}catch (LineUnavailableException e){}
	}
	
	public void run(){

		//'byteplay' wird immer wieder und in abschnitte (buffer) unterteilt auf die line geschrieben (line.write)

		line.start();
		byte[] buffer=new byte[buffersize];
		while(!stopit){
			for(int i=0;i<buffersize;i++){
				buffer[i]=playByte[at+i];
				playByte[at+i]=0;
			}
			line.write(buffer,0,buffersize);
			at+=buffersize;
			if(at>playByte.length-buffersize)at=0;
		}
		System.out.println("stopped!");
		line.close();
	}
}

noch ein beispiel, wie manns benutzt:

Code:
int volL=1;//lautstärke der linken spur 100%=1.0
int volR=1;//abspiel-lautstärke der rechten spur
BytePlay416BitStereo bp=new BytePlay416BitStereo(9999999,64);
bp.playSound(filezubyte(new File(meinsound.wav)),volL,volR);

so. hat einer eine ahnung, warum BytePlay416BitStereo so langsam reagiert?
oder fragen zu der klasse?...
 
G

Guest

Gast
moment, das beispiel ist falsch.
es muss lauten:
Code:
double volL=1.0;
double volR=1.0;
BytePlay416BitStereo bp=new BytePlay416BitStereo((9999999,64);
bp.start();
bp.playSound(filezubyte(new File(meinsound.wav)),volL,volR);
 
S

Simon Griese (Gast)

Gast
Mich überrascht dass das überhaupt funktioniert.
Sehr umständliche Methode!
 

thomas.g

Bekanntes Mitglied
hi,

ich hätte eine einfachere Lösung, allerdings muss man Java Media Framework installieren.

Wenn ich irgendwelche Soundbasierte Applicationen machen verwende ich immer JMF, weil man da so ziemlich alles abspielen kann und es leicht zu implementieren ist.

mfg, thomas
 

0xdeadbeef

Top Contributor
Hatte das in leicht geänderter Form schon mal gepostet, aber da war da hatte ich noch mehr Workarounds eingebaut, die inzwischen unnötig sind, weil die Probleme in der JVM lagen. Also nochmal meine (simple) Soundklasse:

Code:
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.Line;
import javax.sound.sampled.Mixer;

public class Sound {
	
	public Sound() throws Exception {
		canPlay = false;
		String fName="";
		soundBuffer = new byte[NUMBER][];
		format = new AudioFormat[NUMBER];
		
		try {
			URLClassLoader urlLoader = (URLClassLoader) this.getClass().getClassLoader();
			for (int i = 0; i<NUMBER; i++) {
				fName = "sound/sound_"+Integer.toString(i)+".wav";
				URL fileLoc = urlLoader.findResource(fName);
				if (fileLoc == null)
					throw new Exception();
				AudioInputStream f = AudioSystem.getAudioInputStream(fileLoc); 
				format[i] = f.getFormat();
				soundBuffer[i] = new byte[(int)f.getFrameLength()*format[i].getFrameSize()];
				f.read(soundBuffer[i]);
				f.close();
				
			}
		} catch (Exception ex) {
			throw new Exception("Error loading sound file "+ fName);
		}
		
		// get all available mixers
		Mixer.Info[] mixInfo = AudioSystem.getMixerInfo();
		ArrayList mix = new ArrayList();
		for (int i=0; i<mixInfo.length; i++) {
			Mixer mixer = AudioSystem.getMixer(mixInfo[i]);
			Line.Info info = new Line.Info(Clip.class);
			int num = mixer.getMaxLines(info);
			if (num != 0)
				mix.add(mixer);			
		} 		
		mixers = new Mixer[mix.size()];
		mixers = (Mixer[])mix.toArray(mixers);		
	}
	
	public String[] getMixers() {
		if (mixers==null)
			return null;
		String s[] = new String[mixers.length];
		for (int i=0; i<mixers.length; i++)
			s[i] = mixers[i].getMixerInfo().getName();
		return s;
	}
	
	public void setMixer(int i) {
		if (i > mixers.length)
			i = 0;
		mixerIdx = i;
	}
	
	public void play(int num) {
		int retryCount = 0;
		DataLine.Info info = new DataLine.Info(Clip.class, format[num]);
		try {
			Clip c = (Clip)mixers[mixerIdx].getLine(info);
			c.open(format[num],soundBuffer[num],0,soundBuffer[num].length);			
			c.start();
			break;
		} catch (Exception ex) {}
	}
		
	byte soundBuffer[][];
	AudioFormat format[];
	int   mixerIdx;
	Mixer mixers[];
	boolean canPlay;
	
	final static int NEEDED_LINES = 2;
	final static int NUMBER = 24;
}

Der Konstruktor lädt "sound\sound_0.wav" bis "sound\sound_23.wav" in ein zweidimensionales Byte-Array. Könnte man "generischer" programmieren, aber ich brauche genau diese Anzahl und werde nie mehr brauchen, also dürfte das die kürzeste/performanteste Lösung sein. Kann man ja aber einfach in ArrayList usw. umbauen.
Das getrennte Abspeichern des AudioFormats ist eigentlich auch ein Workaround gewesen: könnte man wegoptimieren, wenn die Soundfiles alle ähnlich/gleich sind. Ansonsten könnte man das noch etwas auf Geschwindigkeit optimieren, wenn man die DataLine.Info in einem Array speichert. Tut aber auch so.
Die Auswahl des Mixers ist eine Komfortfunktion, damit man per Menü einen Mixer einstellen kann. Prinzipiell könnte man auch eine Line auch per AudioSystem.getLine() anfordern, dann bekommt man allerdings immer die hardwarebeschleunigte Variante, die u.U. Probleme machen kann.
Allerdings scheinen in der 1.5_05 die Abspielprobleme kurzer Clips behoben zu sein, also könnte man wohl wieder auf diese einfache Version gehen.
 

maxf

Mitglied
Ich würde die Klasse LemmException so deklerieren:
Code:
class LemmException extends Exception{
	
	public LemmException() {
		super();
	}
	
	public LemmException(String s) {
		super(s);
	}
}
 

0xdeadbeef

Top Contributor
Sollte gar nicht mehr vorkommen, hatte ich beim Rausschneiden aus meinem kleinen Spielprojekt (wer anhand der Exception errät, um was es geht, kriegt einen Gummipunkt) lediglich vergessen.
Habe jetzt alle LemmExceptions in Exception umbenannt. Für eine saubere Lösung sollte man sich natürlich eine eigene SoundException schreiben. Aber ich wollte das Beispiel nicht unnötig kompliziert machen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O soundlösung für spiele (mit lautstärke) Spiele- und Multimedia-Programmierung 4
R Verschieben von Objekten langsam Spiele- und Multimedia-Programmierung 0
W Spiel ist langsam/laggt Spiele- und Multimedia-Programmierung 18
B LWJGL Display.update() ist langsam Spiele- und Multimedia-Programmierung 5
X TiledMap "langsam" verschieben Spiele- und Multimedia-Programmierung 8
O A* funktioniert, aber zu langsam Spiele- und Multimedia-Programmierung 10
1 Ping Pong langsam Spiele- und Multimedia-Programmierung 13
M Robot zu langsam Spiele- und Multimedia-Programmierung 4
T Java zu langsam Spiele- und Multimedia-Programmierung 22
T BufferedImage#setRGB #getRGB zu langsam Spiele- und Multimedia-Programmierung 4
B Buttontexte langsam nacheinander erscheinen lassen Spiele- und Multimedia-Programmierung 3
T Mein Vektor-Zeichenprogramm ist zu langsam Spiele- und Multimedia-Programmierung 4
P bildskalierung zu langsam Spiele- und Multimedia-Programmierung 4
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
B Deepmind Poker Bot für PokerStars konfigurieren? Spiele- und Multimedia-Programmierung 2
G Minecraft PlayerBot (Listener Thread für jeden Spieler?) Spiele- und Multimedia-Programmierung 3
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
E Organisation für Game Spiele- und Multimedia-Programmierung 1
Excess Ballerfisch für Android Spiele- und Multimedia-Programmierung 3
coolian ich brauche irgendeine gui lib für lwjgl2 Spiele- und Multimedia-Programmierung 51
krgewb Anderer Algorithmus für Bounding Box Spiele- und Multimedia-Programmierung 9
MiMa MP3 Dateien für Metadaten abgleichen Spiele- und Multimedia-Programmierung 0
Freshy Bot für Discord Spiele- und Multimedia-Programmierung 61
R Ideen für die Backend-Entwicklung eines Games gesucht Spiele- und Multimedia-Programmierung 8
G Mikrophon-/Audiosteuerung für einen Character Spiele- und Multimedia-Programmierung 1
P Tennis- Spielstand- Zähler für Schule programmieren Spiele- und Multimedia-Programmierung 6
M Logik für ein Quiz Spiele- und Multimedia-Programmierung 7
P Hilfe für Seminar Arbeit Spiele- und Multimedia-Programmierung 9
MiMa Metadaten für Multimedia Daten ermitteln Spiele- und Multimedia-Programmierung 4
G Übungsprogramm für Matheaufgaben Spiele- und Multimedia-Programmierung 1
F Algorithmus für bessere Kollisionsabfragen Spiele- und Multimedia-Programmierung 10
S Bilder Für Schachfiguren Spiele- und Multimedia-Programmierung 14
Timo_neu_in_java Suche etwas einfaches für Anfänger Spiele- und Multimedia-Programmierung 6
I Minecraft Suche Plugin Developer für Minecraft Netzwerk! Spiele- und Multimedia-Programmierung 2
S GUI erstellen für Text Adventure Spiele- und Multimedia-Programmierung 4
S Eigene Klasse vec_t - 3 oder 4 Einheiten für x, y, z und w Spiele- und Multimedia-Programmierung 11
R Vererbbarer GameLoop für Engine Spiele- und Multimedia-Programmierung 14
J Vektor für Gravitation erzeugen Spiele- und Multimedia-Programmierung 34
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
Z Minimax-Algorithmus für TicTacToe Spiele- und Multimedia-Programmierung 5
H KI für Spiele Spiele- und Multimedia-Programmierung 1
S Pssende Datenstruktur für ein Netz Spiele- und Multimedia-Programmierung 5
S MouseEvents für Sprites Spiele- und Multimedia-Programmierung 3
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
J mehrere Listener für einen Button / Label Spiele- und Multimedia-Programmierung 1
C Port umleiten: lesen und schreiben für MCServer-Client über Skype Spiele- und Multimedia-Programmierung 0
J Musik Bibliothek für GUI Spiele- und Multimedia-Programmierung 7
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
R Ratschlag für 2D-3D Engine für die Spieleentwicklung gesucht Spiele- und Multimedia-Programmierung 4
Androbin KI für Verfolgung im Raster Spiele- und Multimedia-Programmierung 2
A Bot für Browsergame Spiele- und Multimedia-Programmierung 2
H Tutorials für Fortgeschrittene 3D-Anwedungen Spiele- und Multimedia-Programmierung 2
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
Furtano Vektoren für Bewegung für eine 2D-Simulation Spiele- und Multimedia-Programmierung 3
T Sinusgenerator für eine Hp Spiele- und Multimedia-Programmierung 8
J Menü für Snakespiel in einzelnem JFrame Spiele- und Multimedia-Programmierung 5
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
N Animationen für ein 2D game Spiele- und Multimedia-Programmierung 6
S Aufbau für 2D Spiele Spiele- und Multimedia-Programmierung 7
L Client für ein Browsergame Spiele- und Multimedia-Programmierung 21
Devil0s Swing Elemente für Inventar? Spiele- und Multimedia-Programmierung 9
Kenan89 Ansatzfrage: Kartenspiel für 2 Spieler Online Spiele- und Multimedia-Programmierung 3
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
P Spielfeld für RPG Spiele- und Multimedia-Programmierung 15
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
S Algorithmus zur Ressourcesuche für die KI Spiele- und Multimedia-Programmierung 5
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
K Einfache Engine für einfaches 3D gesucht Spiele- und Multimedia-Programmierung 10
C KI für Skatspiel - Wie können die Computerspieler eigenständig handeln? Spiele- und Multimedia-Programmierung 10
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
Kenan89 Kleines Projekt für Java Spiele- und Multimedia-Programmierung 5
M Empfehlungen für ein 2D-Jump'n'run Spiele- und Multimedia-Programmierung 4
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
C Wo ist der MP3 Plugin für JMF? Spiele- und Multimedia-Programmierung 3
qwerqer Design Pattern gesucht für Spielregeln Spiele- und Multimedia-Programmierung 2
M Java als Programmiersprache für kommerzielle Spieleentwicklung? Spiele- und Multimedia-Programmierung 3
K Game Engine für selbstprogrammiertes Spiel Spiele- und Multimedia-Programmierung 27
Y Warum Thread für Spieleprogrammierung? Spiele- und Multimedia-Programmierung 27
A Music für Android game Spiele- und Multimedia-Programmierung 3
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
M Minecraft Suche Java Programmierer (für Minecraft) Spiele- und Multimedia-Programmierung 2
Luk10 Tipps für bessere Animationen / Grafik Engine Spiele- und Multimedia-Programmierung 2
T 2D Menü für 3D Spiel Spiele- und Multimedia-Programmierung 5
T Grundlagenwissen für den 3D Raum Spiele- und Multimedia-Programmierung 6
I getSubImage sorgt für starken Performanceeinbruch Spiele- und Multimedia-Programmierung 6
M technologie für video, webcam & co Spiele- und Multimedia-Programmierung 25
C Java für große Spiele geeignet ? Spiele- und Multimedia-Programmierung 101
D Libraryempfehlung für Effekte Spiele- und Multimedia-Programmierung 3
B Spiele programmieren für ein Fenster? Spiele- und Multimedia-Programmierung 14
D Tabelle für Spiel Spiele- und Multimedia-Programmierung 3
N Grundlagen für ein Jump&Run Spiele- und Multimedia-Programmierung 3
S Datenbank gesucht für Bilder(gif-dateien) Spiele- und Multimedia-Programmierung 5
J Suche 3D Programm für jMonkeyEngine Spiele- und Multimedia-Programmierung 5
W 3D-APIs für Java - Eine Übersicht Spiele- und Multimedia-Programmierung 8
D Problem beim Öffnen einer PHP für eine Highscore Spiele- und Multimedia-Programmierung 5
S Game Client für kleine Competition Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben