# Performancetest: ISO-Editor



## Steev (24. Okt 2009)

Hallo liebe Forengemeinde,

ich bin gerade dabei ein kleines isometrisches Strategiespiel zu schreiben. Weil ich keine Lust habe, meine Karten über ein Notepad zu erstellen habe ich einen kleinen Editor geschrieben, mit dem ich die Maps erstellen kann. Später will ich diesen Editor dann mit dem Spielchen ausliefern, damit sich die Spieler auch selbst Karten erstellen können. Daher will ich nun wissen, ob der Editor auch auf anderen Systemen / Plattformen performant funktioniert.







Den Editor könnt Ihr euch unter folgendem Link herunter laden:

http://steev.st.ohost.de/ISOEditor/ISOEditorV1.rar

Das RAR-Archiv müsst Ihr dann nur noch irgendwo entpacken und die enthaltenen JAR-Datei ausführen.
In dem Archiv ist auserdem schon eine Test-Map enthalten. Die kann einfach über den "Laden-Button" geladen werden.

Ich hoffe das der Editor bei allen funktioniert.


----------



## musiKk (24. Okt 2009)

/tmp/foo/ISOEditorV1$ java -jar ISOEditorV1.jar 
Exception in thread "main" java.lang.RuntimeException: No tilepath found!
	at com.steevcitiy.editor.PlugInLoader.loadPlugIns(PlugInLoader.java:24)
	at com.steevcitiy.editor.Editor.loadPlugIns(Editor.java:183)
	at com.steevcitiy.editor.Editor.startEditor(Editor.java:75)
	at com.steevcitiy.editor.Editor.<init>(Editor.java:70)
	at com.steevcitiy.editor.EditorMain.main(EditorMain.java:20)

Java 6, Ubuntu 9.04.


----------



## Steev (24. Okt 2009)

Hast du den Ordner "editor" in denselben Ordner kopiert, wie die JAR-Datei?

Probier vieleicht mal folgenden Link, vieleicht funktioniert das ja besser bei dir.

http://steev.st.ohost.de/ISOEditor/ISOEditorV1_1.rar

Ich glaube das Problem liegt an folgendem Code:

[Java]File fTiles = new File(editor.getTilePath());
if (!fTiles.isDirectory())
  throw new RuntimeException("No tilepath found!");

File[] fTile = fTiles.listFiles(new FilenameFilter() {
  @Override
  public boolean accept(File dir, String name) {
    name = name.toLowerCase();
    return name.endsWith(".ini");
  }
});

for (File f : fTile) {
  [...]
}[/Java]

Der Code soll ini-Dateien in dem angegebenen Ordner suchen und diese dann auslesen.


----------



## Gastredner (24. Okt 2009)

Also, Performance-mässig läuft der Editor auf XP SP3 sehr gut.
Was mir nur auffiel: Dem Brush-Editor fehlten die Icons der Buttons, was zu purem Rätselraten bezüglich der Funktion führte. Sollte man vielleicht durch Tooltips ergänzen.
Desweiteren wird beim Versuch, etwas anderes als eine Karte in den Editor zu laden, folgende Exception:

```
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: JOptionPane: type must be one of JOptionPane.ERROR_MES
SAGE, JOptionPane.INFORMATION_MESSAGE, JOptionPane.WARNING_MESSAGE, JOptionPane.QUESTION_MESSAGE or JOptionPane.PLAIN_MES
SAGE
        at javax.swing.JOptionPane.setMessageType(Unknown Source)
        at javax.swing.JOptionPane.<init>(Unknown Source)
        at javax.swing.JOptionPane.showOptionDialog(Unknown Source)
        at javax.swing.JOptionPane.showMessageDialog(Unknown Source)
        at javax.swing.JOptionPane.showMessageDialog(Unknown Source)
        at com.steevcitiy.components.BrushEditor$12.actionPerformed(BrushEditor.java:261)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
```


----------



## Marco13 (24. Okt 2009)

Wenn du's nochmal als JAR oder ZIP hochlädst, kann ich's an der alten Kiste, an der Ich gerade sitze, einen echten Härtetest unterziehen


----------



## Steev (24. Okt 2009)

Das mit den Icons habe ich wieder behoben. Ich habe aus versehen den Pfad gelöscht,...

Die Fehlermeldung ist höchstwahrscheinlich auf deine Java-Version zurückzuführen, ich verwende jdk_1.6.0_11


