# Tile Wars



## Viper173 (10. Feb 2008)

Hi,

Brauche ein paar Beta-Tester für unser kleines 2-Mann-Projekt. 
Tile Wars kommuniziert mit einem php Skript auf dem Server und bezieht Daten aus einer sql-Datenbank.
Was haltet ihr von dem Konzept?

www.tilewars.de


----------



## Beni (10. Feb 2008)

Sehr schön. Für die Kämpfe wünschte ich mir, dass die Schiffe ihre schwache Seite wegdrehen.


----------



## Schnitter (10. Feb 2008)

Cool. Echt cool  
Ich hab auch schon gewonnen *wuhaha*
Naja, lässt sich grafisch bestimmt noch etwas aufpeppen, aber das Spielprinzip find ich schonmal gut!



EDIT: Wie gewinnt man eigentlich Geld?

EDIT2: Im Kampf stehen die Schiffe nach einer zeit einfach nur da und beschiesen sich  - gewollt?

EDIT3:
Wo hast du den Sound her, der immer kommt, wenn man einen button drückt? (kann ich den haben? )
Und eine Usersuche wäre auch nicht schlecht - vor allem, wenn es mehr werden


----------



## doctus (10. Feb 2008)

gut gelungen.
ich würde sogar sagen, dass das grafisch genau so richtig ist. diese klötzchen wirken iwie viel besser, als wenn man da groß grafischen schnickschnack noch macht.


----------



## Evolver (10. Feb 2008)

Wenn ich ein Gegnerisches Schiff gewählt habe und auf "Kampf" klicke, passiert garnichts. Muss ich noch etwas beachten?


----------



## Viper173 (10. Feb 2008)

Geld bekommst du mit dem nächsten Level. 
Pro Level hat man also entsprechend mehr Kohle....


Die Schiffe versuchen sich im Modus "Pointer" einfach nur aufeinander auszurichten


schnitter, schreib deine email adresse doch mal in das TileWars Forum (Menu rechts) und schreibe nochmal dein anliegen zwecks sound datei rein. Mein "sound entwickler" wird sich deiner bestimmt anmehmen.


evolver, keine Ahnung. Normalerweise Gegner anklicken in der HS, dann Fight drücke. Probiers vllt mal mit nem anderen browser


----------



## Schnitter (10. Feb 2008)

Im Nachhinein irgendwie schade, dass man nur 20mal am Tag kämpfen kann


----------



## Beni (10. Feb 2008)

Jo, ich könnte auch länger spielen :wink:
Wie wäre es mit einer Beschränkung, wie oft man gegen den gleichen Gegener spielt? Jetzt sucht man sich ja einfach einen schwächeren und prüggelt so lange wie möglich auf ihn ein.


----------



## Viper173 (10. Feb 2008)

Danke fürs Feedback, Leute!!!!!!

Das ist wirklich so wertvoll, sag ich euch!

Schnitter, lol!!!   Ich hatte gerade die Beschränkung von 10 auf 20 gesetzt 

Das Schiff auf einen Gegner optimieren und solange kämpfen bis man ein Level höher ist.... Ja, das ist ein krasses Problem.  Werd' mich dem mal demnächst annehmen. Danke


----------



## Evolver (10. Feb 2008)

Also jetzt ging es einmal, beim zweiten mal keine eine java.net.ConnectingException (wurde dort ausgegeben, wo sonst "preparing for battle" steht) und danach passierte garnichts mehr, wenn ich auf den Button klickte (auch nach erneutem Einloggen nicht).


// EDIT: Also die letzten paar Male lief es jetzt auvch bei mir ohne Fehler.


----------



## Evolver (11. Feb 2008)

Ich konnte es ja nun auch ausführlicher testen und finde es schon ganz nett für zwischendurch. Aber wie Beni schon gesagt hat, ist es schlecht, dass ma sich einfach einen schwachen Gegner aussuchen kann um den dann immer wieder platt zu machen. Man sollte deshalb nur einmal pro Tag gegen jeden Kämpfen können. Dann könnte man die Beschränkung auf 20 Kämpfe vielleicht auch aufheben.
Was vielleicht auch cool wäre, wenn man Geld in die Triebwerke investieren könnte, um damit sich das Schiff schneller drehen kann.


----------



## Schnitter (11. Feb 2008)

Mal ein paar fragen:
1.Vorhin kam einmal "too weak" und ich hab keine Punkte gekriegt - der Anfang?
2. Wieso kommuniziert ihr über ein PHP-Skript? Geht das nicht imho direkt mit dem mysql-treiber?


----------



## manuche (11. Feb 2008)

Bei mir gehts leider nicht über logging in hinaus


----------



## Viper173 (11. Feb 2008)

schnitter:

