Das SPiel ruckelt nach einer Zeit

Status
Nicht offen für weitere Antworten.

fantrixx

Bekanntes Mitglied
Hi all,

ich bin getrade dabei so ein ganz simples Ping Pong zu machen aber das man jetzt erst nur mit einem Balken Spielt gegen eine Mauer.
So nun kommt das Porblem unzwar wenn ich das Psiel länger lafuen lasse wir es immer langsamer. Das heisst das die Bewegungen nicht mehr so flüssig rüberkommen wie am anfgang ?!
Zu erwähnen ist das ich in dem Programm einen Doppelpuffer eingebaut habe.
Außerdem werdne die zwei .gif Bilder (ball und der Balken) mit dem repaint nach etwa 500 ms. wier gemalt (dann mit anderen neuen Koordinaten).
Ich wollte das erstmal so grob beschreiben, weil ich nicht die gesamten Klassen hier rein posten möchte.

Ich hoffe ihr könnt mir "so" helfen. Wenn nicht, dann kann ich auch den Code Posten.

mfg

fan
 

The_S

Top Contributor
schwer, aber was mir so spontan kam:

füllst du irgendeine Collection, die immer größer wird und die du jedes mal bei nem repaint komplett durchläufst?
 

The_S

Top Contributor
MediaTracker wirst du ja vermutlich nur einmal verwenden. Und mit einer Collection meine ich eine java.util.Collection bzw. alle davon erbenden Klassen.
 

The_S

Top Contributor
joa, wenns keine Immer größer werden Collections gibt, bzw. immer länger werdende schleife, weis ich auch nicht weiter. Du kannst aber mal deine paint-Methode posten, da könnte ich mir noch vorstellen, dass das Problem liegt
 

fantrixx

Bekanntes Mitglied
Code:
  public void paint(Graphics g) {
    coll();
    if(go) b1.setV();

    if (go == false) {
        l1.setBounds(300, 300, 500, 500);
        l1.setText("Drücken sie 'S' um das Spiel zu beginnen");
    }

    g.drawImage(balken, p1.x, p1.y, this);
    g.drawImage(ball, b1.x, b1.y, this);
  }

setv() hat nichts besonderes da werden nur Variablen geändert.
Und Coll() ist für Kollision Zuständig.

was ich aber mal gerne Posten möchte ist noch meine Timer Klasse, weil du schleide erwähnt hast:


Code:
import javax.swing.*;

public class TimerB extends Thread {
    Main m1;
    Player p1 = new Player();

    public TimerB(Main m1) {
        this.m1 = m1;
    }

    public void run () { // run mehtode Hauptsächlich für das Repaint und den Dialog Fenster zuständig
        while (true) {
            if(m1.draussen) {
                p1.leben--;
                JOptionPane.showMessageDialog(m1, "Gestorben\rLeben: "+ p1.leben);
                m1.draussen = false;
                m1.reset();
            }
            try {
                Thread.sleep(2);

            }catch(Exception e) {         }
                m1.repaint();
        }
    }
}
 

The_S

Top Contributor
sollte soweit eigentlich korrekt sein und ich kann auch nichts erkennen, was auf dauer verzögern könnte (außer evtl. die nur 2 Millisekunden schlafzeit deines Threads, aber das sollte sich wenn dann von Anfang an auswirken und nciht erst später).

Die Methode coll würde mich noch interessiern. Da muss ja normal "viel" berechnet werden.
 

Illuvatar

Top Contributor
Also das Thread.sleep solltest du auf mindestens 10-15 millisekunden hochsetzen. Das merkt man nicht, und die Methode hat einen Bug, dass sie bei sehr kleinen Wartezeiten manchmal die Systemzeit verstellt.

Ansonsten würde mich vor allem mal die setV Methode interessieren.
 

fantrixx

Bekanntes Mitglied
naja ich muss sagen das ich noch sehr grosse Probleme mit den Collsion habe. Sprich das ich nicht genau weiss wie ich es programmieren soll (zu beachten ist halt einfallswinkel ist gleich ausfallswinkel).
Aber trotzdem mal hier die Methode:

