klick auf ComboBox ohne ActionListener --> CPU ausgelaste

Status
Nicht offen für weitere Antworten.
L

little08

Gast
Moinsen,
Wir sind gerade dabei ein 2D rocket-game zu erstellen.
Alle Quelldateien findet ihr unter dem unten angegebenen link.

Das Problem ist folgendes:

Wir haben in classMenu durch ComboBoxen 'Einstellungen' geschaffen. Diese ComboBoxen haben keinen ActionListener.
Sobald wir auf eine der Boxen klicken (ohne zu speichern oder das Ergebnis irgendwie zu verwenden) und wieder ein Spiel starten sind die Raketen viel langsamer, alles ruckelt und die CPU-Auslastung ist in die Höhe geschnellt.

Warum? :bahnhof:

vielen Dank schon im Vorraus für eure Hilfe...

mfg little und aomx ;)


Quelldateien:
http://aomx.ao.funpic.de/spiel.zip
 
L

little08

Gast
ergänzung:
wir haben die cpu Auslastung genauer beobachtet. Nach ca. einer Minute hat sich das Problem gelegt und alles läuft wie gewünscht. Wir vermuten logischerweise dass intern irgendwelche Prozesse gestartet werden die den PC quasi lahm legen, haben nur keine Ahnung welche.

Pls helft uns :? müssen am Dienstag unser Projekt abgeben :autsch:

danke

aomx und little ;)
 

Siassei

Bekanntes Mitglied
Servus,

ich verstehe dein Problem nicht so ganz. Hast du eventuell ein wenig Code zum vorzeigen?

[edit] Hab da was übersehen, sorry :D [/edit]
 
G

Guest

Gast
der gesamte code ist unter dem oben angegebenen Link zu erreichen.

Ausschnitt:

Code:
	JComboBox combo2 = new JComboBox();
	JComboBox combo3 = new JComboBox();
	JComboBox combo4 = new JComboBox();

public void startSettings() {
starteSettings = true;
hideMainMenu();
if (!itemsAdded) {

			for (int i = 0; i < shoot1.length; i++)
				combo2.addItem(shoot1[i]);

			for (int i = 0; i < shoot2.length; i++)
				combo3.addItem(shoot2[i]);

			for (int i = 0; i < shootSpeed.length; i++)
				combo4.addItem(shootSpeed[i]);

			itemsAdded = true;

		}

[...] // labels

combo2.setBounds(500, 225, 100, 20);
		label.add(combo2);

[...] // labels

combo3.setBounds(500, 400, 100, 20);
		label.add(combo3);

[...] // labels

combo4.setBounds(500, 450, 100, 20);
		label.add(combo4);

		combo4.setSelectedIndex(2);

		combo2.setVisible(true);
		combo3.setVisible(true);
		combo4.setVisible(true);

Bei einem klick auf eine der Boxen schnellt die CPU-Auslastung nach oben. Könnt ihr vllt. auch besser bei euch selbst ausprobieren? alles nötige dazu findet ihr in der .zip unter dem link oben.

mfg aomx und little
 
L

little08

Gast
edit:

wir haben gerade festgestellt dass nach längerem (ca. 1 min.) spielen das gleiche Problem auftritt. Vielleicht weil das classShoots[] array zu groß wird?

mfg aomx und little
 
L

little08

Gast
noch ein update:

wie haben festgestellt dass es ohne grafiken nicht ganz so krass ist, aber trotzdem der fall. Das Problem ist mehr das Menü und die Einstellungen als das Array.
wie haben das array mit 2000 shoots vollgepunpt und die auslastung war bei 40% max. dann haben wir esc gedrückt um ins menü zu kommen und die auslastung schnellt auf 95% hoch.
Das gleiche als wir auf eine ComboBox geklickt haben. direkt auf 90 bis 95% CPU auslastung.

liegt das daran dass java gammlig ist oder daran dass unser Programm gammlig ist?^^

mfg... aomx und little...
 

Siassei

Bekanntes Mitglied
liegt das daran dass java gammlig ist oder daran dass unser Programm gammlig ist?^^
Sorry, aber es liegt wohl eher an eurem Programm :wink: Ist wohl euer erstes Programm in Java ;)