hat der Gegner null Punkte, bekommt man ebenfalls keine wenn man ihn besiegt. Sonst könnte man ja einfach ein schiff erstellen, dann noch ein anderes und mit dem immer gegen das erste kämpfen und natürlich gewinnen....

Das mit dem PHP habe ich nur gemacht, weil mir das mit den java sql Treibern schon wieder zu kompliziert war 
aber wie an manuche oder Evolver zu erkennen hat das anscheinend weitere Probleme mit sich geführt diesen Umweg zu gehen...


----------



## az (12. Feb 2008)

das Spiel sicht ja schon mal recht gut aus, vom Spielprinzip her sicher eine geniale Idee. 

Folgende (vielleicht subjektive) Eintrücke hatte ich nach kurzem antesten:

Ich denk du wirst noch einige Ballancingschwierigkeiten kriegen. Auf den ersten Blick kommt es mir so vor, wie wenn viele kleine Waffen um einiges besser sind als wenige starke Waffen. Außerdem werden die Schiffe zu wenig von der Seite getroffen, so macht es nur Sinn, Panzerung vorne hinzusetzen. Vielleicht ändert sich das auch mit höheren Leveln, ist mir halt gleich zu Beginn mal aufgefallen.

Wie schon einige vor mir schrieben, ist es gefährlich fürs Spiel, so oft das gleiche Schiff angreifen zu können. 
1. Kann man sich selbst extrem gut damit hochpushen und 2. kann man so geziehlt andere Spieler "vernichten". Ist bestimmt nicht lustig wenn du dich am nächsten Tag wieder einloggst und 0 Punkte hast, weil einer sich 3 Schiffe erstellt hat und dich komplett zerschossen hat, nur weil er eine "Anti-Konfiguration" gegen dein Schiff fand...

Zur Zeit sieht man die Konfiguration der ganzen Schiffe in der Rangliste. Wenn das Spiel sich weiter in die Richtung Schere-Stein-Papier entwickelt, wärs evtl zu überlegen, die Konfiguration nicht für alle sichtbar zu machen. Vielleicht ist das aber auch so gewollt, dann vergiss das eben Gelesene schnell wieder  :wink: 

Ich weiß, ist alles nur eine Beta, aber trotzdem wärs cool wenn du die Rangliste ab und zu aufräumen lässt. Sieht halt ned so toll aus, wenn da ne elends lange Liste mit 0-Punkte-Spieler drinnen ist.

Ach, und ist auch eine Funktion zum Löschen des eigenen Schiffs/Accounts geplant?


Wie eingangs schon erwähnt, sind das halt hauptsächlich Ballancingprobleme, die ich da sehe. Vom Spielprinzip sowie von der bisherigen Umsetzung bin ich aber extrem begeistert


----------



## maki (12. Feb 2008)

Ist es absicht, Leute auszuschliessen welche kein Java 6 haben?


----------



## Viper173 (12. Feb 2008)

az:

Ist bestimmt nicht lustig wenn du dich am nächsten Tag wieder einloggst und 0 Punkte hast, weil einer sich 3 Schiffe erstellt hat und dich komplett zerschossen hat, nur weil er eine "Anti-Konfiguration" gegen dein Schiff fand... 

-> Das Problem hab eich ja noch gar nicht erkannt. Danke Dir. Steht ganz oben auf meiner ToDoList 



maki:
Ist es absicht, Leute auszuschliessen welche kein Java 6 haben?

Anscheinend....  habe aber keine Ahnung. Ich dachte ich hatte so fundamental programmiert, das es nicht der Fall ist, aber ich kenne java auch nicht wirklich. lol


----------



## stev.glasow (14. Feb 2008)

eh welcher minihoden hat mich von 55 auf 10 runter gebommt :/
wäre auch dafür das man nur gegen einen 3 mal kämpfn darf oder so. und ne kampf history wäre gut, zwecks racheaktionen


----------



## Evolver (14. Feb 2008)

Das Spiel bleibt immer mal hängen bei mir. Zum Beispiel wenn ich einen Kampf starte oder oder dan Kampf gewonnen habe. Das Programm blockiert zwar nicht (ich kann immernoch die Buttons anklicken), aber es geht auch nicht weiter.


----------



## Guest (15. Feb 2008)

zweiter Testbericht nach paar Tagen testen:

- Das gleiche Problem wie Evolver habe ich auch festellen können. Ab und zu bleibt bei Kampfbeginn der Kampfbereich weiß und es passiert nichts mehr. Die Buttons funktionieren aber noch. Der Rückzug-Button zieht einem zb trotzdem 3 Punkte ab, und der Kampf wird auch von den 20 täglichen abgezogen...