Code:
public void coll() {
    int x1, x2;
    //ermittel welche x Breiten Koordination der Balken hat
    x1 = p1.x;
    x2 = x1 + 90;

    //BALL Koolision mit dem Balken
    if(b1.y >= 480 && (b1.x >= x1 && b1.x <= x2)) {
        //ändern der Richtung des Balles
        check4Zustand();
        ballBerührung++;
        System.out.println("Balken Koolision  " + x1 +" bis "+ x2 +" ist der Balken");
        b1.speed = - b1.speed;

    }

    //BALL Koolision mit der rechten und linken Mauer
    if(b1.x >= 780 || b1.x <= 20) {
        check4Zustand();
        System.out.println("Mauer Kollsion");
        if(b1.unten) b1.speed = 4;
            else b1.speed = - b1.speed;
    }

    //BALL Koolision mit der oberen Mauer
    if(b1.y <= 40) {
        check4Zustand();
        System.out.println("Obere mauer Kollsion");
        b1.speed = - b1.speed;
    }

    //Balken Koolision mit Mauer links und rechts
    if(p1.x <= 0) {
        p1.a = false;
        p1.d = true;
    }
    if(p1.x >= 700) {
        p1.a = true;
        p1.d = false;
    }
    if(p1.x > 0 && p1.x < 700) {
        p1.a = true;
        p1.d = true;
    }

    //BALL unten weg
    if(b1.y >= 515) {
        System.out.println("VERLOREN");
        draussen = true;
    }
  }

Und dann noch setV. Die Mehtode steht in einer anderen Klasse (ball.java):

Code:
 public void setV() {
        switch (zustand) {
            case 1:
                x = x - speed;
                y = y - speed;
                break;
            case 2:
                x = x + speed;
                y = y - speed;
                break;
            case 3:
                x = x - speed;
                y = y + speed;
                break;
            case 4:
                x = x + speed;
                y = y + speed;
                break;
        }
    }

Zu bemerken ist noch das ich dem Ball Zustände gebe. Es sind 4 stück für jede seitwärts bewegung den der Ball machen kann.
Dafür ist halt setV zuständig.

ps: ich hatte bis jetzt noch keine bessere Idee als das mit den Zuständen.


fan
 

Brainiac

Bekanntes Mitglied
Was macht check4Zustand()?Wird dein Programm auch langsamer, wenn du die ganzen System.out.prints auskommentierst?
 

0xdeadbeef

Top Contributor
Nur nebenbei: das mit den Zuständen und nur einer Geschwindigkeitskomponente is eh Murks, weil es dadurch ja nur 45°-Winkel gibt. Stattdessen x- und y-Komponente, beide natürlich vorzeichenbehaftet.

Das Thread.sleep wie gesagt mindestens mit 10 ms benutzen. Die ansonsten auf einigen Systemen resultierenden Probleme liegen im Übrigen an einem WindowsXP-Bug, nicht wirklich an der JVM.
Abgesehen davon garantiert eh keine JVM, daß so kurze Wartezeiten genau eingehalten werden.

Würde aber auch vermuten, daß Du irgendwie den Speicher vollmüllst. Z.B. durch Abspielen von Sounds oder so. Schon mal einen Profiler benutzt?
 

fantrixx

Bekanntes Mitglied
Also nach dem ich das auf meinen PC zuhause liefen gelasssen habe fing das Programm nicht an langsam zu werden. Es kann an dem Rechner hier auf der Arbeit liegen der hat nur 800mhz (P3) mit 512MB SDRAM und zuhause habe ich einen wesentlich schnelleren PC.
 

The_S

Top Contributor
Ich wette, wenn du dein Programm daheim länger laufen lässt wird es dort auch langsamer :bae:
 

fantrixx

Bekanntes Mitglied
Hmm muss ich mal ausprobieren. Aber zu erwähnen ist, dass die geschwindigkeiten wie der Thread.sleep abläuft auf den beiden POC unterschiedlich ist. Hier auf der alten Möhre läuft viel langsamer als zuhause. Wie auch schon Oxdeadbeef erwähnt hat.
 

The_S

Top Contributor
Wie gesagt 2 Millisekunden sind zu wenig. Da schaffts die alte Möhre vermutlich net nachzukommen ...
 

fantrixx

Bekanntes Mitglied
mal eine ganz andere Frage zu dem spiel. Weiss jmd. wie ich am besten so eine einfalls winkel gleich ausfallswinkel geschichte Programmieren kann ? Der ball hat seine x und y Koord. und er kann rechts, links, oben und auf den Balken der da unten gestuert wird knallen. Wenn der Ball hinter dem Balken landet ist es zuende.
Ich komme eifnach nicht auf die Lösung ?!
Also wenn der Ball auf eine der Objekte landet soll er in die andere Richtung weiter fliegen. Ich habe das scho nwas gemacht aber das hat soviele Fehler das ich nicht weiss ob das so die richtrige Lösung sieen kann ?

Fan
 

0xdeadbeef

