Portal > Foren > Java > Desktop-Applikationen und Grafik > Hintergrundbild in einem Spielchen
Antwort
 
Themen-Optionen
Alt 08.05.2008, 10:49 Nach oben    #1
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard Hintergrundbild in einem Spielchen

Ich bin dabei ein kleines Spielchen zu programmieren.

Ich hab also meine Playground-Klasse welche von Canvas erbt. Der hab ich ein JPanel gegeben.
Dann hol ich mir die Graphics und fang an meine Figuren darauf zu zeichnen.

Wenn ich nun ein Hintergrundbild hinzufügen will, dann steigt meine CPU-Last auf 30% und das obwohl außer Background nur eine kleine Figur über den Bildschirm läuft.

Ich zeichne den Background praktisch jedes mal neu, so wie die Figur. Daher vermute ich, dass das 640x480 PNG-Bild des Hintergrunds daran schuld ist. Ohne den Hintergrund läufts ohne merkbare CPU-Last.

Hat jemand eine Idee wie ich das anders lösen könnte?

PS: Das laden der Grafik selbst hab ich über ne Hashmap schon gelöst, sprich er lädt das Bild einmal und holt es dann nur noch aus dem Speicher, daran sollte es also auch nicht liegen.

Für jede Idee dankbar!
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.05.2008, 10:59 Nach oben    #2
Jan
Erfahrener Benutzer
 
Benutzerbild von Jan
 
Registriert seit: 08.01.2006
Ort: Mannheim
Beiträge: 483
Standard

Zwar keine Ahnung von Java, aber wenn du ein weiteres Canvas einfach darüber legst un nur das neu zeichnen lässt?
__________________
Jan
info.malte-gerth.de
=================================
Nutzt bitte lieber Jabber statt ICQ:
malte.gerth@jabber.cz
Jan ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.05.2008, 09:12 Nach oben    #3
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Zeichne den Hintergrund in einen Puffer.

Es gibt da beispielsweise BufferedImage. Du kannst auch im Paint nur die Teile neu zeichnen, die betroffen sind, also aus deinem Bild-Puffer erst das zeichnen, wo de Spielfigur ware (ist ja auch ein deutlich kleinerer Ausschnitt) und dann die Spielfigur selbst an der neuen Position neu zeichnen.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.05.2008, 15:25 Nach oben    #4
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Ich hab die Bilder schon als BufferedImage in einer Hashmap, spare mir also das Neuladen der Bilder.
Hast du irgendwo ein Beispiel, wie ich nur ein Teil des Bildes neu zeichnen lassen kann?
Darüber hatte ich ja auch schon nachgedacht...
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.05.2008, 06:43 Nach oben    #5
Erfahrener Benutzer
 
Benutzerbild von Gottzilla
 
Registriert seit: 02.02.2005
Beiträge: 523
Standard

Zeig mal Code ...

Generell:

- nicht AWT (Canvas) und Swing (JPanel) mischen
- kein "Graphics-Objekt holen", sondern in der paint bzw. paintComponent Methode zeichnen
Gottzilla ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.05.2008, 23:51 Nach oben    #6
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Ok
Also ich habs erstmal hinbekommen, da ich mit subimage() recht erfolgreich nur kleine Teile neu malen konnte.

Was kann ich denn anstelle von Canvas nutzen? Weil eigentlich wollte ich doch Swing nutzen. Oder wäre für ein Spielchen doch eher AWT geeignet?

Falls mal wer wirklich in den Sourcecode schauen will, ist im Anhang.
Es funktioniert bisher nicht viel, aber man kann grob erkennen, was es mal werden soll

Ich hab als "Leitpfaden" übrigens ein Space Invader Tutorial verwendet, welches aber leider nicht mehr wirklich uptodate ist.
Angehängte Dateien
Dateityp: zip src.zip (11,5 KB, 1x aufgerufen)
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.05.2008, 07:00 Nach oben    #7
Erfahrener Benutzer
 
Benutzerbild von Gottzilla
 
Registriert seit: 02.02.2005
Beiträge: 523
Standard

Statt Canvas kannst du z. B. ein einfaches JPanel verwenden. Wenn du Swing (light) und AWT (heavy) mischst, kann es zu bösen Überlagerungen und Darstellungsfehlern kommen.

Hier findest du ein sehr gutes Tutorial http://www.ralf-bauer.org/java/tutorial/Tutorial.zip

Schau erstmal, ob du damit zurecht kommst. Falls nicht, werde ich mir deinen Code mal genauer ansehen (hab ihn bis jetzt nur überflogen, ist aber für ein einfaches 2D Game und für den ersten Versuch viel zu kompliziert gehalten ).

Geändert von Gottzilla (19.05.2008 um 07:18 Uhr).
Gottzilla ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hintergrundbild in einer JTextArea VipViper2000 Desktop-Applikationen und Grafik 16 14.03.2007 23:43


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:24 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44