Eine CPU Ausslastung von 100% ist erstmal nicht schlecht -> die Aufgabe wird so schnell wie möglich erledigt. Zeit ist Geld. Ich gehe mal davon aus, dass ihr noch nicht sehr viel von Thread's und AWT bzw. Swing erklärt bekommen habt. Ich würde euch empfehlen eine IDE wie z.B. Netbeans (mit einem sehr guten Profiler) zu benutzen und euren Code ein wenig zu optimieren.

Tips:
- Warum habt ihr einen Timer der alle 10ms Benutzereingaben überprüft? (Listener verwenden)
- Wieso wird ein repaint() im besagten Timer "macheTask" ausgeführt?
- so wenig Code/Arbeit wie möglich in den ActionListener und Zeichenmethoden platzieren?
- Code ist sehr unübersichtlich und enthält fast keine Kommentare
- Ablaufmanagement?
z.B.
1. init. der Objekte
2. resultierende Veränderungen aus Benutzereingaben, Framerate, ... an den Objekten berechnen
3. Veränderte Objekte neu zeichnen
4. und wieder zwei Stufen zurück
 
L

little08

Gast
okay...

wie würdest du das mit repaint() dann machen?

und kann das daran liegen dass 100% cpu auslastung kommt weil man escape drückt oder weil man auf eine combobox klickt?
entsprechend laggen die ufos dann auch und sind viel langsamer...

meinst du das liegt daran oder hat das dann andere ursachen?

mfg
 
L

little08

Gast
und wie stellst du dir das mit dem (nicht-) timer vor?

was für einen listener soll man verwenden um

Code:
if (myMenu.isGameStarted())

abzufragen?

die tastatureingaben werden ja per listener abgefragt...

mfg... little
Code:
 

Siassei

Bekanntes Mitglied
Warum? Im repaint klar, so wenig wie geht, aber warum in den ActionListenern?
Wenn mich nicht alles täuscht besitzt AWT für die Abarbeitung der Events nur einen Thread. Hoffentlich :) Bekommt dieser nun ein einem Event eine größere Aufgabe zu erledigen, hängt deine komplette GUI fest.
 

Aomx

Mitglied
Hi Siassei,
so wie ich deine Posts interpretiere, vermutest du, dass die hohe CPU-Auslastung und die daraus folgende Verlangsamung ihre Ursache in dem Timer hat, welcher alle 0.01 Sekunden den ActionListener macheTask() aufruft. In dem ActionListener wird, je nachdem welche Spieloption man im Menü gewählt hat, entweder die aktuellen Positionen der Spieler oder der Schüsse (bzw der classShoot) berechnet und abschließend per repaint() ein neues Bild berechnet. Somit ist laut meiner Logik dieser auf seine wichtigsten Programmteile beschränkt - neue Werte berechnen und neues Bild zeichnen lassen.

Was würdest Du konkret löschen? Würde dann nicht das komplette Spieldesign zerfallen? Die Positionen müssen ja vor jedem Neuzeichnen berechnet werden, da ansonsten ja alles stehen bleibt...

Mfg Aomx
 

Siassei

Bekanntes Mitglied
Servus Aomx,

sorry, dass ich erst jetzt antworte. Aber das Wetter war so schön :)
Konkret? Keine Ahnung. Das Programm ist winzig und ich habs erhlich gesagt noch nicht so ganz durchgesehen. Aber eigentlich müsste es ohne Probleme laufen. Wie auf meiner Workstation (schon 4 Jahre alt).

Was mir persönlich daran nicht gefällt und deutliche Übersichtlichkeit, Wartbarkeit und Erweiterbarkeit bringen würde
- Trennung der Visuallisierungsschicht von der Programmlogik :!:
-> es wird mind. 1 Thread für das Zeichnen und einer für den Kinematischenteil benötigt