Top Contributor
fantrixx hat gesagt.:
mal eine ganz andere Frage zu dem spiel. Weiss jmd. wie ich am besten so eine einfalls winkel gleich ausfallswinkel geschichte Programmieren kann ? Der ball hat seine x und y Koord. und er kann rechts, links, oben und auf den Balken der da unten gestuert wird knallen. Wenn der Ball hinter dem Balken landet ist es zuende.
Ich komme eifnach nicht auf die Lösung ?!
Also wenn der Ball auf eine der Objekte landet soll er in die andere Richtung weiter fliegen. Ich habe das scho nwas gemacht aber das hat soviele Fehler das ich nicht weiss ob das so die richtrige Lösung sieen kann ?

Also nochmal: die Geschwindigkeit des Balls ist ein Vektor, hat also eine Richtung. Entweder bildet man das über Betrag und Winkel ab, oder über eine (vorzeichenbehaftete) X- und Y-Komponente. Letzteres ist wesentlich einfacher zu handhaben, also hier die Lösung der Wahl. Statt nur "speed" zu benutzen und merkwürdige Stati abzufragen, zerlegst du die Geschwindigkeit einfach in ein deltaX und ein deltaY. Das deltaX addierst Du bei jedem Schritt auf die X-Koordinate des Balls und das deltaY auf die Y-Komponente des Balls. Wenn der Ball eine Wand oder den Schläger triffst, invertierst Du eine der Komponenten. Wenn der Ball also oben oder unten an ein Hindernis stößt: "deltaY = -deltaY", trifft er rechts oder links an ein Hindernis: "deltaX = -deltaX".