- Zu den Waffen: das Kosten/Nutzen Verhältnis von den "besseren", teureren Waffen finde ich zu schlecht. Vor allem der Laser taugt in meinen Augen zu gar nichts. Ich hab schon einige Dinge ausprobiert, zb 2 Laser mit hoher Frequenz gegen mehrere verschiedene Schiffe zu verwenden. Als Ergebnis hatte ich nicht eine einzige schwere Panzerung zerschossen, und meine doppelschichtige schwere Panzerung war komplett zerlegt und mein Schiff kaputt.
Ebenso find ich den Preisunterschied zwischen leichtem und schwerem Turm zu krass.

- Panzerung: Wieso hält die mittlere Panzerung nur 50% mehr aus als die leichte, die schwere Panzerung hingegen 3 mal so viel wie die mittlere, bei jeweils gleichem Kostenanstieg? Zur Zeit ist die schwere Panzerung einfach etwas overpowered. 

- Kämpft ein Schiff im Modus Pointer und das andere im Modus Flyby, so wird das Flyby-Schiff immer langsamer und nach ~ 4-5 Runden wird es vom anderen Schiff mit normalen Waffen von der Seite hinten getroffen. Das muss nicht wirklich ein Problem sein, kann aber wiederum zu Balancingproblemen führen. 

- Allgemein sollte ein Kampf nicht so statisch sein. Zur Zeit gibt 2-3 Kampfabläuf, wenn 2 Schiffe mehrere Male gegeneinander Kämpfen, die immer wieder eintreten. So kann man sich perfekt auf ein Feindschiff abstimmen. Kriegt man zu viel Schaden an einer Stelle, baust du dort einfach noch einen Panzer dazu und schon siehts im nächsten Versuch viel besser aus.

- Alternativ zum vorigen Punkt kann man auch die Kampfanzahl gegen ein Schiff begrenzen, was ja sowieso schon von vielen gefordert wurde und sicherlich sinnvoll ist. Jede Konfiguration ist schlagbar und wenn da mehere Schiff auf einen losgehen, ist die Frustration beim nächsten Einloggen sicherlich groß....siehe stevg 2 Posts über mir (btw: stevg, an mich hast du auch 3 Punkte verloren  )

- Ich hab mir gestern paar weitere Schiffe erstellt (gehen ja bis zu 4 Schiffe ohne Probleme anzulegen) und mit denen schwache Schiffe zerlegt. Sobald ich dann einige Punkte hatte, griff ich mein eigenes starkes Schiff an und hab bewusst dagegen verloren. Als Ergebnis hat mein starkes Schiff 4 Punkte dazugezählt bekommen. Das nenne ich mal Hochpushen im Easymode. Was ich gesehen habe, müssen das auch paar andere machen, anders kann ich mir nicht erklären, dass da so viele Kämpfe pro Tag bei einem dazukommen^^
Um dem gegenzuwirken sollten starke Schiff keine Punkte bekommen wenn sie von schwachen angegriffen werden. 
Eine Begrenzung der Angriffe auf ein Schiff sollte auch etwas Abhilfe schaffen können.


----------



## az (15. Feb 2008)

der Post oben ist von mir, kp wieso ich nicht eingeloggt war  ???:L


----------



## Viper173 (15. Feb 2008)

Danke az,

ich hab folgendes auf meine (immer länger werdende ToDoList) aufgeschrieben:

-Anzahl der Kämpfe gegen ein einziges Schiff limitieren (!!!!)
-mittlere Panzerung ausbalancieren
-Kampfbericht ?   (stevg)
-starke Gegner bekommen keine Pkte wenn sie von schwächeren angegriffen werden und gewinnen
-Laser stärker machen (gefährliche Sache! Der Laser kann nämlich ganz schnell die Ultimativlösung werden. Aber ich werd ihn mal ein bißchen tunen  )

Das mit dem langsamer werden ist gewollt. So habe ich verhindert, dass es einen Endloskapf geben wird. Sie werden halt immer langsamer und treffen sich dann irgendwann garantiert. Gerade im Level 1 ist das nötig, da es dort keine Smart Turrest gibt.


----------



## Viper173 (15. Feb 2008)

Nochmal danke für euer wahnsinniges Feedback! 
Ich hoffe nur, dass ich in den nächsten Tagen mal die wichtigsten Sachen implementieren kann, die ihr vorgeschlagen habt.


----------



## az (15. Feb 2008)

> Das mit dem langsamer werden ist gewollt. So habe ich verhindert, dass es einen Endloskapf geben wird. Sie werden halt immer langsamer und treffen sich dann irgendwann garantiert. Gerade im Level 1 ist das nötig, da es dort keine Smart Turrest gibt.


Ja, es ist klar, dass es möglich sein muss, den Gegner zu treffen. Es ist auch nicht verkehrt, die Schiffe sich irgendwann "treffen zu lassen" indem sie langsamer werden. 
Was halt zu Problemen führen kann ist, dass das kreisende Schiff am hinteren Ende getroffen wird. Das führt dazu, dass sich die kreisenden Schiffe auch auf der Seite stark panzern müssen. Und dies nur, weil Schiffe mit "schwachen" Waffen zu doof sind, vorne in die sowieso vorhandene starke Panzerung zu schießen. die "schlaueren" Türme treffen ja weiterhin vorne in die Panzerung. 

Natürlich trifft das nicht immer und überall so zu, es hängt schon auch teilweise von der grundsätzlichen Anordnung der Panzerungen/Waffen ab. Ich möchte dir jetzt auch nicht raten da gleich groß Änderungen zu machen, sondern vielmehr darauf zu achten wie sich das entwickelt. 

Und dann hätte ich noch eine Frage: 
Was passiert wenn beide Schiffe keine Waffen mehr haben? Kreisen die dann ewig im Kreis bis der Angreifer auf Rückzug klickt? Und was passiert wenn man während einem Kampf den Browser schließt?



> -Kampfbericht ? (stevg)


Könnte ich mir so vorstellen: 
Nach dem Einloggen eine Liste mit Kämpfen seit dem letzten Ausloggen. Mit Schiffname + Anzahl Siege/Niederlagen


Anderes Thema:
Die Anzeige des Schiffsnamens ganz unten ist zu klein. Es gibt ein paar Schiffe deren Name einfach abgeschnitten wird. Und bei aktiver englischer Sprach wird sogar der Doppelpunkt bei "Opponent Ship:" halb abgeschnitten ^_^


----------



## Schnitter (15. Feb 2008)

Ich bin hier übrigens grad in nem Kampf gefangen, in dem mein Gegner UND ich keine Waffen mehr haben ^^


----------



## Viper173 (17. Feb 2008)

ALso, ehrlich. Das ist nun wirklich komisch!

Wie kann es sein, dass sich zwei Leute gleichzeitig die letzten Türme wegschießen??
Das hör ich jetzt schon zum 2. Mal. Ist doch eine wahnwitzig kleine Wahrscheinlichkeit....
Habe das nicht abgefangen und der Kampf wird endlos. -> Also Retreat (-3 Pkte)

az, bei Browserbeendung nach Kampfstart wird Dein Kampf als Niederlage gewertet. Muss ja, sonst könnte man nun wirklich einfach betrügen


----------



## Evolver (18. Feb 2008)

Viper173 hat gesagt.:
			
		

> Wie kann es sein, dass sich zwei Leute gleichzeitig die letzten Türme wegschießen??
> Das hör ich jetzt schon zum 2. Mal. Ist doch eine wahnwitzig kleine Wahrscheinlichkeit....



Nicht unbedingt. Wenn einer noch aktive Panzerung hat, kann der andere ja auch dadurch noch seinen eigenen Turm verlieren, oder?


----------



## az (18. Feb 2008)

genau, das Problem hatte ich jetzt auch schon einige Male. Einer verliert seine ganzen Waffen, hat aber noch paar Active Armor. Der andere schießt auf den Armor drauf, bis seine eigenen Waffen zerstört sind. 


Wie sieht das jetzt eigentlich mit den erlaubten Angriffen pro Tag aus? Wenn ich mehrere Schiffe abwechselnd angreife, kann ich gegen jedes Schiff auch öfter kämpfen. Finde ich gut so, allerdings würde die Fehlermeldung angepasst gehören. Es ist ja dann doch nicht ein Kampf pro Tag.


----------



## Evolver (18. Feb 2008)

Also manchmal steht bei mir da, ich könnte nciht gegen einen bestimmten Gegner kämpfen, da ich 'heute' schon gegen ihn gekämpft habe, obwohl das garnicht stimmt.


----------



## Viper173 (18. Feb 2008)

Evolver, 
der Bug ist mit heute aufgefallen und wurde beseitigt. Neuer Tag -> Alle Gegner wählbar.
Im übrigen kann man jedes 5. mal den selben Gegner angreifen. Aber das habe ich nicht in eine kurze Fehler-Nachricht bekommen  Was kannn man denn da schreiben? "Diesen Gegner erst wieder angreifen wenn Du vier andere angegriffen hast"   Puhhh.....

Das mit dem Active-Armor ist mir ja gar nicht eingefallen 
Stimmt. Aber dann hat man eben verloren oder?


----------



## Evolver (19. Feb 2008)

Viper173 hat gesagt.:
			
		

> Das mit dem Active-Armor ist mir ja gar nicht eingefallen
> Stimmt. Aber dann hat man eben verloren oder?


 Naja, ich würde einfach den Kampf als unentschieden werten, wenn beide keine Geschütze mehr besitzen und keine Geschosse mehr unterwegs sind. Dann gibts halt für beide Spieler ein oder zwei Punkte.