----------



## Steev (24. Okt 2009)

@Marco13:
Ich habe die Version 1_1 nochmal hochgeladen. Viel Spaß 

Ich denke, dass die Performance erst in die Knie gehen wird, wenn du viele Overlays (Strand, usw.) und gleichzeitig viele verschiedene Bäume verwendest.


----------



## Marco13 (24. Okt 2009)

Ja, müßte dann hier bei Gelegenheit mal WinRAR installieren...


----------



## Steev (24. Okt 2009)

Ich habe dir die Version 1.1 nochmal als ZIP hochgeladen:

ftp://ftp.steev.st.ohost.de/ISOEditor/ISOEditorV1_1.zip

http://steev.st.ohost.de/ISOEditor/ISOEditorV1_1.zip


----------



## javimka (24. Okt 2009)

Windows 7, 64-Bit, Core2 Duo 2.5 GHz, 4GB RAM, java 1.6.
Bei mir funktioniert es super. Die Auslastung pendelt zwischen 18 und 25%, auch wenn ich wie wild zeichne oder auf der Karte rumscrolle übersteigt es nicht 25% und sieht flüssig aus. Ich habe einige Strassen und Landstriche gezeichnet und der Speicherbedarf liegt nun bei 60MB, also kein Problem.
Die Graphik sieht übrigens hervorragend aus, ich frue mich ja schon auf das Erscheinen der ersten Spiel Version


----------



## Steev (24. Okt 2009)

javimka hat gesagt.:


> Die Graphik sieht übrigens hervorragend aus, ich frue mich ja schon auf das Erscheinen der ersten Spiel Version



Danke für die Blumen 

Das Erscheinen kann allerdings noch etwas dauern, weil ich vorerst noch einige Modifikationen an der Engine vornehmen will. Dankeschön schonmal für´s testen.

Jetzt ist halt nur die Frage, ob der Editor auch unter Linux läuft.


----------



## Final_Striker (24. Okt 2009)

windows xp sp3, core2 duo 2,4 ghz, 4gb ram

läuft auch ihne probleme


----------



## Marco13 (24. Okt 2009)

WinXP, Athlon 1.4 GHz, GeForce2 - Läuft im Prinzip problemlos - könnte natürlich schneller sein, aber ob sich das auf den Rechner oder das Programm bezieht, weiß ich jetzt nicht 

Ansonsten:
- Das Layout der Fenster könnte am Anfang gleich z.B. wie im Screenshot gemacht werden
- Ist der Standard-Hintergrund absichtlich animiert? Wieso?
- Eine Hilfe/Anleitung wäre nicht schlecht - Die Icon-Buttons sind schön, aber nur, wenn man weiß, was sie bedeuten  Hat eine Weile gedauert, bis ich so einen Turm setzen konnte....
- Wenn man das Hauptfenster vergößert oder verkleinert stimmt das "aspect ratio" nicht mehr (d.h. wenn man es z.B. sehr breit macht, wird alles horizontal verzerrt)

Ansonsten: :toll:


----------



## Steev (24. Okt 2009)

Hallo Marco, dankeschön, dass du dir die Mühe gemacht hast, das zu testen.

Dass das Seitenverhältnis durch die Skalierung nicht beibehalten wird, ist vorerst noch "standard" meiner Engine für isometrische Perspektiven. Ich arbeite allerdings zur Zeit daran, dass bei einer Skalierung einfach die Kameragröße mit skaliert wird. Dass würde dann bedeuten, dass man mehr sieht, wenn man das Fenster größer zieht. Zur Zeit funktioniert dies aber nur für 2d-Perspektive.

Der Hintergrund ist absichtlich synchron animiert, weil er Wasser darstellen soll. Falls das stört, kann ich das natürlich auch abändern.

Mit dem Layout bin ich mir noch nicht im klaren, wie ich das ganze final machen will, man könnte die ganzen Elemente ja auch mit im Fenster aufnehmen. Das Problem was ich dabei nur sehe ist, dass man dann auf kleineren Bildschirmen fast keine Spielfläche mehr zur Verfügung hat, weil alles mit irgendwelchen Komponenten überdeckt wird. Hier bin ich für jede Anregung dankbar.


----------



## javimka (24. Okt 2009)

Ich würde auf jeden Fall alles in dasselbe Fenster legen. Im Moment hat man nämlich 5 Tasks in der Taskleiste, das stört ein bisschen. Um die kleinen Bildschrime würde ich mir weniger Sorgen machen. Lieber ein schönes Design für 90% aller Anwender, als ein halbschönes für 99% 
Hilfreich könnte die JSplitPane sein, mit der kann sich jeder den Platz nach eigenem Belieben einteilen.

Lass dir bloss Zeit bis zur Veröffentlichung, mach dir da ja keinen Zeitdruck, das wäre schade


----------



## Marco13 (24. Okt 2009)

Ach so - wenn das Wasser ist, ist das mit der Animation ja plausibel (und dass ich da keine Bäume draufsetzen konnte  ). Vielleicht sollte das lieber blau sein...


----------



## Steev (24. Okt 2009)

Blaues Wasser gibt es ja auch, ich habe einfach einen ganzen Zoo von Wasser-Tilesets gemacht, damit man die verschiedenen Abstufungen der Wasserfarbe machen kann.

Bei mir sieht das Wasser eigendlich recht blau aus. Manchmal liegt das auch an dem Monitor, den man verwendet. Ich habe einen 25" Monitor mit einer recht guten Farbwiedergabe. Da ist das Wasser blaugrün. Wenn ich mir das Wasser dann auf meinem Notebook mit Energiespaarmodus ansehe, dann ist das Wasser nicht so gut als Wasser zu erkennen.

Deshalb habe ich immer probiert so zu zeichnen, dass man auf beiden Systemen erkennen kann, was es sein soll.
Ich weis halt nicht so recht, woran ich mich da orientieren soll.

PS: An alle Linux-, Apple- oder Sonstwas-User: Funktioniert der Editor bei euch jetzt auch?


----------



## Steev (25. Okt 2009)

Hallo, ich schon wieder 

Ich habe jetzt schon mal die Änderung hinsichtlich der Kameragröße ausprogrammiert. Wenn man jetzt die Fenstergröße verändert, dann wird die Kameragröße automatisch angepasst. Das Seitenverhältnis wird dabei nicht mehr verändert. Die Veränderung der Kameragröße ist zusätzlich auf der Minnimap ersichtlich.

Die neue Version steht ab sofort unter folgendem Link zum Download bereit:

http://steev.st.ohost.de/ISOEditor/ISOEditorV1_2.zip

Ich hoffe das auch diese Version noch bei euch allen funktioniert, da ich einige Änderungen in der Tiefe der Engine (Renderlogik und Bildressourcenverwaltung) durchgeführt habe.

Insbesondere würde mich interessieren, ob einer von euch Linux-Usern irgendeine der Versionen zum Laufen bringen konnte.


----------



## musiKk (25. Okt 2009)

Ne, gleicher Fehler. Du gibst die Dateipfade mit [c]\\[/c] an. Mach daraus einfach mal einen einfachen [c]/[/c]. Das klappt auch unter Windows.

Unter Windows XP habe ich das aber auch mal ausprobiert, da ging es wie bei allen anderen auch. Mir gefällt die Grafik auch gut, hat mich an Rollercoaster Tycoon erinnert, welches ich viel gespielt habe. Ich bin gespannt, was daraus noch alles wird.


----------



## Marco13 (25. Okt 2009)

Die Frage ob \\ oder / erübrigt sich mit File.pathSeparator


----------



## Steev (26. Okt 2009)

Oh, es stimmt tatsächlich, das ich die Dateipfade mit \\ angegeben habe. 

Ich werde das gleich mal abändern und nochmal hochladen...

Dankeschön für den Tipp


----------



## byte (26. Okt 2009)

Marco13 hat gesagt.:


> Die Frage ob \\ oder / erübrigt sich mit File.pathSeparator



/ wird automatisch in File.pathSeparator übersetzt. Man kann also problemlos / für jedes OS benutzen.


----------



## Steev (26. Okt 2009)

So, ich habe jetzt die nötigen Änderungen eingebaut und nochmal eine Version hochgeladen.

Folgende Version sollte dann auch unter Linux funktionieren.

http://steev.st.ohost.de/ISOEditor/ISOEditorV1_3.zip

Stimmt die Perspektive jetzt auch beim Skalieren des Fensters?
Ist die Wasserfarbe so annehmbar?


----------



## HoaX (26. Okt 2009)