Jedoch sei eins erwähnt: Klasse Menu
Code:
public void paintIntro(Graphics g) {
        ro = 0;
        ge = 0;
        b = 0;
        /*
         * if (Math.abs(r.nextInt()%25) == 1) { ro = Math.abs(r.nextInt()%255);
         * ge =Math.abs(r.nextInt()%255); b = Math.abs(r.nextInt()%255); }
         */
        g.setColor(new Color(ro, ge, b));

        g.fillRect(0, 0, d.width, d.height);
        if (introZahler <= 5) {
        }
        if (introZahler >= 35) {
            g.setFont(new Font("Dialog", 1, 25));
            g.setColor(Color.RED);
            g.drawString("The", d.width / 2, 150);
        }
        if (introZahler >= 78) {
            g.setFont(new Font("Dialog", 1, 45));
            g.setColor(Color.RED);
            g.drawString("Game", d.width / 2 - 35, 193);
        }
        if (introZahler >= 110) {
            g.setFont(new Font("Dialog", 1, 55));
            g.setColor(Color.ORANGE);
            g.drawString("Will", d.width / 2 - 25, 250);
        }
Und das in einer Paint-Mehtode ???:L Bei jedem Paint werden etliche NEUE String-Objekte erzeugt, gezeichnet und wieder verworfen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Vier gewinnt programmieren, Klick-Reihenfolge Spiele- und Multimedia-Programmierung 2
G [LibGDX] Button Klick Probleme Spiele- und Multimedia-Programmierung 1
P JOGL Button-klick-Problem Spiele- und Multimedia-Programmierung 2
B Problem : Button-Klick bewirkt nichts Spiele- und Multimedia-Programmierung 4
S Behavior deaktivieren/aktivieren - erster Klick geht nicht Spiele- und Multimedia-Programmierung 2
E Durch Klick auf den JButton will ich die Farbe ändern? Spiele- und Multimedia-Programmierung 8
K Klick in der nähe einer Strecke Spiele- und Multimedia-Programmierung 14
E Programmierung eines 2.5D Point&Click Adventures ohne Spieleengine machbar? Spiele- und Multimedia-Programmierung 14
J Bild ohne Quallitätsverlust skalieren Spiele- und Multimedia-Programmierung 11
E Rotation um Bildmittelpunkt ohne Affine Transform!!!!! Spiele- und Multimedia-Programmierung 13
A 2D Spiel ohne Tiles Spiele- und Multimedia-Programmierung 10
S Mausklicks innerhalb eines JFrames/SWTBrowser ohne richtige Maus simulieren Spiele- und Multimedia-Programmierung 6
B Bild ohne Image auf die Festplatte streamen Spiele- und Multimedia-Programmierung 4
Devil0s 2D Stadt Generator/2D Welt speichern OHNE Tiles Spiele- und Multimedia-Programmierung 5
H zwei ints als key in map (ohne long) Spiele- und Multimedia-Programmierung 16
M Multiplayer Game mit Frontend auf HTML5 - ohne ständigen Client Request - Möglich?! Spiele- und Multimedia-Programmierung 12
S Sounds abspielen, ohne sie jedesmal neu zu laden Spiele- und Multimedia-Programmierung 8
B Bilder in GUI ändern ohne repaint() Spiele- und Multimedia-Programmierung 6
C java 3d ohne Java3d Spiele- und Multimedia-Programmierung 28
H Skalierung eines Polygons ohne das es verschoben wird Spiele- und Multimedia-Programmierung 3
K Java3D als Applet ohne Installation von Java3d Spiele- und Multimedia-Programmierung 6
M Eigene Renderengine ohne Java3D,etc. Spiele- und Multimedia-Programmierung 19
M Aktien-Spiel ohne GUI Spiele- und Multimedia-Programmierung 28
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
A JMF ohne Installation Spiele- und Multimedia-Programmierung 4
Developer_X Sound Lautstärke ohne spezifische API regulieren Spiele- und Multimedia-Programmierung 3
L JMF Player spielt mp3 nur ohne Ton Spiele- und Multimedia-Programmierung 14
M Binärbaum ohne Überlappung zeichnen Spiele- und Multimedia-Programmierung 3
T 3D-Tetris Feld neuzeichnen ohne neue Branchgroup Spiele- und Multimedia-Programmierung 18
O Java3D-Applet ohne Java3D-Runtime ausführen Spiele- und Multimedia-Programmierung 2
H Tic Tac Toe / 3 Gewinnt OHNE Applet Spiele- und Multimedia-Programmierung 9
S 3D Objekte ohne Java3D darstellen? Spiele- und Multimedia-Programmierung 10
B Sudoku Generator ohne Solerver möglich? Spiele- und Multimedia-Programmierung 20
G Farbig zeichnen ohne java.awt.Color? Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben