M
MaN_
Gast
Hi,
Ich programmier momentan an nem Bomberman-clone. Jetzt habe ich gerade festgestellt, dass die Bewegung auf meinem Windows Laptop einiges schneller ist als auf meinem Desktop mit Linux (Kubuntu).
Hier der Thread der die gedrückten tasten aus dem boolean Array bCursorKey[] ausliest und der Figur übergiebt.
Die moveMan Methode:
und hier der Thread der dann die LinkedBlockingQueue ausliest und die Befehle an die Methode move übergibt, der dann die Figur an der neuen stelle zeichnet.
Ich denke mal das die 50ms (im ersten code-teil) ausreichen sollte das ganze zu zeichnen. bei 100ms ist es auf dem Desktop noch viel langsamer... Kann es sein das die Sleep-Methode so ungenau ist das sie auf dem Laptop einiges kürzer wartet?
Bei 150 Schritten ist der Laptop ca 30 Schritte vorraus.
Am Prozessor oder Ram kann es nicht liegen. der Desktop hat nen 3800+ und 2GB Ram der Laptop nur nen Centrino 1,6 und 512MB Ram.
Das einzige wäre die Grafikkarte. im Desktop steckt ne Geforce 4 TI 4400 und im Laptop ne Radeon 9700 Mobility. Also könnte die Zeichenoperation auf dem Laptop deswegen schneller passiert sein. Aber da der Unterschied bei 100ms noch viel höher ist, glaub ich eher das es am sleep liegt.
Habt ihr mir ein Tipp das ganze gleichschnell hinzubekommen? Im Singleplayer ist das natürlich egal aber im Multiplayer
ist das ja schon ein bisschen unfair...
Ich hoffe ihr versteht mein Problem
Gruß
MaN
Ich programmier momentan an nem Bomberman-clone. Jetzt habe ich gerade festgestellt, dass die Bewegung auf meinem Windows Laptop einiges schneller ist als auf meinem Desktop mit Linux (Kubuntu).
Hier der Thread der die gedrückten tasten aus dem boolean Array bCursorKey[] ausliest und der Figur übergiebt.
Code:
for (int i = 0; i < 4; i++)
{
if (bCursorKey[i])
{
switch (i)
{
case 0:
man.moveMan(Man.LEFT);
break;
case 1:
man.moveMan(Man.UP);
break;
case 2:
man.moveMan(Man.RIGHT);
break;
case 3:
man.moveMan(Man.DOWN);
break;
}
try{Thread.sleep(50);} catch (InterruptedException e){}
}
}
Die moveMan Methode:
Code:
/** speichert die Richtung in eine LinkedBlockingQueue **/
public void moveMan(int dir)
{
queue.add(dir);
}
und hier der Thread der dann die LinkedBlockingQueue ausliest und die Befehle an die Methode move übergibt, der dann die Figur an der neuen stelle zeichnet.
Code:
public void run()
{
while(!bStopRequested)
{
try
{
move(queue.take());
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
Ich denke mal das die 50ms (im ersten code-teil) ausreichen sollte das ganze zu zeichnen. bei 100ms ist es auf dem Desktop noch viel langsamer... Kann es sein das die Sleep-Methode so ungenau ist das sie auf dem Laptop einiges kürzer wartet?
Bei 150 Schritten ist der Laptop ca 30 Schritte vorraus.
Am Prozessor oder Ram kann es nicht liegen. der Desktop hat nen 3800+ und 2GB Ram der Laptop nur nen Centrino 1,6 und 512MB Ram.
Das einzige wäre die Grafikkarte. im Desktop steckt ne Geforce 4 TI 4400 und im Laptop ne Radeon 9700 Mobility. Also könnte die Zeichenoperation auf dem Laptop deswegen schneller passiert sein. Aber da der Unterschied bei 100ms noch viel höher ist, glaub ich eher das es am sleep liegt.
Habt ihr mir ein Tipp das ganze gleichschnell hinzubekommen? Im Singleplayer ist das natürlich egal aber im Multiplayer
ist das ja schon ein bisschen unfair...
Ich hoffe ihr versteht mein Problem
Gruß
MaN