Also hier unter Ubuntu 9.04 64bit, Sun Java 1.6.0_16 hab ich mit der 1.3 das Problem, dass ich nicht sehe was ich gerade gemacht hab auf der Karte, d.h. das Fenster aktualisiert sich nicht, auch nicht wenn ich scrolle. Ich sehe meine Änderungen allerdings auf der Minimap. Erst wenn ich das Editorfenster in der Größe ändere wird der Inhalt neu gezeichnet.

Edit: Wo findest man Wasser? Tooltips zu den ganzen Knöpfen und Symbolen wären nicht schlecht ...


----------



## Steev (26. Okt 2009)

Hi, danke für die Mühe die du dir gemacht hast, Wasser findest du im TileChooser.
Das mit dem aktualisieren des Fensters ist komisch, ich habe einen Panel, in den ich zeichne. In diesem Panel habe ich dann einen Thread, der die repaint-Methode aufruft.
Keine Ahnung warum das bei dir nicht geht...
Das blöde ist nur, dass ich kein Linux-Testsystem habe, bei dem ich das mal nachstellen könnte...
Hat jemand eine Idee, warum der Fehler auftreten könnte?


----------



## javimka (26. Okt 2009)

Könntest du dir nicht ein virtuelles Linux installieren? Dazu brauchst du z.B. VMware (nimm nicht MS Virtual PC). Mit dieser Software kannst du innerhalb deines Windows einen virtuellen Computer starten und Linux drauf installieren, ohne dass deinem Windows ein Haar gekrümmt würde.
Sonst änderst du jetzt was bei dir, jemand muss es wieder testen und dann funktioniert es doch immer noch nicht, also musst du wieder drauf losraten... wäre aufwendig ^^


----------



## Steev (26. Okt 2009)

Das weis ich, das Problem ist nur, dass ich nichts herunterladen kann, da ich nur per Web&Walk-Stick im Internet bin.


----------



## Steev (26. Okt 2009)

Hm, einen Verdacht warum das unter Linux nicht läuft habe ich schon. Ich erstelle beim Starten ein VolatileImage in das ich dann renderer. Wird die Größe des Panels verändert, so wird ein neues VolatileImage erstellt. Ansonsten wird das bestehende VolatileImage zur Renderung verwendet.

Aber das müsste doch eigendlich auch unter Linux funktionieren. ContentLost frage ich immerhin ab...

Hat da jemand Erfahrungen?


----------



## Noctarius (26. Okt 2009)

Hab neulich in nem Buch etwas zum Thema Linux und VolatileImage gesehen, da gabs ne Besonderheit. Müsste ich aber Morgen noch mal nachlesen.


----------



## Steev (26. Okt 2009)

Das wäre nett, ich weis nur, dass es da in einer der früheren JDKs mal einen Bug unter Linux gab. Ich dachte aber eigendlich, dass der behoben wäre.

Hier mal ein Code-Ausschnitt aus dem Rendermodell:
[Java]
    /**
     * Erstellt nach Bedarf ein VolatileImage-Objekt um den GrabageCollector
     * nicht unnötig zu belasten.
     * 
     * @param comp
     *            die Komponente die das VolatileImage initialisieren soll
     * @param width
     *            die Breite des VolatileImage
     * @param height
     *            die Höhe des VolatileImage
     */
    private synchronized void calcVolatileImage(Component comp, int width, int height) {
        if (renderedMap1 == null || renderedMap1.getWidth() != width || renderedMap1.getHeight() != height || renderedMap1.contentsLost()) {
            renderedMap1 = comp.createVolatileImage(width, height);
            graphics1 = renderedMap1.createGraphics();
        }
    }

    // Implementierte Methoden
    public synchronized VolatileImage render(Component comp) throws Exception {

        // Speichern des aktuellen Camera-Zustandes
        saveCameraData();

        // Berechnen eines Bildes im Grafikkartenspeicher
        calcVolatileImage(comp, ccam.getWidth(), ccam.getHeight());

        // Rendern der Stage der Camera
        try {
            camera.getStage().render(graphics1, ccam, renderedMap1, null);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Zeichnen der Effekte
        for (Effect effect : camera.getEffects())
            if (effect != null) {
                graphics1.setTransform(Constants.EMPTY_TRANSFORM);
                graphics1.setStroke(Constants.DEFAULT_STROKE);
                effect.renderEffect(graphics1, camera, renderedMap1);
            }

        return renderedMap1;
    }[/Java]


----------



## musiKk (26. Okt 2009)

Erfahrung damit habe ich nicht, dafür mehr zu meckern. 

Wobei: Bei mir wird unter Linux ein Core (2 * 1.66GHz) komplett ausgelastet. Vielleicht ist irgendwo eine Endlosschleife. Unter Windows (2 * 2.66GHz) konnte ich jedenfalls keine bemerkenswerte CPU-Last feststellen. Für die Linux-Nutzer wäre vielleicht noch eine interessante Angabe, ob Compiz aktiviert ist, da das bei Grafik-Kram doch mal Probleme machen kann. Ich habe es jedenfalls aktiviert.

Es ist prinzipiell eine gute Idee, die Fenster automatisch so anzuordnen wie sie auf Deinem Screenshot sind. Auf meinem Notebook habe ich jedoch nur eine 1024er Auflösung und die Fenster rechts neben dem Hauptfenster verschwinden zum Großteil neben dem Desktop. Ich persönlich würde es -- wie ein Vorredner schon angedeutet hat -- auch für besser halten, das ganze in ein Fenster zu packen und dieses aufzuteilen. Ich kann mir natürlich vorstellen, dass das einiges an Änderungen nach sich zieht...


----------



## Gastredner (26. Okt 2009)

Man könnte das Programm womöglich relativ einfach in ein Fenster quetschen, indem man JInternalFrames verwendet.

Zu den VolatileImages kann ich einen Blick in "Killer Game Programming in Java" empfehlen, da wird dies besprochen:
Chapters 5-6. Images, Visual Effects, and Animation
Den entsprechenden Abschnitt findest du im PDF auf Seite 17. Allerdings steht dort interessanterweise, dass die Unterstützung von VolatileImages unter Linux besser liefe als unter MS Windows...allerdings basiert das Buch auch auf Java 1.4.2 und teilweise 1.5, da könnte sich vielleicht was geändert haben.


----------



## Steev (26. Okt 2009)

Ich habe jetzt erst einmal der einfachheit halber JDialog verwendet, da ich ja nur den Namen von JFrame in JDialog ändern musst 

Ich habe geplant später das ganze mithilfe von JSplitPanes aufzubauen, das finde ich persönlich am schönsten, weil man dann die Größen so anordnen kann, wie man will.

Ich bin gerade dabei mir einen Linux-Rechner aufzusetzen, dann lässt sich vieleicht besser feststellen, woran jetzt genau die Fehler liegen. Ich vermute aber einfach, dass Linux nicht so recht mit VolatileImage umgehen kann und stattdessen im Hintergrund BufferedImage verwendet. Das würde dann auch erklären warum das so langsam ist.
Eine andere Möglichkeit währe aber auch, dass die lostContent-Methode bei jeder Zeichnung true zurückgibt. Das würde dann bedeuten, dass pro Zeichnung (60x/Sekunde) ein VolatileImage erzeugt würde. Da hätte der GarbageCollector dann so viel zu tun, dass die Prozessorauslastung sehr hoch würde.


----------



## Steev (26. Okt 2009)

@Gastredner:
Ich habe den Nachfolger von dem Buch "Advanced Java Game Programming", da wurde das auch erläutert.
Die meisten Beispiele aus dem Buch konnte man allerdings erst nach einer gehörigen Konvertierung zum laufen bringen. Ich gucke mir noch mal das Kapitel an, bin mir aber keiner Schuld bewusst


----------



## hdi (27. Okt 2009)

Also ich hab's auch grad versucht.
Performance ist 60fps konstant (win 7 ultimate x86)

Ich hab mir jetzt nicht den ganzen Thread durchgelesen, daher verzeihe mir evtl. schon genannte Punkte. Was ich nicht gut fand:

- beim start werden alle Fenster übereinander ins linke obere Eck des Desktops gequetscht, und man muss sie sich erstmal zurechtlegen.
- Tooltips bei allen Buttons bitte, ich hab es in den ersten 10 Minuten nicht geschafft ein Objekt zu platzieren
- Das Wasser hab ich erst als solches nicht wirklich erkannt. Okay es hat sich etwas bewegt, aber es war sehr grün 
- Eine Platzierungshilfe wäre gut: Das Gitter sollte sich rot färben wenn man etwas nicht platizeren kann, und grün wenn man es platzieren kann
- Die Höhen sind z.T. noch sehr schwer zu erkennen. Ich finde da fehlt eine Umrandung von einem Bereich, der tiefer oder höher liegt als der Rest. Also eine komplette 1px Umrandung denke ich würde das ganze viel intuitiver als 3D erkennen lassen

Aber Performance wie gesagt top.


----------



## Steev (27. Okt 2009)

hdi hat gesagt.:


> - beim start werden alle Fenster übereinander ins linke obere Eck des Desktops gequetscht, und man muss sie sich erstmal zurechtlegen.
> - Tooltips bei allen Buttons bitte, ich hab es in den ersten 10 Minuten nicht geschafft ein Objekt zu platzieren
> - Das Wasser hab ich erst als solches nicht wirklich erkannt. Okay es hat sich etwas bewegt, aber es war sehr grün
> - Eine Platzierungshilfe wäre gut: Das Gitter sollte sich rot färben wenn man etwas nicht platizeren kann, und grün wenn man es platzieren kann
> ...



Hallo hdi,

das Problem mit den Fenstern habe ich bereits behoben, da du nicht den gesamten Thread durchgelesen hast konntest du natürlich nicht wissen, dass dies in der Version 1.3 zum Download bereit steht.

http://steev.st.ohost.de/ISOEditor/ISOEditorV1_3.zip

Die anderen Punkte werde ich dann mal probieren umzusetzen, das dürfte eigendlich kein großes Problem sein 

Wo ich eher ein Problem sehe ist, ist bei dem Linux-Render-Problem mit VolatileImage. Hat da vieleicht jemand eine Idee. Vieleicht auch im Bezug auf meinen o.g. Quellcode?


----------



## Steev (27. Okt 2009)

Ok,

ich habe die neuen Vorschläge mal eingebaut. Den Höhenmodus habe ich vorerst nicht geändert, da ich noch nicht weis, ob ich im Spiel tatsächlich Berge brauche, oder nicht. Vielleicht lösche ich den Höhenmodus wieder raus.

http://steev.st.ohost.de/ISOEditor/ISOEditorV1_4.zip

Zu den Wasser-Tiles:
Im TileChooser gibt es ja noch ein paar Wasser-Tiles mehr. Sind die auch alle zu grün, oder gibt es da welche, die euren Vorstellungen entsprechen? Dann müsste ich nämlich nur die Standardeinstellung abändern...


----------



## tuxedo (27. Okt 2009)

Fehler gefunden:

Ich arbeite mit einem Dual-Monitor System mit Windows XP SP3 und hab meine Taskleiste am linken Bildschirmrand. Die linken zwei Fenster des Editors verschwinden da komplett unter meiner Taskleiste.

Vielleicht solltest du die Koordinaten der Fenster noch Checken oder das ganze an der Bildschirmmitte (
	
	
	
	





```
setLocationRelativeTo(null)
```
) ausrichten?!

Ansonsten aber super performant. GUI reagiert sehr gut und schnell, auch wenn man das System stresst.

- Alex


----------



## musiKk (27. Okt 2009)

Der Link zur 1.4 geht übrigens nicht.


----------



## Civilazi (27. Okt 2009)

Steev hat gesagt.:


> Ich habe den Nachfolger von dem Buch "Advanced Java Game Programming", da wurde das auch erläutert.



Kleine Zwischenfrage: Kannst du das empfehlen? Sieht ja sehr schön aus, was du da programmierst


----------



## tuxedo (27. Okt 2009)

Civilazi hat gesagt.:


> Kleine Zwischenfrage: Kannst du das empfehlen? Sieht ja sehr schön aus, was du da programmierst



Bei Amazon gabs das gerade gebraucht für 8EUR ...  Da kann man nicht viel kaputt machen.

- Alex


----------



## Steev (28. Okt 2009)

Guten Morgen,



tuxedo hat gesagt.:


> Fehler gefunden:
> 
> Ich arbeite mit einem Dual-Monitor System mit Windows XP SP3 und hab meine Taskleiste am linken Bildschirmrand. Die linken zwei Fenster des Editors verschwinden da komplett unter meiner Taskleiste.
> 
> ...



Ich werde mir die GUI nochmal ansehen und die Fenster relativ zur Bildschirmgröße berechnen.



musiKk hat gesagt.:


> Der Link zur 1.4 geht übrigens nicht.



http://steev.st.ohost.de/ISOEditor/IsoEditorV1_4.zip

Ich habe den Link repariert, jetzt müsstet Ihr die Datei runterladen können.
Folgende Änderungen habe ich vorgenommen:
1. Tooltips für die Buttons im BrushChooser
2. Die Mausmarkierung wird grün, wenn man platzieren kann und rot, wenn das Platzieren nicht möglich ist.



Civilazi hat gesagt.:


> Kleine Zwischenfrage: Kannst du das empfehlen? Sieht ja sehr schön aus, was du da programmierst



Das Buch ist nicht schlecht und erklärt auch gut die entsprechenden Logiken. Das Problem ist halt, dass man den meisten Quellcode und die meisten Beispiele nicht ohne Konvertierung ausführen kann.
Aber um das Prinziep zu verstehen ist das Buch gut.


----------



## HoaX (28. Okt 2009)

Mit der 1.4 ist immernoch eine CPU auf 100% und es wird nicht aktualisiert, FPS zeigt auch 0 an.


----------



## Steev (28. Okt 2009)

Hm, das ist dieses komische Linux-Problem mit VolatileImage.
Ich gucke heute abend mal zu Hause auf meinem Test-Linux-Rechner nach ob ich das Problem nachstellen kann. Dann hätte ich es nämlich leichter, das Problem zu beheben.

Hast du dir mal meinen Quellcode für die Renderklasse angeguckt? Findest du da einen offensichtlichen Fehler? Wenn du Linux hast, dann machst du das doch sicher irgendwie anders als ich, weil deine Programme bei dir doch sicher funktionieren.


----------



## Steev (28. Okt 2009)

Sehr eigenartig, ich habe mir jetzt mal jdk jdk1.6.0_16 installiert. Jetzt habe ich das Problem mit dem Neuzeichnen des Fensters auch. Hmm, komisch. Außerdem bekomme ich jetzt einen Fehler beim Laden von Sounds über Clip.

Mal sehen, was da wieder verändert wurde. Abwärtskompatibilität scheint für sun ja ein Fremdwort zu sein...


----------



## musiKk (28. Okt 2009)

Das ist auch eine gute Gelegenheit, das Open Source-Modell anzupreisen.  Wenn die Quellen offen wären, würde sich vielleicht jemand finden, der helfen will. (Aber nicht falsch verstehen, ich bin kein OS-Fanatiker, sondern respektiere die Entscheidung, die der Autor trifft.)


----------



## Steev (28. Okt 2009)

Ich habe nichts gegen Open Source. Das Problem hierbei ist allerdings, dass ich für die Programmierung eine Engine verwende, die ich vollständig selbst geschrieben habe. Da ich mit meinen Spielen die Engine so ein bisschen auf Herz und Nieren teste will ich die Engine erst releasen, wenn ich einen Stand erreicht habe, wo ich nicht umbedingt täglich eine Änderung mache. Damit würde ich nur die wenigen Leute ärgern, die sich mein Gschreibsel antuen wollen


----------



## Steev (28. Okt 2009)

Hm, vorher hat dieser Code für die Sounds in meiner Engine funktioniert. Jetzt geht er nicht mehr mit demselben Sound. Das komische ist nur, dass er bei anderen Sounds desselben Typs funktioniert. Könnt Ihr da einen Fehler entdecken? Macht man das jetzt vieleicht mit der neuen Java-Version aners?

[Java]
            /*
             * Wenn der aktuelle Puffer-Eintrag initialisiert werden soll, so
             * soll dies über den Thread geschehen, damit andere Aufgaben
             * nebenläufig erledigt werden können, da hier eine Datei von der
             * Festplatte gelesen wird.
             */
            if (init) {
                URL url = sound.getAudioFile();

                /*
                 * Erstelle einen neuen Audio-Stream, für das abspielen.
                 */
                try {
                    // AudioInputStream öffnen
                    AudioInputStream ais = AudioSystem.getAudioInputStream(url);
                    AudioFormat format = ais.getFormat();

                    /*
                     * ALAW/ULAW samples in PCM konvertieren da diese Formate
                     * nicht unterstützt werden.
                     */
                    if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW)) {
                        AudioFormat tmp = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, format.getSampleRate(), format.getSampleSizeInBits() * 2, format.getChannels(), format.getFrameSize() * 2,
                                format.getFrameRate(), true);
                        ais = AudioSystem.getAudioInputStream(tmp, ais);
                        format = tmp;
                    }

                    int bufferSize = ((int) ais.getFrameLength() * format.getFrameSize());
                    DataLine.Info info = new DataLine.Info(Clip.class, format, bufferSize);
                    Clip clip = (Clip) AudioSystem.getLine(info);
                    clip.open(ais);
                    clip.setFramePosition(0);

                    // Zuweisen der erstellten Daten
                    try {
                        if (clip.isControlSupported(FloatControl.Type.PAN))
                            panControl = (FloatControl) clip.getControl(FloatControl.Type.PAN);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    try {
                        if (clip.isControlSupported(FloatControl.Type.MASTER_GAIN))
                            volumeControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    this.clip = clip;
                    setState(INITIALIZED);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                /*
                 * Aktualisieren der Audio-Eigenschaften des Sounds.
                 */
                try {
                    setVolume(sound.getVolume());
                    setPan(sound.getPan());
                } catch (Exception e) {
                    e.printStackTrace();
                }

                // zurücksetzen des init-Flags
                init = false;
            }[/Java]


----------



## Steev (28. Okt 2009)

So, das Problem mit Renderung habe ich (glaube ich) behoben.

Dann bleibt nur noch mein Sound-Problem. Da fällt mir leider auch keine Lößung mehr ein. Die wav-Datei lässt sich mit dem obigen Quellcode unter jdk.6.0_11 problemlos ausführen. Unter jdk.6.0_16 geht das plötzlich nicht mehr... :?:

Die neue Version findet Ihr unter folgendem Link:

http://steev.st.ohost.de/ISOEditor/ISOEditorV1_5.zip

Bitte testet doch mal, ob Ihr eine Performanceveränder feststellen könnt.

Ich habe einen AMD Phenom II X4, 8 GIG RAM, Windows Vista SP2, NVDIA Gforce GTX 260 1920 x 1600 (32 Bit)
Wenn ich die Standardmap lade und mir so die Insel angucke, dass ich fast alle Bäume und Häuser sehe, dann habe ich eine Prozessorauslastung von 45% und ich habe das Gefühl, dass es etwas stockt.

Wie funktioniert diese Version bei euch?
Geht diese Version jetzt auch unter Linux?


----------



## Steev (6. Nov 2009)

Hmm, das Soundproblem besteht weiterhin. Andere Sounds kann ich ohne Probleme abspielen, nur eben diesen einen Sound kann ich nicht mehr abspielen. Wenn ich dann einfach eine andere jdk verwende, dann funnktioniert es wieder.
Kennt jemand das Problem oder weis sogar wie man das Problem abstellen kann?
Wurde da irgendetwas geändert oder mache ich etwas falsch?

PS:
Klappt der ISO-Editor jetzt bei allen? Wenn ja, dann kann ich nämlich weiter machen.


----------



## tuxedo (6. Nov 2009)

Mit AVI Files hatte ich mal was ähnliches: Die waren ab einer bestimmten Stelle kaputt so dass der Windows Media Player sie nicht mehr weiter abspielen konnte. VLC konnte aber z.B. über den Fehler hinweg lesen und hat alles abgespielt.

Vielleicht ist das bei der einen Audiofile genauso? Probier mal die File in ein anderen Format und wieder zurück zu konvertieren. Vllt. geht's dann?

- Alex

p.s. Audiofiles kann man auch noch anders abspielen, ohne diese Clip-Klasse. Siehe Java Sound Resources


----------



## Steev (6. Nov 2009)

Na ja, dieser Sound kann aber mit allen, mir bekannten Media-Playern abgespielt werden. Ich hatte ihn nämlich selbst zusammengeschnitten und mit Audacity als wav abgespeichert. Das komische ist halt, dass es mit der alten jdk funktioniert, aber mit der neuen nicht mehr.

Ich probiere heute abend noch mal den Sound zu konvertieren. Vieleicht klappt das ja. Danke tuxedo


----------



## Noctarius (6. Nov 2009)

Es wird in dem einen, weiter oben genannten, Buch erwähnt, dass es mal einen Bug gab, bei dem alle Sounds unter ... ähm ... 1 Sekunde oder so nicht richtig abgespielt wurden. Eventuell ist ein ähnlicher Bug wieder vorhanden. Ein Blick in den JVM Bugtracker von SUN oder vom OpenJDK Projekt sollte Klärung bringen.


----------