----------



## Oni (20. Feb 2008)

Hi,

kann es sein das man pro IP-Adresse nur einen account anlegen kann? finde ich schade, bin gerade auf der arbeit und habe meinem kollegen den link geschickt. der konnte sich dann aber nicht anmelden, weil er angeblich schon ein schiff hat.

gruß oni


----------



## Oni (21. Feb 2008)

Du solltest den Link vielleicht noch einmal in einem stark frequentierten forum posten um das game etwas publik zu machen.

z.B. www.computerbase.de der hängen nur computerfreaks rum, da finden sich bestimmt ein paar spieler


----------



## Viper173 (25. Feb 2008)

Danke, Oni. 

Ja es ist richtig, dass man pro IP-Adresse nur ein Schiff erstellen kann. Ich hab's auf die schnelle nicht besser hinbekommen eine Begrenzung der Schiffserstellung zu bewerkstelligen. 

Kann man einen Benutzer noch individueller erfassen als durch die IP-Adresse??
In php ist das mit der IP nur so einfach :=)  
$ip ="$REMOTE_ADDR";


Danke auch für den Posting-Tip. Der ist wirklich Gold wert. Aber erst mal müssen wir ja die ganzen Tips umsetzen


----------



## Oni (26. Feb 2008)

hmm, gibt es vielleicht die möglichkeit über die mac-adresse abzufragen?


----------



## Kizz (26. Feb 2008)

Also ich kenn mich jetzt auch nicht so aus, aber ich kann mir nicht vorstellen, dass man als "externer" einfach so auf die Mac-Adresse eines Rechners zugreifen darf.

Ansonsten würde mir zur Absicherung nur E-Mail-Adresse einfallen. Also das man eine mit angeben muss, an die wird dann eine Mail geschickt mit Link zum verifizieren. Allerdings hat man sich bei GMX etc schnell mehrere besorgt und ausserdem denke ich dass das für euer Projekt ein wenig "Overkill" wäre.


----------



## Viper173 (26. Feb 2008)

Das denke ich auch.
Außerdem mag ich diesen Verifizierungsaufwand nicht seiten des Benutzers. Mich nervt sowas immer.

Die MAC-Adresse ist mir ja auch noch nicht zu Ohren gekommen musste ich eben erst mal googlen. Sowas hätte ich mir auch alternativ vorgestellt. Eine Art Hardware-Fingerprint zur individualeren Identifizierung als die IP.

Ich muss mich da wohl erst mal ein gutes Stück schlauer machen...


----------



## az (26. Feb 2008)

Ich würde mir eine Update-Historie wünschen. 
Erstens, weils einfach interessant ist, zweitens, um neue Änderungen gleich testen zu können und drittens um zwischen Bug und Feature unterscheiden zu können. 

Seit ich in auf Level 5 gelandet bin, ist es richtig fad geworden. Die Anzahl der angreifbaren Schiffe ist extrem eingeschränkt und es ist auch nur ein Angriff pro Schiff möglich, da nicht genug Schiffe auf dem Level sind, um eine weitere "Runde" angreifen zu können. 

Gestern und heute musste ich wiederholt festellen, dass mein Schiff Schaden bekommt, obwohl es noch mit Panzerung geschützt ist. Zumeist bei Kampfbeginn, wenn beide Schiffe gerade aufeinander zufliegen und der Feind Active Armor vorne eingebaut hatte. Aber nicht nur in diesem Fall. 
Bug oder Feature? Wenn Feature, wovon hängt es ab?


----------



## Viper (26. Feb 2008)

Bug!

Ich habe schon Stunden über Stunden an diesem Problem gehangen, aber es will nicht weggehen!
Kugeln schießen halt manchmal durch die Panzerung. Ich habe schon die Strecke einer Kugel pro Zeitschritt verkürzt, so dass sie nicht über ein Tile hinwegfliegen kann in einem Integrationschritt....

Das es momentan fad auf Level 5 ist wird sich hoffetnlich bald ändern. Je mehr Leute dieses Spiel spielen, desto mehr sind es ja letztendlich pro Level...


----------



## Viper173 (26. Feb 2008)

Ah,  azrael..... Du legst es aber auch darauf an, dass man dir vorne durch die Panzerung schießt


----------



## Oni (26. Feb 2008)

ein bug ist mir auch schon aufgefallen.
habe heute morgen gegen einen kämpft, und am ende hatte ich noch 2 kanonen und er keine mehr. die haben aber leider nur noch am gegner vorbei geschossen. nach 5min habe ich dann abgebrochen, weil kein einziger schuss beim gegner ankam.


----------



## az (26. Feb 2008)

ich spiel halt gerne das versuchskaninchen


----------



## Viper173 (27. Feb 2008)

