zu viele Objekte, Problem mit neuzeichnen.

Status
Nicht offen für weitere Antworten.

Fazzoletti9

Mitglied
Guten Morgen,

ich bräuchte mal eure Professionelle Hilfe. Ich habe das Tutoriel von Quaxli komplett durchgearbeitet hat auch super geklappt (danke Quaxli). Jetzt bin ich dabei den ersten teil (das Hubschrauber Programm) so zu verändern das ich ein Programm bekomme was das macht, was ich möchte. (ich hoffe das ist in Ordnung) Ich habe das auch alles so hingekommen wie ich wollte aber ich habe ein Problem mit diesem Stückchen Code:

Java:
public void mauerBauer(){
		horst = new WallBuilder(tmp);
		BufferedImage[] wall = this.loadPics("pics/Mauer2.gif",1);
		for ( int zeile = 0; zeile < horst.getWall().length; zeile++ ){
		      for ( int spalte=0; spalte < horst.getWall()[zeile].length; spalte++ )
		        {    
		if(horst.getWall()[zeile][spalte]){
		mauer= new Wall(wall, zeile*8+20, spalte*8+20 ,100,this);
		}
		actors.add(mauer);
	}

Diese Methode ist dafür da mit ein Labyrinth zu zeichnen aus einem Bool Array welches ich vorher generiert habe. Funktioniert auch alles super, nur leider ist es so, dass das Array locker 120x120 Felder groß ist und davon geschätzt 50% mit Objekten gefüllt sind. Und diese dann bei jeden Durchlauf Zyklus neu gezeichnet werde. Und nach meinem Verständnis ist das ein wenig zu viel Arbeit für meinen Computer. Deswegen meine Frage: Gibt es eine einfache Möglichkeit das Programm umzuschreiben, dass Die Mauerobjekte nicht bei jedem Zyklus neu gezeichnet werden sondern das die irgendwie "statisch" sind? Ich glaube das das zweite Programm aus dem Tutoriel dass irgendwie macht, aber leider habe ich bei dem Zweiten Teil nicht wirklich verstanden was ich eigentlich gemacht habe. Wenn ihr noch mehr von meinem Code braucht, müsst ihr dass sagen bin Neuling Programmierer.

Mit Freundlichen Grüßen
Ben
 

Quaxli

Top Contributor
Wird das 120x120-Array komplett angezeigt oder nicht?

Falls ja, könnte man darüber nachdenken, daß Labyrinth in ein BufferedImage zu speichern und nur das eine Bild zu malen.

Falls nein, solltes Du den 2. Teil nochmal lesen. :) Dort habe ich beschrieben, wie man vorgehen kann, um nur das zu zeichnen, was momentan angezeigt werden soll. Wenn Du hier Probleme hast, sag uns, wo genau.

In jedem Fall ist etwas mehr Input möglich. Schreib doch noch mal ein paar Details.
 

Fazzoletti9

Mitglied
Jau das Array wird Komplett angezeigt, dass ist nicht das Problem. Das Problem ist das bei so großen (aber auch schon 40x40 Arrays) die Bildwiederholungsrate ins Bodenlose sinkt.
Das Labyrinth in ein eigenes Bild zu speichern hört sich gut an, nur leider weiß ich überhaupt nicht wie ich das machen könnte. Und zusätzlich nehme ich dann mal an müsste ich dann auch wieder ein Zweites "BufferedImage" um die Kollisionsabfrage zu realisieren (Will mit einem Männchen durch das Labyrinth durch gehen können) Halt so wie in dem Zweiten teil von deinem Tutoriel.
Also wenn ihr mir da mit dem "bufferedImage" Helfen könntet wäre ich euch zu großem Dank verpflichtet.
MfG
Ben
 

Steev

Bekanntes Mitglied
Wie Quaxil schon geschrieben hat:

Ich würde einfach alle nötigen Bilder bei dem Start deines Programmes in ein BufferedImage rendern und dies dann immer für die Renderung verwenden.

Hilfe:

int width = deinArray.length * tileWidth;
int heigth = deinArray[0].length * tileHeight;
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = img.createGraphics();

// Hier kann dann gezeichnet werden:
for (int x = 0; x < deinArray.length; x++)
for (int y = 0; y < deinArray[0].length; y++)
g2.drawImage(tileReference[deinArray[x][y]], x * tileWidth, y * tileWidth, null);
 

newcron

Aktives Mitglied
Das Problem, dass du da hast ist ganz typisch für fast alle spiele (und auch anderen grafikintensiven Applikationen). Den gesamten Hintergrund in ein Bild zu rendern ist nicht unbedingt eine gute Lösung: erstens verbraucht das ne Menge Speicher und zweitens kommst du damit in Probleme, wenn die Aktuelle Karte größer als der Bildschirm ist - dann verbraucht der Ansatz nämlich erst recht viel speicher...

Was du tun musst ist, dir vor jedem Zeichendurchlauf zu überlegen, welche Teile des Bildschirms sich verändert haben. Hat sich beispielsweise nur deine Hauptfigur bewegt, musst du nur die alte Position (wo vorher die Figur war) und neue Position neu zeichnen. Den Rest kannst du dir sparen.

Swing unterstützt das bereits. Es gibt eine repaint() methode, die die neu zu zeichnende Fläche als Parameter bekommt (x,y, breite, höhe). Diese rufst du einfach statt der normalen Repaint Methode auf. In der Paint Methode musst du dann den Clipping bereich mittels g.getClip() abfragen und brauchst dann nur das zeichnen, was sich darin befindet. Eine Lösung, die dir hierbei helfen könnte, wären Quadtrees. Damit organisierst du deine Spielszene in logische bereiche und kannst sehr einfach entscheiden, was neugezeichnet werden muss.
 

Steev

Bekanntes Mitglied
Korrekt währe es, hier wie bei einer TileMap zu verfahren:

Also errechnen, welcher Teil der Map gerendert werden muss. Dann würde ich, wie oben schon geschrieben, die einzelnen Tiles in ein BufferedImage zeichnen und dieses BufferedImage auf den Bildschirm zeichnen.
Hierbei ist es, wie newcron schon geschrieben hat, wichtig, dass berechnet wird, welche Tiles sich geändert haben. Also solltest du das BufferedImage mit den Tiles nur dann neu zeichnen lassen, wenn sich der Inhalt geändert hat. Damit wird das Neuzeichnen der einzelnen Tiles nur auf das nötigste beschränkt.
Um den Zeichenvorgang noch weiter zu beschleunigen, würde ich dann berechnen, um wie viele Tiles sich die Ansicht zu der vorherigen Ansicht verschoben hat. Dann würde ich den bisherigen Inhalt des BufferedImages um die Anzahl der verschobenen Tiles verschieben und nur die neuen Tiles rendern. Damit stellst du sicher, dass nur das nötigste gerendert wird.
Falls du noch fragen hast, kannst du dich ja noch mal melden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Zu viele Objekte - OutOfMemoryError Spiele- und Multimedia-Programmierung 3
J Problem bei der GUI - Zu viele Spielbretter Spiele- und Multimedia-Programmierung 2
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
Kim_Dotcom Objekte synchronisieren Variablen Spiele- und Multimedia-Programmierung 19
K Bewegte Objekte per Mausklick entfernen Spiele- und Multimedia-Programmierung 3
N Helden: Verschiedene Objekte oder konkrete Unterklassen Spiele- und Multimedia-Programmierung 1
gamebreiti Wie Objekte versenden und empfangen Spiele- und Multimedia-Programmierung 4
J Objekte übereinander lagern Spiele- und Multimedia-Programmierung 1
L JavaFX Objekte bewegen Spiele- und Multimedia-Programmierung 3
Q Mehr objekte darstellen als Pixel vorhanden Spiele- und Multimedia-Programmierung 6
lord239123 Minecraft Nur sichtbare Objekte rendern Spiele- und Multimedia-Programmierung 5
Z Objekte animieren mit Threads Spiele- und Multimedia-Programmierung 4
M Objekte verschwinden durch Explosion Spiele- und Multimedia-Programmierung 2
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
A JME3 will Blender/j3o Objekte nicht einladen Spiele- und Multimedia-Programmierung 3
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
T JOGL 2D Objekte drehen rotate Spiele- und Multimedia-Programmierung 4
D Objekte in weiter Entfernung flimmern / flackern Spiele- und Multimedia-Programmierung 2
G 3D-Objekte / Grafiken gesucht Spiele- und Multimedia-Programmierung 6
S Klickbare Objekte im Spiel Spiele- und Multimedia-Programmierung 8
T Java3D: Objekte platzieren und entfernen? Spiele- und Multimedia-Programmierung 7
W Rotation aller Objekte einer 3D-Szene Spiele- und Multimedia-Programmierung 8
L 3D Objekte in Java importieren Spiele- und Multimedia-Programmierung 2
M Java3D Picking - falsche Objekte werden gepickt Spiele- und Multimedia-Programmierung 3
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
T Selbst-handelnde Objekte im Client-Server Betrieb Spiele- und Multimedia-Programmierung 9
M Java3D Objekte entfernen und hinzufügen Spiele- und Multimedia-Programmierung 10
aze Java 3d Objekte überdecken 2d Komponenten Spiele- und Multimedia-Programmierung 7
aze Java 3D : 3D Objekte speichern und später wieder einlesen Spiele- und Multimedia-Programmierung 9
D Halbdurchsichtige Objekte Spiele- und Multimedia-Programmierung 17
M Alle Objekte aus der SimpleUniverse entfernen Spiele- und Multimedia-Programmierung 2
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
B Position der ViewingPlatform und Visueller Objekte setzen Spiele- und Multimedia-Programmierung 3
B Isometrischer KartenEditor mit Animierten Objekte Spiele- und Multimedia-Programmierung 3
J 1x Punktlicht auf 5 Objekte benutzen Spiele- und Multimedia-Programmierung 17
F Maussteuerung-gezeichnete Objekte Spiele- und Multimedia-Programmierung 4
B Objekte zur Laufzeit verändern Spiele- und Multimedia-Programmierung 3
A durch Objekte hindurchzoomen Spiele- und Multimedia-Programmierung 2
S 3D Objekte ohne Java3D darstellen? Spiele- und Multimedia-Programmierung 10
L Objekte zentrieren Spiele- und Multimedia-Programmierung 2
G zur laufzeit objekte einfügen Spiele- und Multimedia-Programmierung 3
G 2D-Objekte werden nicht vollständig gezeichnet Spiele- und Multimedia-Programmierung 4
conan2 Objekte in richtiger Z-Reihenfolge zeichnen Spiele- und Multimedia-Programmierung 2
A Objekte nacheinander zeitgesteuert rotieren lassen Spiele- und Multimedia-Programmierung 4
H 3D Objekte ausfüllen Spiele- und Multimedia-Programmierung 3
T 3D-Objekte Laden Spiele- und Multimedia-Programmierung 3
D 2D Graphic Objekte in ein JPanel einfügen Spiele- und Multimedia-Programmierung 2
G Zugriff auf einzelne Objekte Spiele- und Multimedia-Programmierung 12
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
C Plugin Problem Spiele- und Multimedia-Programmierung 2
J JLayer Problem Spiele- und Multimedia-Programmierung 1
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G LIBGDX Texturen Problem Spiele- und Multimedia-Programmierung 1
G LIBGDX Problem beim resizen des Frames Spiele- und Multimedia-Programmierung 3
C AutoClicker Problem Spiele- und Multimedia-Programmierung 2
S OOP Logik Problem Spiele- und Multimedia-Programmierung 5
G LIBGDX Viewport Problem Spiele- und Multimedia-Programmierung 3
J Problem mit Game Of Life Spiele- und Multimedia-Programmierung 3
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
C Minecraft Minecraft Plugin Problem Spiele- und Multimedia-Programmierung 17
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
V Problem mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
E A-Stern Algorithmus Problem und Implementierung einer Map Spiele- und Multimedia-Programmierung 6
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
W Generelles Problem: Entscheidungsfindung Spiele- und Multimedia-Programmierung 4
T Problem bei Kollisionsabfrage Spiele- und Multimedia-Programmierung 4
C Vier Gewinnt Problem mit Ordnerstruktur Spiele- und Multimedia-Programmierung 2
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Sound Problem Spiele- und Multimedia-Programmierung 3
T Problem beim Aufbau des Spielfelds Spiele- und Multimedia-Programmierung 18
M Sound Engin Problem 2 Spiele- und Multimedia-Programmierung 2
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
0 Boxen übereinander stapelt Problem Spiele- und Multimedia-Programmierung 5
D Textfield im Game ,Problem: while-Schleife Spiele- und Multimedia-Programmierung 3
R 2D platformer - enemy damage -> TIMER PROBLEM Spiele- und Multimedia-Programmierung 3
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
B Minecraft mehr Ram zuweißen Problem Spiele- und Multimedia-Programmierung 0
K Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 3
Y Problem mit repaint() in run() Spiele- und Multimedia-Programmierung 2
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
T Problem mit Kollisionsabfrage der NPC Spiele- und Multimedia-Programmierung 1
J Minecraft Problem mit dem JRE - Minecraft Spiele- und Multimedia-Programmierung 3
TheSorm Problem mit 2 classen NullPointerException Spiele- und Multimedia-Programmierung 1
S Problem mit 4 gewinnt(MinMax Algorithmus) Spiele- und Multimedia-Programmierung 2
N Problem in der Main.class Spiele- und Multimedia-Programmierung 1
J Blöcke, Hitboxen, Koolisionsabfrage - Problem Spiele- und Multimedia-Programmierung 8
S Problem mit 3d-Polygon Spiele- und Multimedia-Programmierung 2
A Problem mit Sound Spiele- und Multimedia-Programmierung 5
C Nxt Duell Problem Spiele- und Multimedia-Programmierung 4
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben