# Langsames laden der Maps, bitte testen



## Polli86 (18. Jan 2008)

Hallo an alle,

da ich hier schon oft weitergekommen bin mit meinem Projekt,
wollte ich mal mein Projekt hier reinstellen um zusehen ob ich 
noch Performence verbessern und Fehler ausmerzen kann.

ein kleines Problem was noch besteht ist das wenn ein Mapwechsel
folgt es relativ langsam gezeichnet wird. Vielleicht weiß da jemand 
etwas was da hilft.

Projekt bekommt ihr hier zum runterladen:

GameEditor

Zum testen benötigt ihr mind. jre1.6.0

einfach *ins /bin Verzeichniss gehn und die test.bat ausführen* damit wird es gestartet.
wenn ihr nur sehn wollt wies spiel aussieht dann einfach enter drücken,
wenn ihr Maps erstellen wollt dann müsst ihr in der Konsole "Editor" eingeben.

*im /src Verzeichniss liegen die java-codes*

könnt das projekt auch in Eclipse einfügen, inkl. Ant Build file

Würde mich auf Verbesserungsvorschläge freun, da das mein Schulprojekt werden soll
und ich schon ein bischen Arbeit da reingesteckt habe.

Vielen Dank schonmal an alle die reinschaun.

Gruß Polli

PS: die .rar hat noch ein paar dateien die unnötig oder doppelt sind, einfach nicht dran stören


----------



## Marco13 (18. Jan 2008)

Klassennamen schreibt man Groß
Fields sollten private sein
Arrays sollte man i.a. nicht mit get-Metoden nach außen führen
Die Klasse "GamePanel" scheint zu fehlen - und vermutlich ist das die wichtigste Klasse...


----------



## Poll86 (18. Jan 2008)

hallo Marco,

also wegen den Klassennamen habe ich eigentlich immer aufgepasst sie groß zu schreiben,
ich glaube ich habe nur die editor-Klasse klein geschrieben, warum weiß ich nicht 

aber wenn du die GamPanel.class aus dem bin Verzeichniss nimmst wie ich erwähnt habe dann müsste es klappen,
weiß leider nicht warum die GamePanel.class im src Verzeichniss fehlerhaft ist  habe eben mal 
die rar entpackt und der meldet bei der class nen fehler... voll banane...

aber schonmal danke fürs code anschauen, wie könnte ich denn die benannten fehler mit arrays und
fields anders lösen ?!

Gruß Polli


----------



## Marco13 (18. Jan 2008)

Ich habe es (noch) nicht laufen lassen - (hatte beim Entpacken ein paar Fehler) - selbst wenn man dann sehen würde, dass es langsam ist, könnte man den Grund schwer aufspüren, wenn die GamePanel.*java* fehlt.

Zu den Arrays: Das Problem ist, dass damit sehr viele Implementierungsdetails nach außen gegeben werden. (Evtl. sollte z.B. auch bei einigen dieser Arrays kein _schreibender_ Zugriff erlaubt sein usw...)

Statt

```
class Foo
{
    private int bar[];
    public int[] getBar() 
    { 
        return bar; 
    }
}
```
kann man z.B. schreiben

```
class Foo
{
    private int bar[];

    public int getBarCount() 
    { 
        return bar.length; 
    }

    public int getBar(int index) 
    { 
        return bar[index]; 
    }

    public void setBar(int index, int value) // NUR wenn unbedingt nötig!!!
    { 
        bar[index] = value; 
    }
}
```

Bei 2dimensionalen Feldern eben entsprechend

```
class Foo
{
    int bar[][];

    public int getBarCount() 
    { 
        return bar.length; 
    }
    public int getBarCount(int index) 
    { 
        return bar[index].length; 
    }

    public int getBar(int x, int y) 
    { 
        return bar[x][y]; 
    }
}
```

Der Vorteil ist, dass man später die Implementierung ändern kann, ohne dass die Schnittstelle sich ändert. (Das gilt in ähnlicher Form für ALLE Fields, die ALLE private sein sollten - siehe auch die FAQ).

Wenn du dich später z.B. enscheidest, statt eines Arrays eine List zu verwenden, damit du leichter Objekte hinzufügen und entfernen kannst, musst du nur in EINER Klasse 2..3 Zeilen ändern....

```
class Foo
{
    List<Integer> bar; // List statt array

    public int getBarCount() 
    { 
        return bar.size();  // Size statt length
    }

    public int getBar(int index) 
    { 
        return bar.get(index); // Get statt [...]
    }
}
```
und die übrigen Programmteile bleiben unverändert. 

Wenn du aber überall davon ausgehst, dass du dort einen Array bekommst (und vielleicht sogar (ganz schlecht: ) davon ausgehst, dass es eine Referenz auf genau DEN Array ist, der in der Klasse liegt  :autsch: ), musst du alle Stellen ändern, wo du diesen Array verwendest... Dass man in diesem Fall auch keine Zustandsänderungen registrieren könnte (z.B. für's Logging), ist nur ein weiterer von vielen Nachteilen...

```
class Foo
{
    int bar[];
    public int[] getBar() 
    { 
        return bar; 
    }
}
...
int theBar[] = foo.getBar();
theBar[4] = 123; // 'foo' kriegt nicht mit, dass der Arrayinhalt geändert wurde!
```
vs.

```
class Foo
{
    private int bar[];
    ...
    public void setBar(int index, int value)
    { 
        System.out.println("Aha, da verändert jemand was an meinem Array!");
        bar[index] = value; 
    }
}
```


----------



## Polli86 (21. Jan 2008)

Hallo marco,
danke schonmal für die Beschreibung wie ich mein Quelltext noch ändern kann 
man lernt ja immer dazu. Habe hier jetzt ne Version die Funktionieren dürfte.
Beschreibung gilt die selbe wie bei der anderen .rar Datei, also einfach nach
oben scrollen und nachschauen. Der andere Link ist nun nicht mehr nutzbar

GameEditor


Hoffe das ihr es jetzt mal probieren könnt,

Gruß Polli


----------



## Marco13 (21. Jan 2008)

Das Archiv scheint immernoch "corrupt" zu sein, und ohne die GamePanel.java. Bevor du es jetzt nochmal upladest: Du solltest ggf. einen eigenen Upload machen, der NUR die .java-Dateien enthält. Aber als ich nachgesehen habe, warum das Archiv denn 15MB Daten enthält, ist mir auch aufgefallen, dass Bilder im Format von 300x16000 (!!!) Pixeln doch eher unhandllich sind, und EIN Grund für eine Lange Ladezeit sein KÖNNTEN. Bedenke, dass EIN solches Bild alleine schon ca. 20 MB belegt - und mit 4 solcher Bilder (wo du dann evtl. munter unter-Bilder rauskopierst) ist der Rechner natürlich schon ziemlich am Rödeln....


----------



## Polli86 (22. Jan 2008)

Hi und danke für die Antwort,

also ich checks überhaupt nicht warum die scheiß datei als fehler hat?!
dat iss die genaue Kopie von meinem Eclipse-Projekt... irgendwas
läuft da schief... aber was

Ja also aus den großen Dateien werden die einzelnen Tiles in ImageArrays gespeichert
wie du vieleicht in der Ressource.java erkennen konntest. Leider weiß ich nicht wie 
ich das anders realisieren soll. Jedes Tile (32*32) aus der großen Datei einzeln abspeichern is
schon nen großer Aufwand oder gibts dafür nen tool?

Bist wohl irgendwie der einzige der mir hier hilft,
dafür schonmal ein großes Danke 

Versuche die .rar heut abend mal bei Rapidshare zu uppen, hab da nen  ProLogin

Gruß Polli


----------



## Quaxli (22. Jan 2008)

> Bist wohl irgendwie der einzige der mir hier hilft,



Ich würde ja, aber nachdem auch mein WinZip beim Auspacken immer mault, habe ich nicht weiter gemacht.  :noe:


----------



## Polli86 (22. Jan 2008)

Ok dann sorry 

aber iss voll blöd, das muss an der upload seite liegen, 
denn wenn ich die rar-datei so entpacke klappts wunderbar


----------



## Marco13 (22. Jan 2008)

@Quaxli: Mit WinRar konnte ich die nicht-Fehlerhaften Teile auspacken, aber die Wichtigste Klasse scheint zu fehlen...
@Polli86: Du könntest - wie gesagt - ggf. mal NUR die .java-Dateien hier im Forum unter "Eigene Dateien" uploaden...


----------



## Wildcard (22. Jan 2008)

Ich denke die meisten hier würden es vorziehen wenn du einfach den Eclipse Export Wizard verwendest um dein Projekt als Archiv zu exportieren anstatt mit korrupten Dateien in proprietären Formaten um dich zu werfen, die dann noch nichtmal vollständig sind  :wink:


----------



## Polli86 (22. Jan 2008)

So danke nochmal an Marco, hab jetzt die javas extra nochmal hochgeladen,
aber hier unter eigene Dateien, ich hoffe es funzt jetzt 

@ wildcard : bis jetzt hat das mit winrar immer funktioniert, irgendwas stimmt mit der upload seite
                  nicht, denn wenn ich die rar nach dem packen ausführe sind die Dateien in top zustand.
                  naja jetzt dürfte es aber funzen 

PS: ich verteile keine korrupten Dateien 

edit: der link  hab gedacht das geht über den Nickname oder so 

http://www.java-forum.org/de/userfiles/user12583/GameEditor.rar


----------



## Quaxli (22. Jan 2008)

Wenn Du uns jetzt noch den Link auf Deine eigenen Dateien mitteilst gucken wir auch nach


----------



## Marco13 (22. Jan 2008)

Hm. habs nur mal kurz angestartet.... Wenn man mit java Xmx1000m startet (ansonsten eben OutOfMemory) dann dauert das Laden hier gerade mal 3 Sekunden... Was heißt "langsam"?


----------



## Polli86 (22. Jan 2008)

Also ich habs immer mit 256m oder 512m gestartet, hat gereicht.
(mein Arbeitsrechner gibt auch nicht mehr her  )

Hab nur gedacht da es ja ne 2D anwendung ist, wäre es 
zu langsam. Hatte irgendwie gedacht man könnte die Maps 
die als nächstes kommen evtl. vorzeichnen damit der Mapwechsel
schneller geht, wusste aber nicht wie. 
Aber anscheinend sind 3 Sek. nicht zu viel


----------

