OutofMemoryError


  • 360Boarder
  • 949 Aufrufe 12 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • OutofMemoryError

    Hi Leute. Ich hab ein Spiel programmiert bei dem ich einen Canvas anlege und ein Endlosgif als Hintergrund laufen lasse, dann lade ich die Spielfigur auch in Form eines Endlosgifs (die Füße bewegen sich vor und zurück) rein. Das funktioniert auch soweit. Doch wenn ich das Prog länger laufen lasse bekomm ich immer einen OutofMemoryError.

    Ich glaube zu wissen woran es liegt: Die Endlosgifs werden immer neu reingeladen und immer neu gezeichnet. Das braucht so viel Speicher...

    Wie kann ich es z.B schaffen das, das Hintergrundgif nur ein mal gezeichnet wird? Denn da es ein Endlosgif ist läuft es ja sowieso weiter, oder? Aber so würde es nicht so viel Speicher brauchen, denk ich.
    Ich hab schon einiges versucht aber mittlerweile bin ich am Verzweifeln.

    Bitte um Hilfe.

    Hier mal der Code meiner Canvas Klasse:
    Game.Hintergrund //Endlosgif für Hintergrund
    Game.Figur //Endlosgif der Spielfigur

    Java-Quellcode

    1. //START// Imports
    2. import java.awt.*;
    3. import java.awt.event.*;
    4. import java.util.*;
    5. import java.io.*;
    6. import java.awt.print.*;
    7. import java.awt.event.MouseEvent.*;
    8. import java.awt.image.*;
    9. //ENDE// Imports
    10. //START//////////////
    11. //Class: MyCanvas //
    12. ///////////////////////
    13. class MyCanvas extends Canvas implements MouseMotionListener, MouseListener,
    14. KeyListener {
    15. Toolkit toolkit = Toolkit.getDefaultToolkit();
    16. //START// paint
    17. public void paint(Graphics g) {
    18. //START// Menübild zeichnen
    19. Game.Menuebild = toolkit.getImage("Titelbild.gif");
    20. if (Game.start == 0) {
    21. if (Game.Menuebild != null) {
    22. g.drawImage(Game.Menuebild, 0, 22, this);
    23. }
    24. }
    25. //ENDE// Menübild zeichnen
    26. //START// Grafiken im Spiel zeichnen
    27. if ((Game.start == 1) && (Game.endestart == 0)) {
    28. //START// Hintergrund des Spiels zeichnen
    29. Game.Hintergrund = toolkit.getImage("Bild.gif");
    30. if (Game.Hintergrund != null) {
    31. g.drawImage(Game.Hintergrund, 0, 22, this);
    32. }
    33. //ENDE// Hintergrund des Spiels zeichnen
    34. //START// Figur des Spiels zeichnen
    35. switch (Game.figur) {
    36. case 1:
    37. Game.Figur = toolkit.getImage("Figur1.gif");
    38. break;
    39. case 2:
    40. Game.Figur = toolkit.getImage("Figur2.gif");
    41. break;
    42. case 3:
    43. Game.Figur = toolkit.getImage("Fig3.gif");
    44. break;
    45. case 4:
    46. Game.Figur = toolkit.getImage("Figur4.gif");
    47. break;
    48. default:
    49. }
    50. if (Game.Figur != null) {
    51. if ((Game.ende == 0) && (Game.ducken == 0) &&
    52. (Game.springen == 0)) {
    53. g.drawImage(Game.Figur, Game.fx, Game.fy, this);
    54. }
    55. }//ENDE// Figur des Spiels zeichnen
    56. }//ENDE// Grafiken im Spiel zeichnen
    57. } //ENDE// paint
    58. }
    59. //ENDE/////////////
    60. //Class: MyCanvas //
    61. ////////////////////
    Alles anzeigen

    [FONT="Century Gothic"]"...erst wollte ich was über deine dürren Ärmchen sagen, doch dann fiel mir deine hässliche Fresse auf..." (Gothic 1 ist Kult)[/FONT]
  • hi,

    durch was dein "outofmemoryerror" hervorgerufen wird, kann ich an diesem code ausschnitt nicht erkennen. grundlegend werden "outofmemoryerror" exceptions ausgeloesst, sobald die jvm keinen speicher mehr fuer ein objekt reservieren kann und sie auch keinen speicher mehr durch den garbage collector zur verfuegung gestellt bekommt. viel. kommt der fehler auch durch die sachen, die ich noch anzumerken habe.

    auch wenn dein source unter bestimmten lizenzen steht, wuerde ich gern auch die restlichen klassen sehn um zu schaun an was es liegen koennte.

    bei deinem code fallen mir allerdings ein paar sachen ein, die du viel. anders machen solltest. du verwendest in deiner klasse den falschen zugriffsmodifikator (public) fuer membervariablen. du solltest fuer das prinzip "information hiding" den modi private verwenden.

    Quellcode

    1. Toolkit toolkit = Toolkit.getDefaultToolkit();


    ein weiterer punkt ist das du mit

    Quellcode

    1. Game.Menuebild = toolkit.getImage("Titelbild.gif");
    jedesmal ein neues objekt erzeugst, was in meinen augen nicht noetig ist, weil sich das bild vermutlich nicht aendert. du solltest es viel. nicht in die paint methode schreiben. ebenso kann es sein das deine paint methode frueher zeichnen will und das bild zu diesem zeitpunkt noch nicht geladen ist. dieses problem kann man auch umgehen mit der klasse mediatracker.

    bei der variable

    Quellcode

    1. Game.Menuebild
    bin ich etwas ins gruebeln gekommen, weil du sie nirgend deklariert und auch keine weiteren pakete einbindest in der sie evtl. deklariert ist. seitden du verwendest public membervariablen ;)


    fuer den ausschnitt solltest du definitiv was anderes einfallen lassen. du kannst vorher (aber definitv nicht in der methode paint) ueberpruefen um welches gif es sich handelt.

    Quellcode

    1. switch (Game.figur) {
    2. case 1:
    3. Game.Figur = toolkit.getImage("Figur1.gif");
    4. break;
    5. case 2:
    6. Game.Figur = toolkit.getImage("Figur2.gif");
    7. break;
    8. case 3:
    9. Game.Figur = toolkit.getImage("Fig3.gif");
    10. break;
    11. case 4:
    12. Game.Figur = toolkit.getImage("Figur4.gif");
    13. break;
    14. default:
    Alles anzeigen


    durch deine ganzen dynamischen einbindungen muessen immer wieder objekte erzeugt werden und die paint methode wird immer dann von der jvm aufgerufen sobald sich etwas am bild aendert z.b. fenster minimieren, maximieren button druecken und so weiter... viel liegt es daran.


    gruss tuney
    [FONT="Arial Black"]
    os:[SIZE="1"]linux slackware 10.0[/SIZE]
    machine:[SIZE="1"]intel core dual 3.6GHz[/SIZE]
    [/FONT]
  • Hi
    Erstmas danke für die schnelle Antwort.

    Ich hab das mit dem toolkit.getImage schon versucht ausherhalb von paint aufzurufen, doch dann hat er es wie du schon gesagt hast nicht gezeichnet. Und wie das mit der Klasse Mediatracker funktionier weis ich leider nicht.

    Die Varibale Game.Menübild habe ich in der Klasse "Game" mittels "static" angelegt.

    Die Überprüfung welche Figur ausgewählt werden soll (switch) funktioniert, da vorher ein Fenster geschlossen wird wo man sich die Figur mittels Mausklick auswählt, deswegen wird paint wieder aufgerufen.

    Die restlichen Klassen würde ich dir gerne zeigen. Es sind jedoch insgesamt 6 Stück. (Ich bin nicht grad der strukturierteste oder ressourcenschonenste Programmierer)
    Falls du dir also die Arbeit wirklich antun möchtest und den ganzen Code durchschauen willst poste ich sie gerne oder schick sie dir per E-Mail oder so, wie du willst ;)
    Ich freue mich natürlich über deine vielen Tipps und danke die für die tolle Hilfe aber das du dir mein komplettes (wirres) Programm durchschaust ist etwas zu viel verlangt von mir. Also werd ich dir den Code nur schicken wenn du das willst und du deine kostbare Zeit in mein Programm investieren willst ;)

    lg.Boarder

    [FONT="Century Gothic"]"...erst wollte ich was über deine dürren Ärmchen sagen, doch dann fiel mir deine hässliche Fresse auf..." (Gothic 1 ist Kult)[/FONT]
  • hi,

    werde mir das programm nur anschauen, das sollte nich so aufwendig sein. ob es wirre ist hin oder her ist egal, schliesslich willste das programm ja auch weiter programmieren. du kannst meine icq nummer adden oder mir eine mail schreiben oder auch beides, liegt in deinem ermessen.


    gruss tuney
    [FONT="Arial Black"]
    os:[SIZE="1"]linux slackware 10.0[/SIZE]
    machine:[SIZE="1"]intel core dual 3.6GHz[/SIZE]
    [/FONT]
  • tuney schrieb:


    grundlegend werden "outofmemoryerror" exceptions ausgeloesst, sobald die jvm keinen speicher mehr fuer ein objekt reservieren kann und sie auch keinen speicher mehr durch den garbage collector zur verfuegung gestellt bekommt.


    Sind Errors nicht ähnlich wie Exceptions, aber werden generell nicht vom Benutzer
    geworfen, sondern von der virtuellen Maschine?
    Also OutOfMemoryError ist keine Exception meine ich damit ;)
  • hi,

    recht hast du. mittlerweile hat sich das wort exceptions bei mir so eingebuergert, das ich damit immer einen fehler meine aber das ist unter java programmierer etwas falsch. error und exception sind zwei verschiedene paar schuhe aber werden beide von der jvm geworfen. beide klassen also error und exception erben von der klasse throwable. der unterschied ist das error fehler meint, die so schwerwiegend sind das sie nicht mehr behandelt werden koennen/sollten und sicherlich zum programmabbruch fuehren.
    bei den exceptions sieht das etwas anders aus, dort kann man fehler abfangen und behandeln damit das programm eben nicht beendet wird, wenn sie nicht behandelt werden dann fuehrt es auch zu einem programmabsturzt. mit programmabsturzt mein ich das programmende.

    auszug aus java2 platform:
    The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement


    ich hab nochmal ein buch herausgekrammt in dem es auch sehr verwaschen steht, viel. hab ich daher meine falsche wortwahl:

    Ausnahmen oder Exceptions sind Instanzen der Klasse java.lang.Throwable oder einer ihrer Subklassen, die zur Laufzeit vom System als Reaktion auf eine Ausnahmesituation generiert werden.


    Quelle: Java & Webapplikationen, Kostenlos nachschlagen und lernen - TEIA AG, Wolfgang Coy

    das schoene ist, das wenn man im web nachschaut unter Kostenlos nachschlagen und lernen - TEIA AG dann findet man diesen satz nicht so wie er dort oben steht, obwohl das buch opensource ist. anscheinend wurde dieser ausschnitt ueberarbeitet, weil er eben schwammig und falsch war.

    uebrigens, weiss ich nicht ob sich dieser thread nun erledigt hat oder nicht, weil ich bislang noch keinen code erhalten habe und auch noch kein code gepostet wurde.


    gruss tuney
    [FONT="Arial Black"]
    os:[SIZE="1"]linux slackware 10.0[/SIZE]
    machine:[SIZE="1"]intel core dual 3.6GHz[/SIZE]
    [/FONT]
  • Hi, danke das du dir die Zeit nimmst mein Prog durchzuschauen.

    Ich hab dir den Code per E-Mail geschickt ;)

    lg.Boarder

    [FONT="Century Gothic"]"...erst wollte ich was über deine dürren Ärmchen sagen, doch dann fiel mir deine hässliche Fresse auf..." (Gothic 1 ist Kult)[/FONT]
  • hi,

    also hab mir das programm angeschaut. weiss jetzt nicht wie lange du schon programmierst aber erstmal hut ab das du soviele ideen in das programm eingebaut hast.

    was mich an dem programm stoert ist, dass du methoden verwendest die als deprecated gekennzeichnet sind, spricht methoden, die u.a. auf grund von preformance einbussen nicht mehr verwendet werden sollten, angezeigt bekommst du die mit der ide eclipse (verfuegbar fuer alle gaengigen os).

    zweitens ist dein programm nicht objektorientiert aufgebaut, weil du 90 % deiner variablen als static deklariert um sie so in anderen klassen verwenden zu koennen. das ist nicht der sinn von oop. eigenschaften (also variablen) kommen in die klasse, in der sie manipuliert werden. wenn eine andere klasse darauf zugreifen muss oder will dann stellt die klassen zugriffmethoden dafuer bereit (information hiding).

    dein programm zeile fuer zeile zu veraendern/verbessern wuerde keinen sinn machen und auch zuviel zeit benoetigen, also kann ich dir nur den vorschlag machen, ich programmiere dein programm nach oop nach oder du schickst mir die fehlenden bilder / musikfiles und ich suche explizit den fehler, der den error hervorruft und verbessere nur den, so dass das programm wieder laeuft.

    ebenso ist es sinnvoll den code als beitrag zu posten, damit jeder ideen/ratschlaege geben kann. evtl. finden sich auch leute die mit an dem programm arbeiten moechten, weil die idee gefaellt.

    gruss tuney
    [FONT="Arial Black"]
    os:[SIZE="1"]linux slackware 10.0[/SIZE]
    machine:[SIZE="1"]intel core dual 3.6GHz[/SIZE]
    [/FONT]
  • Vielen Dank für die tollen Tipps

    Ich würde mich rießig freuen wenn du versuchen könntest den Fehler zu finden.

    Ich werde das Programm erstmal so lassen, jedoch werd ich mir beim nächsten mal gleich von Anfang an deine Tipps zu Herzen nehmen ;)

    Also, könntest du mir deine E-Mail Adresse per PN schicken damit ich dir die Bilder/Sounds als Anhang schicken kann?

    Also hier ist der Code aller Klassen meines Programmes: (Ich bin für jeden Tipp und Verbesserungsvorschlag dankbar)

    Klasse "Game":

    Java-Quellcode

    1. //START// Imports
    2. import javax.sound.sampled.*;
    3. import java.awt.*;
    4. import java.awt.event.*;
    5. import java.util.*;
    6. import java.io.*;
    7. import java.awt.print.*;
    8. import java.applet.*;
    9. import java.awt.event.MouseEvent.*;
    10. import java.awt.image.*;
    11. import javax.swing.*;
    12. import java.awt.MediaTracker.*;
    13. import javax.swing.colorchooser.*;
    14. import javax.swing.border.LineBorder;
    15. import javax.swing.border.TitledBorder;
    16. //ENDE// Imports
    17. //START/////////
    18. //Class: Game //
    19. ////////////////
    20. public class Game extends Frame implements WindowListener, ActionListener {
    21. //START//Deklarationen der verwendeten Variablen
    22. File audioFile; //Audio File Hintergrundmusik
    23. File audioFile2; //Audio File Menümusik
    24. static AudioClip aClip; //Clip mit Hintergrundmusik
    25. static AudioClip bClip; //Clip mit Menümusik
    26. static Image spring; //Bilde der Figur beim springen
    27. static Image duck; //Bild der Figur beim Ducken
    28. static Image Hintergrund; //Bild des Hintergrunds im Spiel
    29. static Image Menuebild; //Bild des Hintergrunds im Menü
    30. static Image Figur; //Bild der Figur im Spiel
    31. static Image Vogel; //Bild des Vogels
    32. static int figur; //Figur die geladen werden soll (1-4)
    33. static Image Endfilm; //Endfilm der beim Gave Over abgespielt wird
    34. static Image Figurenwahl; //Bild aller Figuren die ausgewählt werden können
    35. static int xmenü = 330;
    36. static int ymenü = 150;
    37. Dialog frage; //Dialog der beim Beenden geöffnet wird
    38. static char gedrückt; //Variable zum Auswerten der Tastendrücke
    39. static int start = 0; //Variable die auf 1 gesetzt wird wenn das Spiel gestartet wird
    40. static int ende = 0; // auf 1 wenn Spiel endet
    41. static int endfilm = 0; //auf 1 damit Endfilm abgespielt wird
    42. static int endestart = 0; //auf 1 damit Hintergrund nicht weiterläuft
    43. static int startfigurenwahl = 0;
    44. static int endeducken = 0; //Wird auf 1 gesetzt damit die laufende Figur wieder gezeichnet wird
    45. static int startinfo = 0; //Wird auf 1 gesetzt wenn Infos Butten gedrückt wird
    46. static int ducken = 0; // Wird auf 1 gesetzt wenn nach unten gedrückt wird
    47. static int springen = 0; //Wird auf 1 gesetzt wenn nach oben gedrückt wird
    48. static int endespringen = 0; //Wird auf 1 gesetzt damit die laufende Figur wieder gezeichnet wird
    49. static int figurgewählt = 0; //Wird auf 2 gesetzt wenn eine Figur ausgewählt wurde
    50. Point Punkt1 = new Point(); //Punkt zum auswerten der Position der Spielfigur
    51. static int fx = 160; //Position x der Figur
    52. static int fy = 320; //Position y der Figur
    53. static int vx = 360; //Position x des Vogels
    54. static int vy = 300; //Position y des Vogels
    55. Toolkit toolkit = Toolkit.getDefaultToolkit();
    56. //START// Buttons anlegen
    57. static Button b1 = new Button("Spiel starten");
    58. static Button b2 = new Button("Infos");
    59. static Button b3 = new Button("Beenden");
    60. static Button ja = new Button("Ja");
    61. static Button nein = new Button("Nein");
    62. //ENDE// Buttons anlegen
    63. //ImageIcon icon1 = new ImageIcon("Start.jpg");
    64. //ImageIcon icon2 = new ImageIcon("Infos.jpg");
    65. //ImageIcon icon3 = new ImageIcon("Beenden.jpg");
    66. //javax.swing.JButton b1 = new JButton(icon1);
    67. //javax.swing.JButton b2 = new JButton(icon2);
    68. //javax.swing.JButton b3 = new JButton(icon3);
    69. //ENDE//Deklarationen der verwendeten Variablen
    70. public static void main(String[] args) {
    71. Game a = new Game();
    72. }
    73. //START// GAME
    74. public Game() {
    75. //Game Name
    76. super("Das Spiel");
    77. //START// Hinterdrund Musik laden
    78. try {
    79. audioFile = new File("Bennyhill.wav");
    80. audioFile2 = new File("Menümusik.wav");
    81. aClip = Applet.newAudioClip(audioFile.toURL());
    82. bClip = Applet.newAudioClip(audioFile2.toURL());
    83. } catch (Exception ex) {
    84. System.err.println("Audioclip Error");
    85. }
    86. //ENDE// Hinterdrund Musik laden
    87. //START// Fenster Einstellungen
    88. this.addWindowListener(this);
    89. this.setLayout(null);
    90. this.setResizable(false);
    91. this.setBounds(330, 150, 500, 450);
    92. this.setBackground(Color.white);
    93. this.setVisible(true);
    94. //ENDE// Fenster Einstellungen
    95. //START// Button: Neues Spiel
    96. b1.setBackground(Color.LIGHT_GRAY);
    97. b1.addActionListener(this);
    98. b1.setBounds(375, 275, 100, 35);
    99. this.add(b1);
    100. //ENDE// Button: Neues Spiel
    101. //START// Button: Spiel laden
    102. b2.setBackground(Color.LIGHT_GRAY);
    103. b2.addActionListener(this);
    104. b2.setBounds(375, 315, 100, 35);
    105. this.add(b2);
    106. //ENDE// Button: Spiel laden
    107. //START// Button: Steuerung
    108. b3.setBackground(Color.LIGHT_GRAY);
    109. b3.addActionListener(this);
    110. b3.setBounds(375, 355, 100, 35);
    111. this.add(b3);
    112. //ENDE// Button: Steuerung
    113. //START// Canvas deklarationen
    114. this.add(canv);
    115. canv.setSize(500, 450);
    116. canv.setLocation(0, 0);
    117. canv.addKeyListener(canv);
    118. canv.addMouseListener(canv);
    119. //ENDE// Canvas deklarationen
    120. bClip.play(); //Menümusik abspielen
    121. NewThread th = new NewThread();
    122. Hintergrund = toolkit.getImage("Bild.gif");
    123. this.setVisible(true);
    124. }
    125. //EDNE// Game
    126. public void windowOpened(WindowEvent e) {
    127. }
    128. public void windowClosing(WindowEvent e) {
    129. System.exit(1);
    130. }
    131. public void windowClosed(WindowEvent e) {
    132. }
    133. public void windowIconified(WindowEvent e) {
    134. }
    135. public void windowDeiconified(WindowEvent e) {
    136. }
    137. public void windowActivated(WindowEvent e) {
    138. }
    139. public void windowDeactivated(WindowEvent e) {
    140. }
    141. public void actionPerformed(ActionEvent e) {
    142. //START// Action Button "Start"
    143. if (e.getActionCommand().equals("Spiel starten")) {
    144. startfigurenwahl = 1; //Wird auf 1 gesetzt damit Canvas 2 die Figurenauswahl zeichnet
    145. //START// Buttons im Menü ausblenden
    146. b1.setVisible(false);
    147. b2.setVisible(false);
    148. b3.setVisible(false);
    149. //ENDE// Buttons im Menü ausblenden
    150. Spielfigur c = new Spielfigur(); //Figurenauswahl aufrufen
    151. }
    152. //ENDE// Action Button "Start"
    153. //START// Action Button "Infos"
    154. if (e.getActionCommand().equals("Infos")) {
    155. //START// Buttons im Menü ausblenden
    156. b1.setVisible(false);
    157. b2.setVisible(false);
    158. b3.setVisible(false);
    159. //ENDE// Buttons im Menü ausblenden
    160. startinfo = 1;
    161. Infos i = new Infos(); //Infos aufrufen
    162. }
    163. //ENDE// Action Button "Infos
    164. //START// Action Button "Beenden"
    165. if (e.getActionCommand().equals("Beenden")) {
    166. Label frage2 = new Label("Wollen Sie das Spiel wirklich beenden?"); //Frage die erscheint wenn man auf Beenden klickt
    167. frage = new Dialog(this, "Beenden", true); //Frage dem Dialog hinzufügen
    168. //START// Layout des Dialogs "Beenden"
    169. frage.setLayout(new FlowLayout());
    170. frage.setBounds(250, 250, 300, 100);
    171. frage.setResizable(false);
    172. frage.add(frage2);
    173. frage.add(ja);
    174. ja.addActionListener(this);
    175. frage.add(nein);
    176. nein.addActionListener(this);
    177. frage.show();
    178. //ENDE// Layout des Dialogs "Beenden"
    179. }
    180. //ENDE// Action Button "Beenden"
    181. //START// Buttons Dialog "Beenden"
    182. if (e.getSource() == ja) { //Wenn ja dann Spiel beenden
    183. System.exit(1);
    184. }
    185. if (e.getSource() == nein) { //Wenn nein dann Spiel nicht beenden
    186. frage.hide(); //Dialog ausblenden
    187. }
    188. //ENDE// Buttons Dialog "Beenden"
    189. }
    190. //START///////////
    191. //Class: Thread //
    192. //////////////////
    193. class NewThread extends Thread {
    194. NewThread() {
    195. start();
    196. }
    197. public void run() {
    198. while (true) {
    199. //START// Ducken Annimation
    200. //Wenn ducken gedrückt dann warten bis ducken gezeichnet ist und dann Bild flushen
    201. if (endeducken == 1) {
    202. try {
    203. Thread.sleep(600);
    204. duck.flush();
    205. } catch (InterruptedException ex) {
    206. }
    207. endeducken = 0;
    208. ducken = 0;
    209. }
    210. //ENDE// Ducken Annimation
    211. //START// Springen Annimation
    212. if (endespringen == 1) {
    213. try {
    214. Thread.sleep(600);
    215. spring.flush();
    216. } catch (InterruptedException ex) {
    217. }
    218. endespringen = 0;
    219. springen = 0;
    220. }
    221. //ENDE// Springen Annimation
    222. }
    223. }
    224. }
    225. //ENDE////////////
    226. //Class: Thread //
    227. //////////////////
    228. static MyCanvas canv = new MyCanvas(); //MyCanvas aufrufen
    229. }
    230. //ENDE//////////
    231. //Class: Game //
    232. ////////////////
    Alles anzeigen


    --------------------------------------------------------------------
    Klasse "Infos":

    Java-Quellcode

    1. //START// Imports
    2. import java.awt.*;
    3. import java.awt.event.*;
    4. import java.util.*;
    5. import java.io.*;
    6. import java.awt.print.*;
    7. import java.applet.*;
    8. import java.awt.event.MouseEvent.*;
    9. import java.awt.image.*;
    10. import javax.swing.*;
    11. import java.awt.MediaTracker.*;
    12. import javax.swing.colorchooser.*;
    13. import javax.swing.border.LineBorder;
    14. import javax.swing.border.TitledBorder;
    15. //ENDE// Imports
    16. //START//////////
    17. //Class: Infos //
    18. /////////////////
    19. public class Infos extends Frame implements WindowListener, ActionListener {
    20. //START// Deklaratoin der verwendeten Variablen
    21. static Image Info; //Bild der Figuren
    22. Toolkit toolkit = Toolkit.getDefaultToolkit();
    23. //START//Buttons
    24. Button zurück = new Button("Zurück");
    25. //ENDE// Buttons
    26. //ENDE// Deklaration der verwendeten Variablen
    27. public static void main(String[] args) {
    28. Infos b = new Infos();
    29. }
    30. //START// Infos
    31. public Infos() {
    32. super("Spielinfo");
    33. //START// Fenster Einstellungen
    34. this.addWindowListener(this);
    35. this.setLayout(null);
    36. this.setResizable(false);
    37. this.setBounds(330, 150, 500, 450);
    38. this.setBackground(Color.white);
    39. this.setVisible(true);
    40. //ENDE// Fenster Einstellungen
    41. //START// Buttons
    42. zurück.setBackground(Color.LIGHT_GRAY);
    43. zurück.addActionListener(this);
    44. zurück.setBounds(400, 380, 80, 35);
    45. this.add(zurück);
    46. //ENDE// Buttons
    47. //START// Canvas deklarationen
    48. this.add(canv3);
    49. canv3.setSize(500, 450);
    50. canv3.setLocation(0, 0);
    51. canv3.addMouseListener(canv3);
    52. //ENDE// Canvas deklarationen
    53. }
    54. //ENDE// Infos
    55. public void windowActivated(WindowEvent e) {
    56. }
    57. public void windowClosed(WindowEvent e) {
    58. }
    59. public void windowClosing(WindowEvent e) {
    60. System.exit(1);
    61. }
    62. public void windowDeactivated(WindowEvent e) {
    63. }
    64. public void windowDeiconified(WindowEvent e) {
    65. }
    66. public void windowIconified(WindowEvent e) {
    67. }
    68. public void windowOpened(WindowEvent e) {
    69. }
    70. public void actionPerformed(ActionEvent e) {
    71. //START// Button zurück
    72. if (e.getActionCommand().equals("Zurück")) {
    73. this.setVisible(false);
    74. //START// Buttons im Menü einblenden
    75. Game.b1.setVisible(true);
    76. Game.b2.setVisible(true);
    77. Game.b3.setVisible(true);
    78. //ENDE// Buttons im Menü einblenden
    79. }
    80. //ENDE// Button zurück
    81. }
    82. static MyCanvas3 canv3 = new MyCanvas3(); //MyCanvas2 aufrufen
    83. }
    84. //START//////////
    85. //Class: Infos //
    86. /////////////////
    Alles anzeigen


    --------------------------------------------------------------------
    Klasse "Spielfigur":

    Java-Quellcode

    1. //START// Imports
    2. import java.awt.*;
    3. import java.awt.event.*;
    4. import java.util.*;
    5. import java.io.*;
    6. import java.awt.print.*;
    7. import java.applet.*;
    8. import java.awt.event.MouseEvent.*;
    9. import java.awt.image.*;
    10. import javax.swing.*;
    11. import java.awt.MediaTracker.*;
    12. import javax.swing.colorchooser.*;
    13. import javax.swing.border.LineBorder;
    14. import javax.swing.border.TitledBorder;
    15. //ENDE// Imports
    16. //START///////////////
    17. //Class: Spielfigur //
    18. //////////////////////
    19. public class Spielfigur extends Frame implements WindowListener, ActionListener {
    20. //START// Deklaratoin der verwendeten Variablen
    21. Image Figuren; //Bild der Figuren
    22. Toolkit toolkit = Toolkit.getDefaultToolkit();
    23. //START//Buttons
    24. Button fig1 = new Button("1. wählen");
    25. Button fig2 = new Button("2. wählen");
    26. Button fig3 = new Button("3. wählen");
    27. Button fig4 = new Button("4. wählen");
    28. //ENDE// Buttons
    29. //ENDE// Deklaration der verwendeten Variablen
    30. public static void main(String[] args) {
    31. Spielfigur b = new Spielfigur();
    32. }
    33. //START// Spielfigur
    34. public Spielfigur() {
    35. super("Figurauswahl");
    36. //START// Fenster Einstellungen
    37. this.addWindowListener(this);
    38. this.setLayout(null);
    39. this.setResizable(false);
    40. this.setBounds(330, 150, 500, 450);
    41. this.setBackground(Color.white);
    42. this.setVisible(true);
    43. //ENDE// Fenster Einstellungen
    44. //START// Buttons
    45. fig1.setBackground(Color.LIGHT_GRAY);
    46. fig1.addActionListener(this);
    47. fig1.setBounds(50, 370, 80, 35);
    48. this.add(fig1);
    49. fig2.setBackground(Color.LIGHT_GRAY);
    50. fig2.addActionListener(this);
    51. fig2.setBounds(150, 370, 80, 35);
    52. this.add(fig2);
    53. fig3.setBackground(Color.LIGHT_GRAY);
    54. fig3.addActionListener(this);
    55. fig3.setBounds(255, 370, 80, 35);
    56. this.add(fig3);
    57. fig4.setBackground(Color.LIGHT_GRAY);
    58. fig4.addActionListener(this);
    59. fig4.setBounds(360, 370, 80, 35);
    60. this.add(fig4);
    61. //ENDE// Buttons
    62. //START// Canvas deklarationen
    63. this.add(canv2);
    64. canv2.setSize(500, 450);
    65. canv2.setLocation(0, 0);
    66. canv2.addMouseListener(canv2);
    67. //ENDE// Canvas deklarationen
    68. }
    69. //ENDE// Spielfigur
    70. public void windowActivated(WindowEvent e) {
    71. }
    72. public void windowClosed(WindowEvent e) {
    73. }
    74. public void windowClosing(WindowEvent e) {
    75. System.exit(1);
    76. }
    77. public void windowDeactivated(WindowEvent e) {
    78. }
    79. public void windowDeiconified(WindowEvent e) {
    80. }
    81. public void windowIconified(WindowEvent e) {
    82. }
    83. public void windowOpened(WindowEvent e) {
    84. }
    85. public void actionPerformed(ActionEvent e) {
    86. //START// Button fig1
    87. if (e.getActionCommand().equals("1. wählen")) {
    88. Game.figur = 1;
    89. Game.figurgewählt = 1;
    90. this.setVisible(false);
    91. Game.canv.requestFocus(); //Fokus auf canvas setzen
    92. Game.bClip.stop(); //Menümusik stoppen
    93. Game.aClip.play(); //Musik abspielen
    94. //START// Variablen und Einstellungen zum Spiel beginnen
    95. Game.start = 1; //Start auf 1 setzten damit Spiel startet
    96. Game.Endfilm.flush();
    97. Game.fx = 160; //Figur auf Startposition zurück setzen
    98. Game.fy = 320; //Figur auf Startposition zurück setzen
    99. Game.endfilm = 0;
    100. //ENDE// Variablen und Einstellungen zum Spiel beginnen
    101. }
    102. //ENDE// Button fig1
    103. //START// Button fig2
    104. if (e.getActionCommand().equals("2. wählen")) {
    105. Game.figur=2;
    106. Game.figurgewählt = 1;
    107. this.setVisible(false);
    108. Game.canv.requestFocus(); //Fokus auf canvas setzen
    109. Game.bClip.stop(); //Menümusik stoppen
    110. Game.aClip.play(); //Musik abspielen
    111. //START// Variablen und Einstellungen zum Spiel beginnen
    112. Game.start = 1; //Start auf 1 setzten damit Spiel startet
    113. Game.Endfilm.flush();
    114. Game.fx = 160; //Figur auf Startposition zurück setzen
    115. Game.fy = 320; //Figur auf Startposition zurück setzen
    116. Game.endfilm = 0;
    117. //ENDE// Variablen und Einstellungen zum Spiel beginnen
    118. }
    119. //ENDE// Button fig2
    120. //START// Button fig3
    121. if (e.getActionCommand().equals("3. wählen")) {
    122. Game.figur = 3;
    123. Game.figurgewählt = 1;
    124. this.setVisible(false);
    125. Game.canv.requestFocus(); //Fokus auf canvas setzen
    126. Game.bClip.stop(); //Menümusik stoppen
    127. Game.aClip.play(); //Musik abspielen
    128. //START// Variablen und Einstellungen zum Spiel beginnen
    129. Game.start = 1; //Start auf 1 setzten damit Spiel startet
    130. Game.Endfilm.flush();
    131. Game.fx = 160; //Figur auf Startposition zurück setzen
    132. Game.fy = 320; //Figur auf Startposition zurück setzen
    133. Game.endfilm = 0;
    134. //ENDE// Variablen und Einstellungen zum Spiel beginnen
    135. }
    136. //ENDE// Button fig3
    137. //START// Button fig4
    138. if (e.getActionCommand().equals("4. wählen")) {
    139. Game.figur = 4;
    140. Game.figurgewählt = 1;
    141. this.setVisible(false);
    142. Game.canv.requestFocus(); //Fokus auf canvas setzen
    143. Game.bClip.stop(); //Menümusik stoppen
    144. Game.aClip.play(); //Musik abspielen
    145. //START// Variablen und Einstellungen zum Spiel beginnen
    146. Game.start = 1; //Start auf 1 setzten damit Spiel startet
    147. Game.Endfilm.flush();
    148. Game.fx = 160; //Figur auf Startposition zurück setzen
    149. Game.fy = 320; //Figur auf Startposition zurück setzen
    150. Game.endfilm = 0;
    151. //ENDE// Variablen und Einstellungen zum Spiel beginnen
    152. }
    153. //ENDE// Button fig4
    154. }
    155. static MyCanvas2 canv2 = new MyCanvas2(); //MyCanvas2 aufrufen
    156. }
    157. //START///////////////
    158. //Class: Spielfigur //
    159. //////////////////////
    Alles anzeigen


    --------------------------------------------------------------------
    Klasse "MyCanvas":

    Java-Quellcode

    1. //START// Imports
    2. import java.awt.*;
    3. import java.awt.event.*;
    4. import java.util.*;
    5. import java.io.*;
    6. import java.awt.print.*;
    7. import java.applet.*;
    8. import java.awt.event.MouseEvent.*;
    9. import java.awt.image.*;
    10. import javax.swing.*;
    11. import java.awt.MediaTracker.*;
    12. import javax.swing.colorchooser.*;
    13. import javax.swing.border.LineBorder;
    14. import javax.swing.border.TitledBorder;
    15. //ENDE// Imports
    16. //START/////////////
    17. //Class: MyCanvas //
    18. ////////////////////
    19. class MyCanvas extends Canvas implements MouseMotionListener, MouseListener,
    20. KeyListener {
    21. //START//Deklarationen der verwendeten Variablen
    22. private Image buffImage; //Variable zum Synchronisieren der Bilder
    23. private Graphics buffG; //Variable zum Synchronisieren der Bilder
    24. Toolkit toolkit = Toolkit.getDefaultToolkit();
    25. //ENDE//Deklarationen der verwendeten Variablen
    26. //START// paint
    27. public void paint(Graphics g) {
    28. //START// Menübild zeichnen
    29. Game.Menuebild = toolkit.getImage("Titelbild.gif");
    30. if (Game.start == 0) {
    31. if (Game.Menuebild != null) {
    32. g.drawImage(Game.Menuebild, 0, 22, this);
    33. }
    34. }
    35. //ENDE// Menübild zeichnen
    36. //START// Grafiken im Spiel zeichnen
    37. if ((Game.start == 1) && (Game.endestart == 0)) {
    38. //START// Hintergrund des Spiels zeichnen
    39. if (Game.Hintergrund != null) {
    40. g.drawImage(Game.Hintergrund, 0, 22, this);
    41. }
    42. //ENDE// Hintergrund des Spiels zeichnen
    43. //START// Figur des Spiels zeichnen
    44. switch (Game.figur) {
    45. case 1:
    46. Game.Figur = toolkit.getImage("Figur1.gif");
    47. break;
    48. case 2:
    49. Game.Figur = toolkit.getImage("Figur2.gif");
    50. break;
    51. case 3:
    52. Game.Figur = toolkit.getImage("Figur3.gif");
    53. break;
    54. case 4:
    55. Game.Figur = toolkit.getImage("Figur4.gif");
    56. break;
    57. default:
    58. }
    59. if (Game.Figur != null) {
    60. if ((Game.ende == 0) && (Game.ducken == 0) &&
    61. (Game.springen == 0)) {
    62. g.drawImage(Game.Figur, Game.fx, Game.fy, this);
    63. }
    64. }
    65. //ENDE// Figur des Spiels zeichnen
    66. }
    67. //ENDE// Grafiken im Spiel zeichnen
    68. //START// Figur duckt sich zeichnen
    69. Game.duck = toolkit.getImage("ducken.gif");
    70. if (Game.ducken == 1) {
    71. if (Game.duck != null) {
    72. g.drawImage(Game.duck, Game.fx, Game.fy, this);
    73. }
    74. }
    75. //ENDE// Figur duckt sich zeichnen
    76. //START// Figur springt zeichnen
    77. Game.spring = toolkit.getImage("jump.gif");
    78. if (Game.springen == 1) {
    79. if (Game.spring != null) {
    80. g.drawImage(Game.spring, Game.fx, Game.fy - 45, this);
    81. }
    82. }
    83. //ENDE// Figur springt zeichnen
    84. //START// Endfilm abspielen
    85. Game.Endfilm = toolkit.getImage("Endsequenz.gif");
    86. if (Game.endfilm == 1) {
    87. Game.aClip.stop(); //Spielmusik stopen
    88. if (Game.Endfilm != null) {
    89. g.drawImage(Game.Endfilm, 0, 22, this);
    90. }
    91. }
    92. //ENDE// Endfilm abspielen
    93. }
    94. //ENDE// paint
    95. //START// Bilder "synchronosieren"
    96. public void update(Graphics g) {
    97. int w = getSize().width;
    98. int h = getSize().height;
    99. if (buffImage == null) {
    100. buffImage = createImage(w, h);
    101. buffG = buffImage.getGraphics();
    102. }
    103. buffG.setColor(getBackground());
    104. buffG.fillRect(0, 0, w, h);
    105. buffG.setColor(getForeground());
    106. paint(buffG);
    107. g.drawImage(buffImage, 0, 0, this);
    108. }
    109. //ENDE// Bilder "synchronosieren"
    110. public void mouseDragged(MouseEvent e) {
    111. }
    112. public void mouseMoved(MouseEvent e) {
    113. }
    114. public void mouseClicked(MouseEvent e) {
    115. //START// Wenn nach Endfilm geklickt wird zurück zum Hauptmenü
    116. if (Game.endfilm == 1) {
    117. Game.endfilm = 0;
    118. Game.endestart = 0;
    119. Game.start = 0;
    120. Game.ende = 0;
    121. Game.b1.setVisible(true);
    122. Game.b2.setVisible(true);
    123. Game.b3.setVisible(true);
    124. Game.bClip.play(); //Menümusik abspielen
    125. }
    126. //ENDE// Wenn nach Endfilm geklickt wird zurück zum Hauptmenü
    127. }
    128. public void mousePressed(MouseEvent e) {
    129. }
    130. public void mouseReleased(MouseEvent e) {
    131. }
    132. public void mouseEntered(MouseEvent e) {
    133. }
    134. public void mouseExited(MouseEvent e) {
    135. }
    136. public void keyPressed(java.awt.event.KeyEvent e) {
    137. //START// Tastendrücke auswerten
    138. Game.gedrückt = e.getKeyChar();
    139. if (e.getKeyCode() == e.VK_RIGHT) { //Wenn -> dann nach rechts
    140. Game.fx = Game.fx + 2;
    141. }
    142. if (e.getKeyCode() == e.VK_LEFT) { //Wenn <- dann nach links
    143. Game.fx = Game.fx - 2;
    144. }
    145. if (e.getKeyCode() == e.VK_UP) { //Wenn ^ dann springen
    146. Game.springen = 1;
    147. Game.endespringen = 1;
    148. }
    149. if (e.getKeyCode() == e.VK_DOWN) {
    150. Game.ducken = 1;
    151. Game.endeducken = 1;
    152. }
    153. //START// Wenn Position der Figur gleich Position Stein dann Game Over
    154. if (Game.fx == 140) {
    155. Game.ende = 1;
    156. Game.start = 1;
    157. Game.endestart = 1;
    158. Game.endfilm = 1;
    159. }
    160. //ENDE// Wenn Position der Figur gleich Position Stein dann Game Over
    161. //ENDE// Tastendrücke auswerten
    162. }
    163. public void keyReleased(java.awt.event.KeyEvent e) {
    164. }
    165. public void keyTyped(java.awt.event.KeyEvent e) {
    166. }
    167. }
    168. //ENDE/////////////
    169. //Class: MyCanvas //
    170. ////////////////////
    Alles anzeigen


    --------------------------------------------------------------------
    Klasse "MyCanvas 2":

    Java-Quellcode

    1. //START// Imports
    2. import java.awt.*;
    3. import java.awt.event.*;
    4. import java.util.*;
    5. import java.io.*;
    6. import java.awt.print.*;
    7. import java.applet.*;
    8. import java.awt.event.MouseEvent.*;
    9. import java.awt.image.*;
    10. import javax.swing.*;
    11. import java.awt.MediaTracker.*;
    12. import javax.swing.colorchooser.*;
    13. import javax.swing.border.LineBorder;
    14. import javax.swing.border.TitledBorder;
    15. //ENDE// Imports
    16. //START//////////////
    17. //Class: MyCanvas2 //
    18. /////////////////////
    19. class MyCanvas2 extends Canvas implements MouseMotionListener, MouseListener {
    20. //START//Deklarationen der verwendeten Variablen
    21. Toolkit toolkit = Toolkit.getDefaultToolkit();
    22. //ENDE//Deklarationen der verwendeten Variablen
    23. //START// paint
    24. public void paint(Graphics g) {
    25. //START// Figurenauswahl zeichnen
    26. Game.Figurenwahl = toolkit.getImage("Auswahl.jpg");
    27. if (Game.startfigurenwahl == 1) {
    28. if (Game.Figurenwahl != null) {
    29. g.drawImage(Game.Figurenwahl, 0, 22, this);
    30. }
    31. }
    32. //ENDE// Figurenauswahl zeichnen
    33. }
    34. //ENDE// paint
    35. public void mouseDragged(MouseEvent e) {
    36. }
    37. public void mouseMoved(MouseEvent e) {
    38. }
    39. public void mouseClicked(MouseEvent e) {
    40. }
    41. public void mousePressed(MouseEvent e) {
    42. }
    43. public void mouseReleased(MouseEvent e) {
    44. }
    45. public void mouseEntered(MouseEvent e) {
    46. }
    47. public void mouseExited(MouseEvent e) {
    48. }
    49. }
    50. //ENDE///////////////
    51. //Class: MyCanvas2 //
    52. /////////////////////
    Alles anzeigen


    --------------------------------------------------------------------
    Klasse "MyCanvas3":

    Java-Quellcode

    1. //START// Imports
    2. import java.awt.*;
    3. import java.awt.event.*;
    4. import java.util.*;
    5. import java.io.*;
    6. import java.awt.print.*;
    7. import java.applet.*;
    8. import java.awt.event.MouseEvent.*;
    9. import java.awt.image.*;
    10. import javax.swing.*;
    11. import java.awt.MediaTracker.*;
    12. import javax.swing.colorchooser.*;
    13. import javax.swing.border.LineBorder;
    14. import javax.swing.border.TitledBorder;
    15. //ENDE// Imports
    16. //START//////////////
    17. //Class: MyCanvas3 //
    18. /////////////////////
    19. class MyCanvas3 extends Canvas implements MouseMotionListener, MouseListener {
    20. //START//Deklarationen der verwendeten Variablen
    21. Toolkit toolkit = Toolkit.getDefaultToolkit();
    22. //ENDE//Deklarationen der verwendeten Variablen
    23. //START// paint
    24. public void paint(Graphics g) {
    25. //START// Infos zeichnen
    26. Infos.Info = toolkit.getImage("Info.jpg");
    27. if (Infos.Info != null) {
    28. g.drawImage(Infos.Info, 0, 22, this);
    29. }
    30. //ENDE// Infos zeichnen
    31. }
    32. //ENDE// paint
    33. public void mouseDragged(MouseEvent e) {
    34. }
    35. public void mouseMoved(MouseEvent e) {
    36. }
    37. public void mouseClicked(MouseEvent e) {
    38. }
    39. public void mousePressed(MouseEvent e) {
    40. }
    41. public void mouseReleased(MouseEvent e) {
    42. }
    43. public void mouseEntered(MouseEvent e) {
    44. }
    45. public void mouseExited(MouseEvent e) {
    46. }
    47. }
    48. //ENDE///////////////
    49. //Class: MyCanvas3 //
    50. /////////////////////
    Alles anzeigen


    --------------------------------------------------------------------
    Klasse "MyCanvas4":

    Java-Quellcode

    1. //START// Imports
    2. import java.awt.*;
    3. import java.awt.event.*;
    4. import java.util.*;
    5. import java.io.*;
    6. import java.awt.print.*;
    7. import java.applet.*;
    8. import java.awt.event.MouseEvent.*;
    9. import java.awt.image.*;
    10. import javax.swing.*;
    11. import java.awt.MediaTracker.*;
    12. import javax.swing.colorchooser.*;
    13. import javax.swing.border.LineBorder;
    14. import javax.swing.border.TitledBorder;
    15. //ENDE// Imports
    16. //START//////////////
    17. //Class: MyCanvas4 //
    18. /////////////////////
    19. class MyCanvas extends Canvas implements MouseMotionListener, MouseListener,
    20. KeyListener {
    21. //START//Deklarationen der verwendeten Variablen
    22. private Image buffImage; //Variable zum Synchronisieren der Bilder
    23. private Graphics buffG; //Variable zum Synchronisieren der Bilder
    24. Toolkit toolkit = Toolkit.getDefaultToolkit();
    25. //ENDE//Deklarationen der verwendeten Variablen
    26. //START// paint
    27. public void paint(Graphics g) {
    28. //START// Figur des Spiels zeichnen
    29. if (Game.Figur != null) {
    30. if (Game.ende == 0) {
    31. g.drawImage(Game.Figur, Game.fx, Game.fy, this);
    32. }
    33. }
    34. //ENDE// Figur des Spiels zeichnen
    35. }
    36. //ENDE// paint
    37. //START// Bilder "synchronosieren"
    38. public void update(Graphics g) {
    39. int w = getSize().width;
    40. int h = getSize().height;
    41. if (buffImage == null) {
    42. buffImage = createImage(w, h);
    43. buffG = buffImage.getGraphics();
    44. }
    45. buffG.setColor(getBackground());
    46. buffG.fillRect(0, 0, w, h);
    47. buffG.setColor(getForeground());
    48. paint(buffG);
    49. g.drawImage(buffImage, 0, 0, this);
    50. }
    51. //ENDE// Bilder "synchronosieren"
    52. public void mouseDragged(MouseEvent e) {
    53. }
    54. public void mouseMoved(MouseEvent e) {
    55. }
    56. public void mouseClicked(MouseEvent e) {
    57. }
    58. public void mousePressed(MouseEvent e) {
    59. }
    60. public void mouseReleased(MouseEvent e) {
    61. }
    62. public void mouseEntered(MouseEvent e) {
    63. }
    64. public void mouseExited(MouseEvent e) {
    65. }
    66. public void keyPressed(java.awt.event.KeyEvent e) {
    67. //START// Tastendrücke auswerten
    68. Game.gedrückt = e.getKeyChar();
    69. if (e.getKeyCode() == e.VK_RIGHT) { //Wenn -> dann nach rechts
    70. Game.fx = Game.fx + 2;
    71. }
    72. if (e.getKeyCode() == e.VK_LEFT) { //Wenn <- dann nach links
    73. Game.fx = Game.fx - 2;
    74. }
    75. if (e.getKeyCode() == e.VK_UP) { //Wenn ^ dann springen
    76. Game.fy = Game.fy - 2;
    77. }
    78. if ((e.getKeyCode() == e.VK_DOWN) && (Game.fy < 320)) {
    79. Game.fy = Game.fy + 2;
    80. }
    81. //START// Wenn Position der Figur gleich Position Stein dann Game Over
    82. if (Game.fx == 140) {
    83. Game.ende = 1;
    84. Game.start = 1;
    85. Game.endestart = 1;
    86. Game.endfilm = 1;
    87. }
    88. //ENDE// Wenn Position der Figur gleich Position Stein dann Game Over
    89. //ENDE// Tastendrücke auswerten
    90. }
    91. public void keyReleased(java.awt.event.KeyEvent e) {
    92. }
    93. public void keyTyped(java.awt.event.KeyEvent e) {
    94. }
    95. }
    96. //ENDE///////////////
    97. //Class: MyCanvas4 //
    98. /////////////////////
    Alles anzeigen


    lg.Boarder

    [FONT="Century Gothic"]"...erst wollte ich was über deine dürren Ärmchen sagen, doch dann fiel mir deine hässliche Fresse auf..." (Gothic 1 ist Kult)[/FONT]
  • hi,

    danke fuer die restlichen dateien. ich habe das programm seit gestern auf meinem notebook laufen und bislang wurde noch kein error geworfen. schreib mir bitte mal was du im spiel bis zum absturz gemacht hast, damit ich den fehler reproduzieren kann.

    EDIT:

    was mir gerade noch auffaellt ist dieser snippets.

    Quellcode

    1. public void update(Graphics g) {
    2. int w = getSize().width;
    3. int h = getSize().height;
    4. if (buffImage == null) {
    5. buffImage = createImage(w, h);
    6. buffG = buffImage.getGraphics();
    7. }
    8. buffG.setColor(getBackground());
    9. buffG.fillRect(0, 0, w, h);
    10. buffG.setColor(getForeground());
    11. paint(buffG);
    12. g.drawImage(buffImage, 0, 0, this);
    13. }
    Alles anzeigen


    du willst damit nicht etwa den hintergrund loeschen damit keine verwaschungen entstehen oder?

    gruss tuney
    [FONT="Arial Black"]
    os:[SIZE="1"]linux slackware 10.0[/SIZE]
    machine:[SIZE="1"]intel core dual 3.6GHz[/SIZE]
    [/FONT]
  • Also, ich starte das Programm, wähle eine Spiefigur aus und dann beginnt das Spiel. Es läuft ca. 10 sek, dann verschwindet der Hintergrund und ein OutofMemoryError wird ausgegeben.


    Ja, mit diesem Code verhindere ich das die Bilder flimmern und unschöne weiße Striche im Bild entstehen. Ist das keine gute Idee oder gibt es was besseres um dieses Problem zu lösen?

    Quellcode

    1. public void update(Graphics g) {
    2. int w = getSize().width;
    3. int h = getSize().height;
    4. if (buffImage == null) {
    5. buffImage = createImage(w, h);
    6. buffG = buffImage.getGraphics();
    7. }
    8. buffG.setColor(getBackground());
    9. buffG.fillRect(0, 0, w, h);
    10. buffG.setColor(getForeground());
    11. paint(buffG);
    12. g.drawImage(buffImage, 0, 0, this);
    13. }
    Alles anzeigen

    [FONT="Century Gothic"]"...erst wollte ich was über deine dürren Ärmchen sagen, doch dann fiel mir deine hässliche Fresse auf..." (Gothic 1 ist Kult)[/FONT]
  • hi,

    hmm, das is echt komisch, weil ich mein notebook jetzt 2 tage lang hab laufen lassen. ich hab es auch mit allen figuren und jeglichen moeglichkeiten probiert, die mir dein programm erlaubt. mir sind noch ein paar code stuecke aufgefallen, die man anders realisieren sollte. den thread z.b. den du in der ersten klasse startest, muss verschoben werden, weil er rein logisch nicht dort hingehoert und das programm unnoetig belastet. wenn du solche belastungen an deinem programm feststellen moechtest, dann kannst du den taskmanager unter windows verwenden. der sollte aber nur fuer eine vor-vorerste diagnose verwendet werden.

    den code zum loeschen des hintergrunds kann man verkuerzen auf einen aufruf. den code werde ich dir posten sobald ich wieder daheim bin. am wochenende werde ich mich nochmal dransetzen und drueber schaun.

    gruss tuney
    [FONT="Arial Black"]
    os:[SIZE="1"]linux slackware 10.0[/SIZE]
    machine:[SIZE="1"]intel core dual 3.6GHz[/SIZE]
    [/FONT]