Oni, das ist auch so ein BUG, der mich nachts verfolgt. 
Ich habe folgendes dagegen getan. Die Triebwerksleistung wird ab bestimmten Zeiten gedrosselt. 
Erst auf 66%, dann auf 40%, dann auf 13% und jetzt habe ich eine weitere Drosselung nach ca. 250 SEkunden auf Timemulti 1 auf 3% (!) dazugetan. Und dann sollte jeder schuss treffen!!!

Also, AZ. Ich hatte schon den Weg jeder Kugel in einem Integrationsschritt halbiert. Somit fällt die Wahrscheinlichkeit, dass eine Kugel in einem Zeitschritt "über" ein Tile springt. Ich verviertel diese Stecke jetzt noch. Und der Rest ist dann ein Feature!!   Da dieses Phänomen hauptsächlich bei hohen Relativgeschwindigkeiten auftritt, kann man es als geschwindigkeitsbegründeten Durchschuss gelten lassen. Das spornt zusätzlich Leute an, schnelle Schiffe zu bauen, was bei zukünftigen Triebwerk-Upgrades zu buche schlägt


----------



## Oni (28. Feb 2008)

Das stand nach einiger zeit in meiner Java-Console:


```
Exception in thread "AWT-EventQueue-2" java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferInt.<init>(Unknown Source)
	at java.awt.image.Raster.createPackedRaster(Unknown Source)
	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
	at sun.awt.Win32GraphicsConfig.createAcceleratedImage(Unknown Source)
	at sun.awt.windows.WComponentPeer.createImage(Unknown Source)
	at java.awt.Component.createImage(Unknown Source)
	at AppletFrame$DoubleBufferPanel.paint(AppletFrame.java:177)
	at sun.awt.RepaintArea.paintComponent(Unknown Source)
	at sun.awt.RepaintArea.paint(Unknown Source)
	at sun.awt.windows.WComponentPeer.handleEvent(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.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)
Exception in thread "AWT-EventQueue-2" java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferInt.<init>(Unknown Source)
	at java.awt.image.Raster.createPackedRaster(Unknown Source)
	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
	at sun.awt.Win32GraphicsConfig.createAcceleratedImage(Unknown Source)
	at sun.awt.windows.WComponentPeer.createImage(Unknown Source)
	at java.awt.Component.createImage(Unknown Source)
	at TFight$DoubleBufferPanel.paint(TFight.java:110)
	at sun.awt.RepaintArea.paintComponent(Unknown Source)
	at sun.awt.RepaintArea.paint(Unknown Source)
	at sun.awt.windows.WComponentPeer.handleEvent(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.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)
Exception in thread "AWT-EventQueue-2" java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferInt.<init>(Unknown Source)
	at java.awt.image.Raster.createPackedRaster(Unknown Source)
	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
	at sun.awt.Win32GraphicsConfig.createAcceleratedImage(Unknown Source)
	at sun.awt.windows.WComponentPeer.createImage(Unknown Source)
	at java.awt.Component.createImage(Unknown Source)
	at AppletFrame$DoubleBufferPanel.paint(AppletFrame.java:177)
	at sun.awt.RepaintArea.paintComponent(Unknown Source)
	at sun.awt.RepaintArea.paint(Unknown Source)
	at sun.awt.windows.WComponentPeer.handleEvent(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.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)
Exception in thread "AWT-EventQueue-2" java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferInt.<init>(Unknown Source)
	at java.awt.image.Raster.createPackedRaster(Unknown Source)
	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
	at sun.awt.Win32GraphicsConfig.createAcceleratedImage(Unknown Source)
	at sun.awt.windows.WComponentPeer.createImage(Unknown Source)
	at java.awt.Component.createImage(Unknown Source)
	at TFight$DoubleBufferPanel.paint(TFight.java:110)
	at sun.awt.RepaintArea.paintComponent(Unknown Source)
	at sun.awt.RepaintArea.paint(Unknown Source)
	at sun.awt.windows.WComponentPeer.handleEvent(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.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)
Exception in thread "AWT-EventQueue-2" java.lang.OutOfMemoryError: Java heap space
Exception in thread "AWT-EventQueue-2" java.lang.OutOfMemoryError: Java heap space
Exception in thread "AWT-EventQueue-2" java.lang.OutOfMemoryError: Java heap space
Exception in thread "AWT-EventQueue-2" java.lang.OutOfMemoryError: Java heap space
Exception in thread "AWT-EventQueue-2" java.lang.OutOfMemoryError: Java heap space
....
```


----------



## Viper173 (28. Feb 2008)

Aha,

ist ja n Ding! Out of memory. Ich dachte Java wär so toll und räumt für einen auf....
Kann mir jemand auf anhieb sagen, was das für Probleme sind??? Ich werd dort nämlich nicht schlau draus