Um nicht nur 45°-Winkel zu haben, solltest Du dem deltaX und deltaX z.B. bei der Berührung der Schlägers noch einen zusätzlichen Schubser verpassen. Z.B. wenn der Schläger sich mit dem Ball bewegt, erhöhst Du den Betrag der entsprechenden Geschwindigkeitskomponente und wenn er sich dagegen bewegt, erniedrigst Du sie ein wenig. Zusätzlich kann man noch eine kleine Zufallskomponete einführen, insbesondere bei Treffern von Ecken. Dabei muß aber der Betrag der Geschwindigkeit begrenzt werden. In der Praxis dürfte es reichen, die Summe der Beträge der Komponenten zu begrenzen. Eventuell tut's auch die Begrenzung jeder der Komponenten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Spiel ruckelt trotz 50 fps Spiele- und Multimedia-Programmierung 16
M Spiel ruckelt Spiele- und Multimedia-Programmierung 8
Quaxli Spiel ruckelt auf neuem Rechner bzw. mit Java 6 Spiele- und Multimedia-Programmierung 13
T Java2D Spiel, beim Hinzufügen eines Bildes ruckelt das ganze Spiele- und Multimedia-Programmierung 3
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
ItundMathe1994 TicTacToe Spiel programmieren Spiele- und Multimedia-Programmierung 2
JEP1 Hilfe bei Spiel Spiele- und Multimedia-Programmierung 1
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
Leon.tr3x Mein erstes Programm/Spiel Spiele- und Multimedia-Programmierung 10
O Texas Hold'em Poker als Online-Spiel mit Freunden Spiele- und Multimedia-Programmierung 5
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
Excess Spiel abzugeben Spiele- und Multimedia-Programmierung 1
I Superhelden - Spiel Spiele- und Multimedia-Programmierung 14
E Hauptmenü und Spiel ???? Spiele- und Multimedia-Programmierung 2
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
R Interaktives Spiel Spiele- und Multimedia-Programmierung 5
L Spiel im Editor testen Spiele- und Multimedia-Programmierung 4
Jackii dispatchUncaughtException in Quiz Spiel mit GUI Layout Spiele- und Multimedia-Programmierung 6
D Textbasiertes Spiel Spiele- und Multimedia-Programmierung 8
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
L BrickBreaker Spiel Spiele- und Multimedia-Programmierung 3
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
it_is_all Dialogbox im Spiel - Text in Blöcke aufteilen Spiele- und Multimedia-Programmierung 4
F Koordinieren und Essen von Snake - Spiel Spiele- und Multimedia-Programmierung 14
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
E Möchte Spiel Programmieren Spiele- und Multimedia-Programmierung 7
S Connect6 Spiel - Code in ei Spiele- und Multimedia-Programmierung 2
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
G Welten Generierung 2D Spiel Spiele- und Multimedia-Programmierung 4
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
L Coordinate Space JavaFX 2d Spiel Spiele- und Multimedia-Programmierung 0
C Vier Gewinnt Spiel Programmiertipp Spiele- und Multimedia-Programmierung 11
N Jump and run Spiel - wo anfangen / weitermachen? Spiele- und Multimedia-Programmierung 11
K Spiel zum zuordnen von Dienstgraden und Dienstgradabzeichen Spiele- und Multimedia-Programmierung 5
M Textbasiertes Spiel programmieren Spiele- und Multimedia-Programmierung 4
T 2d-Spiel Licht Spiele- und Multimedia-Programmierung 5
S Jump 'n' Run-Spiel Kollisionserkennung Spiele- und Multimedia-Programmierung 3
T Spiel rendern Spiele- und Multimedia-Programmierung 2
Grevak Sounds im Spiel Spiele- und Multimedia-Programmierung 5
B Fehlerhafte Mob Bewegungen in Tower Defense Spiel Spiele- und Multimedia-Programmierung 2
F Spiel ähnlich wie SimCity/o.ä programmieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Kollisions abfrage bei 3D spiel? Spiele- und Multimedia-Programmierung 12
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
E GUI zum Spiel hinzufügen Spiele- und Multimedia-Programmierung 19
S 2D Spiel - Physics Spiele- und Multimedia-Programmierung 16
S 2D Spiel "Der Sprung" Spiele- und Multimedia-Programmierung 7
A 2D Spiel ohne Tiles Spiele- und Multimedia-Programmierung 10
V welche vorgehensweise beforzieht ihr bei einfachem Quizz Spiel ? Spiele- und Multimedia-Programmierung 4
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
G Methode sleepen während das Spiel weiterläuft Spiele- und Multimedia-Programmierung 3
T Spiel Überprüfung Spiele- und Multimedia-Programmierung 3
P Spiel laggt nach unbestimmter Zeit tierisch. Spiele- und Multimedia-Programmierung 27
S Hilfe bei Spiel Spiele- und Multimedia-Programmierung 6
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
W Spiel ist langsam/laggt Spiele- und Multimedia-Programmierung 18
J Ascii Spiel Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
O Vollständige Musik in Spiel einbauen (wav - Format) Spiele- und Multimedia-Programmierung 8
Y Quiz Spiel Spiele- und Multimedia-Programmierung 1
J Conways Spiel des Lebens nachprogrammiert Spiele- und Multimedia-Programmierung 1
B Spiel Programmieren, die Anfänge Spiele- und Multimedia-Programmierung 6
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
S Spiel installeren lassen und organisieren Spiele- und Multimedia-Programmierung 3
J Lichtupdate in tile-basiertem Spiel Spiele- und Multimedia-Programmierung 4
P Erstes Spiel (Strategie) Spiele- und Multimedia-Programmierung 31
J Mein erstes Spiel [Spielevorstellung] Spiele- und Multimedia-Programmierung 2
Bananabert Spiel Renderer Images und Strings Spiele- und Multimedia-Programmierung 4
N Spiel Menü error ! Spiele- und Multimedia-Programmierung 5
S Anfangsmenü mit Spiel verknüpfen Spiele- und Multimedia-Programmierung 16
D Spiel-Bilddaten auswerten Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
Devil0s Spiel laggt trotz 90 FPS (bei der Anzeige) Spiele- und Multimedia-Programmierung 9
N Webanwendung als eine Art Spiel Spiele- und Multimedia-Programmierung 8
L Korrekte Darstellung von Wasser in 2D Spiel Spiele- und Multimedia-Programmierung 4
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
J wohin mit der Logik des Spiel Spiele- und Multimedia-Programmierung 2
R Experimente mit Quaxlis Spiel Spiele- und Multimedia-Programmierung 12
W Spiel-Grundlagen selbst austüfteln: Kollisionen? Spiele- und Multimedia-Programmierung 3
Kenan89 Java 2D Spiel Spiele- und Multimedia-Programmierung 39
M Automaten Spiel Spiele- und Multimedia-Programmierung 27
J Tic tac toe spiel Neustart Spiele- und Multimedia-Programmierung 5
S 2D Spiel im Vollbild langsamer als im Fenster Spiele- und Multimedia-Programmierung 11
A TicTacToe Spiel Spiele- und Multimedia-Programmierung 3
S Verbesserungvorschläge Spiel Z Spiele- und Multimedia-Programmierung 31
S Spiel abbrechen Spiele- und Multimedia-Programmierung 3
J Greenfoot "Little Crab" Spiel Erweiterungen Spiele- und Multimedia-Programmierung 6
P Spiel HUD erstellen Spiele- und Multimedia-Programmierung 6
E Spiel neustarten Spiele- und Multimedia-Programmierung 4
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8

Ähnliche Java Themen

Neue Themen


Oben