----------



## Oni (28. Feb 2008)

Java räumt die Objekte ja nur weg, wenn sie nicht mehr benötigt werden. vielleicht bleibt ja irgendeine abhängigkeit?

was passiert den hier (TFight.java:110)?

PS: meld dich doch mal im Forum an. :bae:


----------



## Viper173 (29. Feb 2008)

Kann man hier wirklich Themen erstellen ohne sich anzumelden? Kann mich nämlich gar nicht mehr erinnern  
Und ich versuch mich hier schon seit Minuten anzumelden.....


OK, die besagte Zeile macht folgendes:
            if(offscreen == null) {
               offscreen = createImage(getSize().width, getSize().height);
            }


Aber der wahre Fehler liegt wahrscheinlich eher im memory leak....
Dann habe ich halt Fehler gemacht, OK...!  Und jetzt werde ich von diesem doofen Java wieder dafür bestraft, da es angesichts des Garbage Collectors irrsinnig schwer ist, das Problem zu finden! Unter C++ brauch ich 15 Minuten für die Behebung eines memory leaks und was mach ich in JAVA!!!????

Hat jemand ne Idee?? 

	before = Runtime.getRuntime().freeMemory();
	after = Runtime.getRuntime().freeMemory();
aber after-before schwankt ja derart rum, dass ich daraus nicht schlau werde!  :x


----------



## Oni (29. Feb 2008)

#freeMemory() liefert dir auch immer nur einen wert, der relativ zu dem von der jvm für das programm zur verfügung gestellten arbeitsspeichers ist. das sind standardmässig maximal ~65 mb. 

z.B:
#maxMemory()  = 65mb
#totalMemory()  = 20mb
#freeMemory()   =  5mb

dann heißt das, dass 5 mb von den 20mb noch frei sind. aber das programm sich noch mehr holen kann.

du könntest dir das programm mit einem profiler anschauen. zb jprofiler, gibt es als testversion für 30-tage.


----------



## Viper173 (29. Feb 2008)

Genau das meine ich! Jetzt brauche ich echt wieder fremdprogramme, weil man mit java nicht mehr alleine klarkommt...
Hab mir auch schon eins runtergeladen... und nicht verstanden.

Ich geh jetzt einfach zu Fuß und such den Fehler selbst ???:L


----------



## Oni (29. Feb 2008)

du kannst ja mal bisschen mehr code posten, vielleicht sieht ja jemand das problem.


----------



## Viper173 (29. Feb 2008)

OK!

Ihr habt's ja nicht anders gewollt 

 :meld: 
Memory geht hauptsächlich beim Wechsel der Menuseiten verloren. (Also Hauptseite mit HighScore nach Editor oder in den Fight Modus)

Dies geschieht auf Knopfdruck und vernichtet dann so 2 Mb!!! Was leckt bitte schön so viel Speicher???
Im Wesentlichen wird von Edit zu Hauptmenu nur das Hauptpanel sichtbar gemacht und das Editpanel unsichtbar.Selbst wenn ich bis auf die setVisible Methoden alles enferne gehen immernoch 2 Mb verloren. Es wird nichts neues erstellt. Den Program-thread habe ich auch gestoppt, immernoch Memory leak!

Eigentlich können doch nur die Hintergrund gifs soviel Speicher auf einmal ziehen, oder???
Die gifs sind auf Panels gemalt, die allerdings nur beim Start erstellt werden. Hier die Klasse des Panels:

      public class DoubleBufferPanel extends Panel {
        Image offscreen;
	int type;

        public DoubleBufferPanel(int whichone) {  // login und main menu site use the same Panel Class
            super();
            if (whichone == 1)
		type = 1;
            if (whichone == 2)
		type = 2;
        }

        /**
         * null out the offscreen buffer as part of invalidation
         */
        public void invalidate() {
            super.invalidate();
            offscreen = null;
        }

        /**
         * override update to *not* erase the background before painting
         */
        public void update(Graphics g) {
            paint(g);
        }

        /**
         * paint children into an offscreen buffer, then blast entire image
         * at once.
         */
        public void paint(Graphics g) {
            if(offscreen == null) {
               offscreen = createImage(getSize().width, getSize().height);
            }

            Graphics og = offscreen.getGraphics();
            og.setClip(0,0,getSize().width, getSize().height);
            super.paint(og);
            if (pic_login != null && pic_main != null)
	    {
	      if (type == 1)
                og.drawImage (pic_login, 0, 0, this.getWidth (), this.getHeight (), this);
	      if (type == 2)
                og.drawImage (pic_main, 0, 0, this.getWidth (), this.getHeight (), this);
	    }
            g.drawImage(offscreen, 0, 0, null);
            og.dispose();
        }

      }


Ab und zu flush() ich alle images mal. Ist ansonsten irgendwas verkehrt an der Panel Klasse??


----------



## Viper173 (29. Feb 2008)

Wenn ich eine neue TEdit-Klasse beim Wechsel in den Editor erstelle, muss ich dann die alte Variable/Instanz irgendwie löschen??

Ich mache auf Knopfdruck einfach:

Edit = new TEdit(this);

Edit mag aber noch von einem vorherigem Besuch des Editors nicht null sein. TEdit enthält ein haufen Zeug, wie die Panels mit den großen gifs und alles was halt im Editor so angezeigt wird. Wird bei obigem Aufruf der Speicher der zuvorigen Allocation mitsamt aller erstellten Sub-Klassen  nicht vollständig wieder freigeben????


----------



## Oni (29. Feb 2008)

Tip:
verwende Code-Tags, dann ist es leichter den Code zu lesen.


Lädst du die Bilder immer wieder neu?  
Der Speicher läuft ja ziemlich schnell voll. Das ist meine Konsole nach ca 12 mal hin und her wechseln zwischen dem Hauptmenü und dem Editfenster.


```
Java Plug-in 1.6.0_04
Verwendung der JRE-Version 1.6.0_04 Java HotSpot(TM) Client VM
Home-Verzeichnis des Benutzers = C:\Dokumente und Einstellungen\


----------------------------------------------------
c:   Konsole löschen
f:   Objekte in Finalisierungswarteschlange finalisieren
g:   Speicherbereinigung
h:   Diese Hilfemeldung anzeigen
l:   ClassLoader-Liste ausgeben
m:   Speicherbelegung anzeigen
o:   Protokollierung auslösen
p:   Proxy-Konfiguration neu laden
q:   Konsole ausblenden
r:   Richtlinien-Konfiguration neu laden
s:   System- und Bereitstellungseigenschaften ausgeben
t:   Threadliste ausgeben
v:   Thread-Stack ausgeben
x:   ClassLoader-Cache löschen
0-5: Trace-Stufe auf <n> setzen
----------------------------------------------------

Speicher: 14.292K  Frei: 2.410K  (16%) ... abgeschlossen.
Speicher: 30.756K  Frei: 7.045K  (22%) ... abgeschlossen.
Speicher: 40.204K  Frei: 11.336K  (28%) ... abgeschlossen.
Speicher: 61.208K  Frei: 12.312K  (20%) ... abgeschlossen.
Speicher: 65.088K  Frei: 8.785K  (13%) ... abgeschlossen.
Exception in thread "AWT-EventQueue-2" java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferInt.<init>(Unknown Source)
	at java.awt.image.Raster.createPackedRaster(Unknown Source)
	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
	at sun.awt.Win32GraphicsConfig.createAcceleratedImage(Unknown Source)
	at sun.awt.windows.WComponentPeer.createImage(Unknown Source)
	at java.awt.Component.createImage(Unknown Source)
	at AppletFrame$DoubleBufferPanel.paint(AppletFrame.java:177)
	at sun.awt.RepaintArea.paintComponent(Unknown Source)
	at sun.awt.RepaintArea.paint(Unknown Source)
	at sun.awt.windows.WComponentPeer.handleEvent(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.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)
Speicher: 65.088K  Frei: 992K  (1%) ... abgeschlossen.
```

Ich kann auch nur raten, du könntest hier vielleicht mal das #flush() einbauen.

```
public void invalidate() {
  super.invalidate();
  offscreen.flush();
  offscreen = null;
}
```


----------



## Viper173 (1. Mrz 2008)

Wow, danke Oni.

War nicht ganz die Lösung, aber sie bestand auf jedem Fall in der Freigabe des "offscreen" images. 

offscreen = null;  hab ich jetzt statt in der invalidate der Double-Buffer-Klasse manuell bei Verlassen des Editors aufgererufen. Da versteh einer Java..... ???:L


----------



## Oni (2. Mrz 2008)

leider ist in den oberen rängen(level 4 aufwärts) noch nicht soviel los, du solltest nochmal ein bisschen werbung für das game machen 
und eine möglichkeit zum nick-name ändern


----------



## Oni (8. Mrz 2008)

was ein bisschen ärgerlich ist.

ich habe gerade noch 15 kämpfe über, kann aber gegen niemanden mehr kämpfen, weil ich entweder im rang zu hoch bin oder schon gegen den gegner gespielt habe.


----------



## Oni (14. Apr 2008)

arbeitest du eigentlich noch weiter an dem game? sind noch irgendwelche features geplant?


----------



## andre111 (14. Apr 2008)

ich fänds besser wenn man iwie zwischen allen 3 kämpfen z.B 10 min warten müsste... dann kann man länger spielen =)... ansonsten super arbeit


----------

