# Point & Click Thread Probleme



## MrXYF (9. Mai 2014)

Hallo,
ich bin neu in diesem Forum und hoffe, dass ihr mir bei meinem Problem weiter helfen könnt 
Mit einem Kumpel zusammen will ich ein kleines Point & Click Andventure erstellen. Grafiken und so sind in arbeit, aber als erstes braucht man natürlich ein Grundgerüst des Spieles...
Daran sitz ich grad, und hab schon den ersten Fehler, den ich leider allein nicht lösen kann...
Damit man es sich besser vorstellen kann, ist die Projekt Datei im Anhang, den Quellcode poste ich auch 
Zurück zum Fehler: Wenn ich im Spiel bin kann ich mit rechts Klick das Gegenstandsmenu aufrufe.Wenn ich im Gegnstandsmenu normal klicke, dann stürzt das Spiel manchmal ab. 
Im Debug Modus komm ich auch nicht weiter, da steht aber immer:
Thread [AWT-EventQueue-0] (Suspended (exception NullPointerException)) EventDispatchThread.run() line: not available	

Ich hofe jetzt natürlich, dass ihr mir weiter helfen könnt, und wenn es irgendwas, wegen unsauberem programmieren zu beanstanden gibt (wahrscheinlich genug...), könnt ihr das auch gerne schreiben 

Danke schonmal im voraus, 
Schöne Grüße 

Code: (Ich denke mal der wichtigste, wenn was fehlt, einfach schreiben  )


Spoiler: Main





```
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * @author MrXYF
 * Main steuert alles
 *
 */
public class Main implements Runnable{
   
   final int WIDTH = 640;
   final int HEIGHT = 400;
   final int STARTX = 300;
   final int STARTY = 375;
   
   JFrame frame;
   Canvas gameCanvas;
   Menu menu;
   GegenstandMenu gegenstandMenu;
   BufferStrategy bufferStrategy;
   private BufferedImage bg0IMG, bg1IMG, bg2IMG, bg3IMG, bg4IMG, playerIMG;
   private int mouseX, mouseY, dX, dY, level, mode;
   private boolean pressed1, pressed2, gegenstandMenubool;
   
   private GegenstandListe gegenstaende;
   private ItemKiste itemKiste;
 
   
   public Main(){
      frame = new JFrame("Adventure Test");
      
      
      level = 2;
      mode = 0;
      mouseX = STARTX;
      mouseY = STARTY;
      dX = STARTX;
      dY = STARTY;
      pressed1 = false;
      pressed2 = false;
      gegenstandMenubool = false;
      
      
      gegenstaende = new GegenstandListe();
      gegenstaende.level(level);
      
      itemKiste = new ItemKiste();
      for(int i = 0; i < 20; i++){
    	  itemKiste.addToList(new Item());
      }
      
      JPanel panel = (JPanel) frame.getContentPane();
      panel.setPreferredSize(new Dimension(WIDTH, HEIGHT));
      panel.setLayout(null);
      
      gameCanvas = new Canvas();
      gameCanvas.setBounds(0, 0, WIDTH, HEIGHT);
      gameCanvas.setIgnoreRepaint(true);
      
      menu = new Menu();
      
      panel.add(gameCanvas);
      
      MouseAdapter adapter = new MouseControl();
      gameCanvas.addMouseListener(adapter);
      gameCanvas.addMouseMotionListener(adapter);
      
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setResizable(false);
      frame.setVisible(true);
      
      gameCanvas.createBufferStrategy(2);
      bufferStrategy = gameCanvas.getBufferStrategy();
      
      gameCanvas.requestFocus();
   }
   
        
   private class MouseControl extends MouseAdapter{
      @Override
      public void mousePressed(MouseEvent e) {
    	  if(e.getButton() == MouseEvent.BUTTON1){
	    	  if(gegenstandMenubool ){
	    		  short s = gegenstandMenu.clickCheck(e.getX(), e.getY());
	    		  if(s == 0){
	    			  gegenstaende.getLastClicked().see();
	    		  } else if(s == 1){
	    			  gegenstaende.getLastClicked().speak();
	    		  } else if(s == 2){
	    			  gegenstaende.getLastClicked().touch();
	    		  }
	    		  gegenstandMenubool = false;
	    		  gegenstandMenu = null;
	    	  }else if(gegenstaende.clickCheckAll(e.getX(), e.getY())){
	    		  gegenstandMenubool = true;
	    	  }
	    	  
	    	  if(mode == 2){
	    		  itemKiste.clickCheckAll(e.getX(), e.getY());
	    	  }
	    	  pressed1 = true;
    	  } else if(e.getButton() == MouseEvent.BUTTON3){
    		  pressed2 = true;
    	  }
    	  
      }
      
      @Override
      public void mouseReleased(MouseEvent e) {
    	  System.out.println("MAUS R: " + e);
    	  pressed1 = false;
    	  pressed2= false;
      }
      
      @Override
      public void mouseMoved(MouseEvent e) {
    	  mouseX = e.getX();
   	 	  mouseY = e.getY();
   	 	  if(gegenstandMenubool){
   	 		  gegenstandMenu.mouseCheck(mouseX, mouseY);
   	 	  }
   	 	  if(mode == 2){
   	 		  itemKiste.setMouse(mouseX, mouseY);
   	 	  }
      }
      
   }
   
   long desiredFPS = 60;
   long desiredDeltaLoop = (1000*1000*1000)/desiredFPS;
    
   boolean running = true;
   
   private double x = STARTX;
   private double y = STARTY;
   
   public void run(){
      
      long beginLoopTime;
      long endLoopTime;
      long currentUpdateTime = System.nanoTime();
      long lastUpdateTime;
      long deltaLoop;
      
      try {
		    playerIMG = ImageIO.read(Main.class.getResourceAsStream("figur.png"));
		    bg0IMG = ImageIO.read(Main.class.getResourceAsStream("bg0.png"));
		    bg1IMG = ImageIO.read(Main.class.getResourceAsStream("bg1.png"));
		    bg2IMG = ImageIO.read(Main.class.getResourceAsStream("bg2.png"));
		    bg3IMG = ImageIO.read(Main.class.getResourceAsStream("bg3.png"));
		    bg4IMG = ImageIO.read(Main.class.getResourceAsStream("bg4.png"));
		} catch (IOException e) {	}
     

      while(running){
         beginLoopTime = System.nanoTime();
         
         render();
         
         
         lastUpdateTime = currentUpdateTime;
         currentUpdateTime = System.nanoTime();
         update((int) ((currentUpdateTime - lastUpdateTime)/(1000*1000)));
         
         endLoopTime = System.nanoTime();
         deltaLoop = endLoopTime - beginLoopTime;
           
           if(deltaLoop > desiredDeltaLoop){
               //Do nothing. We are already late.
           }else{
               try{
                   Thread.sleep((desiredDeltaLoop - deltaLoop)/(1000*1000));
               }catch(InterruptedException e){
                   //Do nothing
               }
           }
      }
   }
   
   private void render() {
      Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics();
      
      g.clearRect(0, 0, WIDTH, HEIGHT);
      render(g);
      g.dispose();
      bufferStrategy.show();
   }
   
   
   /**
    * Modus 0 = Menu	Es wird geschaut, ob der Spiel start Button geklickt wird
    * Modus 1 = Spiel	Es wird die Mausposition betrachtet und Klicks aktualisiert
    * Modus 2 = Gegenstadn Menu 	
    */
   
   protected void update(int deltaTime){
	   
	   switch(mode){
		   case 0:{
			   if(mouseX >= 220 && mouseX <= 420 && mouseY >= 100 && mouseY <= 200){
				   if(pressed1){
					   
				   
				   mode = 1;
				   mouseX = STARTX;
				   mouseY = STARTY;
				   }
			   }
		   }break;
		   
		   case 1:{
			   if(pressed1){
				   dX = mouseX;
				   dY = mouseY;
			   }
			   if(pressed2){
				   mode = 2;
				   pressed2 = false;
			   }
			   laufen();
			   
		   } break;
		   
		   case 2:{
			   if(pressed2){
				   mode = 1;
				   pressed2 = false;
			   }
		   } break;
		   
		   default: break;
	   }
	   
	   
   }
   
   
   /**
    * Modus 0 = Menu
    * Modus 1 = Spiel
    * 			Zuerst wird der Hintergrund gemalt, dann die Gegenstände, und dann der Spieler
    * 			Wenn auf ein Gegenstand geklickt wurde, wird das Gegenstadn Menu gezeichnet
    * Modus 2 = Gegenstadn Menu 
    */
   protected void render(Graphics2D g){
	   
	   switch(mode){
		   case 0:{
			   menu.draw(g);
		   } break;
		   	
		   case 1:{
			   switch(level){
			   case 1:{
				   g.drawImage(bg1IMG, 0, 0, null);
			   } break;
			   
			   case 2:{
				   
				   g.drawImage(bg2IMG, 0, 0, null);
			   } break;
			   
			   case 3:{
				   g.drawImage(bg3IMG, 0, 0, null);
			   } break;
			   
			   case 4:{
				   g.drawImage(bg4IMG, 0, 0, null);
			   } break;
			   
			   default: g.drawImage(bg0IMG, 0, 0, null); break;
			   } 

			   gegenstaende.draw(g);
			   g.drawImage(playerIMG, (int)x - 30, (int)y - 120, null);			   
			   
			   if(gegenstandMenubool){
				   int xM = mouseX;
				   int yM = mouseY;
				   if(xM <= 0){
					   xM = 1;
				   }
				   if(yM <= 0){
					   yM = 1;
				   }
				   if(xM >= gameCanvas.getWidth()-150){
					   xM = gameCanvas.getWidth()-150;
				   }
				   if(yM >= gameCanvas.getHeight()-100){
					   yM = gameCanvas.getHeight()-100;
				   }
				   if(gegenstandMenu == null)
					   gegenstandMenu = new GegenstandMenu(xM, yM);
				   
				   gegenstandMenu.draw(g);
				   
			   }
			   
			   
		   }break;
		   
		   case 2:{
			   g.drawImage(bg1IMG, 0, 0, null);
			   itemKiste.draw(g);
		   }break;
		   
		   default: break;
	   }
   }
   
   public void laufen(){
	   if(x > dX){
		   x--;
	   } else if(x < dX) {
		   x++;
	   }
	   
	   if(y > dY && y >= 350){
		   y--;
	   } else if(y < dY){
		   y++;
	   }

	   if(x >= frame.getWidth()-25){
		   level ++;
		   x = 30;
		   mouseX = 30;
		   dX = 30;
		   gegenstaende.level(level);
	   } else if(x <= 25){
		   level --;
		   x = frame.getWidth() -30;
		   mouseX = frame.getWidth() -30;
		   dX = frame.getWidth() -30;
		   gegenstaende.level(level);
	   }
   }
   
   public boolean mousePressed(){
	   return pressed1;
   }
   
   public static void main(String [] args){
      Main ex = new Main();
      new Thread(ex).start();
   }

}
```






Spoiler: ItemKiste





```
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.imageio.ImageIO;

/**
 * 
 * Die Liste, die alle Items enthält und checkt
 *
 */
public class ItemKiste {

	private List<Item> itemListe;
	private BufferedImage mainImg, buttonImg, selectImg;
	private Item lastClicked;
	private int mouseX, mouseY, indexLastClicked, buttonY, buttonX;
	
	
	public ItemKiste(){
		itemListe = new ArrayList<Item>();
		mouseX = 0;
		mouseY = 0;

		
		indexLastClicked = -1;
		
		try {
		    mainImg = ImageIO.read(Menu.class.getResourceAsStream("itemKiste.png"));
		    buttonImg = ImageIO.read(Menu.class.getResourceAsStream("benutzen.png"));
		    selectImg = ImageIO.read(Menu.class.getResourceAsStream("selectItem.png"));
		} catch (IOException e) {	}
		
		buttonX = mainImg.getWidth() - 223;
		buttonY = mainImg.getHeight() - 55;
		
	}
	
	
	
	public void addToList(Item i){
		itemListe.add(i);
	}
	
	public void removeList(int i){
		itemListe.remove(i);
	}
	
	public void setMouse(int mX, int mY){
		mouseX = mX;
		mouseY = mY;
	}
	
	/**
	 * Es wird geschaut, ob ein Item angeklickt wurde
	 * 
	 */
	
	public void clickCheckAll(int mX, int mY){
		for(int i = 0; i< itemListe.size(); i++){
			Item g = (Item) itemListe.get(i);
			if(g.clickCheck(mX, mY)){
				lastClicked = g;
				indexLastClicked = i;
				
			}
		}
		
		if(mouseX > buttonX && mouseY > buttonY && mouseX < buttonX + buttonImg.getWidth() && mouseY < buttonY + 50){
			System.out.println("BUTTON!!");
		}
	}
	
	/**
	 * Es werden die Items und Button gemalt
	 * 
	 */
	public void draw(Graphics g){
		int x = 50;
		int y = 50;
		
		int yB = 50;
		
		if(mouseX > buttonX && mouseY > buttonY && mouseX < buttonX + buttonImg.getWidth() && mouseY < buttonY + 50){
			yB = 0;
		} 
		
		g.drawImage(mainImg, 0, 0, null);
		g.drawImage(buttonImg.getSubimage(0, yB, 173, 50), buttonX, buttonY, null);
		
		for(int i = 0; i<itemListe.size(); i++){
			if(i == indexLastClicked){
				g.drawImage(selectImg, x, y, null);
			}
			itemListe.get(i).setPosition(x,y);
			itemListe.get(i).draw(g);
			if(x+150<= mainImg.getWidth()){ 
				x += 60;
			} else{
				x = 50;
				y += 60;
			}
		}
	}
}
```






Spoiler: Item





```
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;


public class Item {
private BufferedImage mainImg;
private int x, y;

	
	
	public Item(){
		x = 0;
		y = 0;
		try {
		    mainImg = ImageIO.read(Menu.class.getResourceAsStream("Stein.png"));
		} catch (IOException e) {	}
		
	}
	
	public boolean clickCheck(int mX, int mY){
		if(mX >= x && mX <= x + mainImg.getWidth() && mY >= y && mY <= y + mainImg.getHeight()){
			return true;
		} else {
			return false;
		}
	}
	
	public BufferedImage getImg(){
		return mainImg;
	}
	
	public void draw(Graphics g){
		g.drawImage(mainImg, x, y, null);
	}
	
	public void setPosition(int xP, int yP){
		x = xP;
		y = yP;
	}
}
```


----------



## Androbin (9. Mai 2014)

> Ich hoffe jetzt natürlich, dass ihr mir weiter helfen könnt, und wenn es irgendwas, wegen unsauberem programmieren zu beanstanden gibt (wahrscheinlich genug...), könnt ihr das auch gerne schreiben.


Also, dein Code ist eigentlich "ganz OK", aber deine Art ( und Weise ), wie du zeichnest, ist für mich "Augen-Krebs-verdächtig" :autsch:
Aber keine Sorge, mir ist das auch mal so gegangen : 


> Zitat von "JCODA" vom 11.04.2014, 21:52 :
> Wow.
> 
> Seit dem Betreiberwechsel hat die Qualität echt abgenommen hier im JFO!
> ...


Auch, wenn vielleicht nicht alles auf dich zutrifft, hoffe ich, das hilft auch dir weiter :toll:


----------



## MrXYF (10. Mai 2014)

Ok, danke schonmal, dann werd ich mir mal das Grafik Zeug besser anschauen 
Kannst du mir vielleicht sagen, was ich da im genauen ändern sollte, z.B. immer erst die super-methode aufrufen


----------



## Androbin (10. Mai 2014)

Am besten, du schreibst dich gleich mit meinem "Mentor" JCODA zusammen :idea:
Am besten über "TeamSpeak", Server-Adresse: 78.46.221.121:11802 Allerdings ist er selten erreichbar :bahnhof:

Aber wenn du wieder mal Hilfe brauchst, in Sachen grafischer Oberfläche, bin ich auch ein guter Ansprechpartner; ich mache sowieso nichts anderes, als Spiele :applaus:
Aber könntest du mir mal genauer sagen, was du nicht verstehst; ich finde es eigentlich ziemlich gut erklärt :rtfm:

PS. deine Klasse "Gegenstaende" sollte lieber "Gegenstand" heißen :toll:
PPS. Mit Polymorphie hast du es auch nicht so, oder :autsch:


----------



## MrXYF (10. Mai 2014)

Mhhh... Ich weiß selber grad nicht so, was ich nicht verstehe, ich steh glaub ich grad auf der Leitung :noe:
Vielleicht kannst du mir ein Beispiel nennen, was in meinem Code falsch/ungut ist 
Wegen deinem Mentor, das wäre natürlich cool, aber ich schau erstmal, ob ich es selber hinbekomme, wenn ich jetzt aber total verzweifle, meld ich mich mal :toll:
Und Polymorphie... ja, es sagt mir was, aber wieso meinst du, ich habs damit nich so drauf?
Ich benutze es halt dafür, dass jede Unterklasse die gleichen Methoden hat


----------



## Androbin (10. Mai 2014)

> ... Vielleicht kannst du mir ein Beispiel nennen, was in meinem Code falsch/ungut ist ...


Da wäre

```
g.clearRect(0, 0, WIDTH, HEIGHT) // unnötig ( repaint() )
...
g.dispose(); // siehe Zitat von JCODA
```
und anstatt

```
private BufferedImage bg0IMG, bg1IMG, bg2IMG, bg3IMG, bg4IMG, playerIMG;
```
wäre besser

```
private HashMap<String, BufferedImage> images = new HashMap<String, BufferedImage>()
```
Die Klasse "Menu" und "GegenstandMenu" könntest du von JPanel ableiten :toll:
Die Klasse "Gegenstaende" in "Gegenstand" umbenennen und :bloed:
Die Klasse "Figur" o. ä., wie (Item)Kiste von einer neuen (abstrakten) Klasse "Sprite" ableiten, sowie :idea:
Die Klasse "ItemKiste" von "Kiste" ableiten, soweit möglich, falls nicht:


----------



## MrXYF (10. Mai 2014)

Ok gut, dann werd ich mich mal drüber stürzen 
Ich hab das Render Zeug wo anders abgeschaut, aber wenn des so schlecht ist, dann werd ich das mal umschreiben :autsch:
Gegenstaende is wohl besser, wenn ich umbennene :toll:
Das mit Sprite hab ich mir auch schon überlegt, werd ich jetzt auch machen :applaus:


----------



## Androbin (10. Mai 2014)

So eine Sprite Klasse hab ich mir erst vor Kurzem selbst gemacht :toll:


Spoiler: Hier der Code





```
package de.androbin.lib.games;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.HashMap;
import javax.imageio.ImageIO;
import com.sun.xml.internal.ws.api.ResourceLoader;

public class Sprite extends Rectangle2D.Double {
	
	// Deklarationen
	
	private static final long serialVersionUID = 1L;
	
	protected double x = 0, y = 0, width = 0, height = 0;
	protected HashMap  <Integer, BufferedImage> tiles     = new HashMap  <Integer, BufferedImage>();
	protected ArrayList<         BufferedImage> animation = new ArrayList<         BufferedImage>();
	protected int pic = 0, animpic = 0;
	
	protected AnimationLib animationlib = new AnimationLib();
	protected     SoundLib     soundlib = new SoundLib    ();
	
	protected boolean playAnimation = false;	
	protected boolean remove = false;
	
	// Konstruktoren
	
	public Sprite() { }
	
	public Sprite( String url, double x, double y, double width, double height ) {
		
		this.x = x; this.y = y; this.width = width; this.height = height;
		
		for ( int i = 0; i != -1; i++ ) { try { tiles.put( i, ImageIO.read( ResourceLoader.class.getResource( url + i + ".png" ) ) ); } catch ( Exception e ) { i = -1; } }
		
	}
	
	public Sprite( HashMap<Integer, BufferedImage> tiles, double x, double y, double width, double height ) { this.tiles = tiles; this.x = x; this.y = y; this.width= width; this.height = height; }
	
	public Sprite( ArrayList<BufferedImage> animation, double x, double y, double width, double height ) { this.animation = animation; this.x = x; this.y = y; this.width = width; this.height = height; }
	
	public Sprite( String url, Sprite parent ) { this( url, parent.x, parent.y, parent.width, parent.height ); }
	
	// Methoden
	
	@ Override
	public void paintComponent( Graphics g ) {
		
		Graphics2D g2 = (Graphics2D) g;
		
		if ( pic >=  tiles.size() ) pic = 0;
		g2.drawImage( tiles.get( pic++ ), (int) x, (int) y, (int) width, (int) height, null );
		
		if ( animpic == -1 || playAnimation ) {
			
			if ( animpic == -1 ) { animpic = 0; playAnimation = true; }
			
			if ( animpic >=  animation.size() ) { animpic = 0; playAnimation = false; animation.clear(); return; }
			g2.drawImage( animation.get( animpic++ ), (int) x, (int) y, (int) width, (int) height, null );
			
		}
		
	}
	
	public static Rectangle2D.Double getSubRec( Rectangle2D.Double source, Rectangle2D.Double part ) {
		
		Rectangle2D.Double sub = new Rectangle2D.Double();
		
		if ( source.x > part.x ) sub.x = 0;
		else sub.x = part.x - source.x;
		
		if( source.y > part.y ) sub.y = 0;
		else sub.y = part.y - source.y;
		
		sub.width = part.width;
		sub.height = part.height;
		
		return sub;
	}
	
	public static boolean isOpaque( int rgb ) { return !( ( ( rgb >> 24 ) & 0xff ) == 0 ); }
	
	@Override
	public boolean checkCollision( Sprite s ) {
		
		Rectangle2D.Double cut = (Double) this.createIntersection( s );
		
		if ( ( cut.width < 1 ) || ( cut.height < 1 ) ) return false;
		
		Rectangle2D.Double sub_me  = getSubRec( this, cut );
		Rectangle2D.Double sub_him = getSubRec( s   , cut );
		
		BufferedImage img_me  =   tiles.get(   pic ).getSubimage( (int) sub_me .x, (int) sub_me .y, (int) sub_me .width, (int) sub_me .height );
		BufferedImage img_him = s.tiles.get( s.pic ).getSubimage( (int) sub_him.x, (int) sub_him.y, (int) sub_him.width, (int) sub_him.height );
		
		for ( int x = 0; x < img_me.getWidth(); x++ ) {
			
			for ( int y = 0; y < img_him.getHeight(); y++ ) {
				
				int rgb1 = img_me .getRGB( x, y );
				int rgb2 = img_him.getRGB( x, y );
				
				if ( isOpaque( rgb1 ) && isOpaque( rgb2 ) ) { return true; }
				
			}
			
		}
		
		return false;
		
	}
	
	@ Override
	public void moveTo( Direction dir ) {
		
		switch ( dir ) {
			
			default : return;
			
			case Up        :      y--; return;
			case Down      :      y++; return;
			case Left      : x--;      return;
			case Right     : x++;      return;
			
			case UpLeft    : x--; y--; return;
			case UpRight   : x++; y--; return;
			case DownLeft  : x--; y++; return;
			case DownRight : x++; y++; return;
			
		}
		
	}
	
	@ Override
	public void moveTo( double x, double y ) { this.x = x; this.y = y; }
	
	protected void playAnimation( ArrayList<BufferedImage> animation ) { this.animation = animation; animpic = -1;; }
	
	protected void loadSound( String name, String path ) { soundlib.loadSound( name, path ); }
	protected void playSound( String name              ) { soundlib.playSound( name       ); }
	
	protected boolean  remove() { return remove       ; }
	protected void    destroy() {        remove = true; }
	
	protected void explode() { playAnimation( animationlib.getAnimation( "explosion" ) ); destroy(); }
	
}
```



PS. Ich würde mich freuen, diese ausarbeiten zu dürfen :idea:
PPS. Diese Klasse ist Teil einer [STRIKE]größeren[/STRIKE] kleineren Bibliothek, welche ich mir angelegt habe


----------



## MrXYF (11. Mai 2014)

Cool, ich werd mir n bisschen was abschauen, aber meine wird wahrscheinlich kleiner 
Das Problem mit dem Absturz hab ich leider immernoch... Da weißt du nicht zufällig was? ;(


----------



## Androbin (12. Mai 2014)

> ... Cool, ich werd mir n bisschen was abschauen, aber meine wird wahrscheinlich kleiner ...


Klasse 


> ... Das Problem mit dem Absturz hab ich leider immer noch... Da weißt du nicht zufällig was? ...


Also, als ich es getestet habe, ist es (noch) nicht abgestürzt :bahnhof:
Könntest du mir also sagen, in welcher Klasse und Zeile der Rechtsklick angenommen wird :question:


----------



## MrXYF (14. Mai 2014)

Androbin hat gesagt.:


> Also, als ich es getestet habe, ist es (noch) nicht abgestürzt :bahnhof:
> Könntest du mir also sagen, in welcher Klasse und Zeile der Rechtsklick angenommen wird :question:



Mhh komisch, du musst in dem Gegenstand Menu (ItemMenu.java, hab mich mit den Namen vertan, werd das aber sowieso nochmal übersichtlicher ordnen und umbennenen ) mehrmals links klicken. 
Der Maus Code sieht so aus:



Spoiler: public class Main Z. 71





```
public void mousePressed(MouseEvent e) {
    	  if(e.getButton() == MouseEvent.BUTTON1){
	    	  if(gegenstandMenubool ){
	    		  short s = gegenstandMenu.clickCheck(e.getX(), e.getY());
	    		  if(s == 0){
	    			  gegenstaende.getLastClicked().see();
	    		  } else if(s == 1){
	    			  gegenstaende.getLastClicked().speak();
	    		  } else if(s == 2){
	    			  gegenstaende.getLastClicked().touch();
	    		  }
	    		  gegenstandMenubool = false;
	    		  gegenstandMenu = null;
	    	  }else if(gegenstaende.clickCheckAll(e.getX(), e.getY())){
	    		  gegenstandMenubool = true;
	    	  }
	    	  
	    	  if(mode == 2){
	    		  itemMenu.clickCheckAll(e.getX(), e.getY());
	    	  }
	    	  pressed1 = true;
    	  } else if(e.getButton() == MouseEvent.BUTTON3){
    		  pressed2 = true;
    	  }
    	  
      }
```


----------



## Androbin (14. Mai 2014)

> ```
> ...
> if ( e.getButton() == MouseEvent.BUTTON1 ) { // Zeile 2
> ...
> ...


Es ist doch immer das gleiche *8*
[TIPP]
Verwende nur bei Primitiven Datentypen "==" zum Vergleich 
Verwende bei Objekten die Methode "equals" der Klasse Object 
[/TIPP]


> ```
> if ( s == 0 ) { // Zeile 5 - 11
> 
> gegenstaende.getLastClicked().see();
> ...


Wieso verwendet eigentlich niemand switches *8*

```
switch ( s ) {
	
	case 0 :
		
		gegenstaende.getLastClicked().see();
		break;
		
	case 1 :
		
		gegenstaende.getLastClicked().speak();
		break;
		
	case 2 :
		
		gegenstaende.getLastClicked().touch();
		break;
		
}
```
[TIPP]
Verwende die Methode "if" ausschließlich bei einzelnen Abfragen 
Verwende die Methode "switch" bei Abfragen zur einer einzigen Variable
[/TIPP]
[OT]
Daumen sind hilfreich,
ob zum Festhalten,
zur positiven Bewertung, oder
zur negativen Kritik
[/OT]


----------



## MrXYF (16. Mai 2014)

Ok gut, dann werd ich mir das mal merken und gleich ändern :toll:
Ne Danke Funktion gibt hier nich, oder?


----------



## Androbin (16. Mai 2014)

> Ne Danke Funktion gibt hier nich, oder?


Hast du es bereits mit dem "Danke"-Button unten rechts des Beitrags versucht :bloed:


----------



## MrXYF (16. Mai 2014)

Androbin hat gesagt.:


> Hast du es bereits mit dem "Danke"-Button unten rechts des Beitrags versucht :bloed:



... ich scheine blind zu sein:lol:


----------



## Androbin (16. Mai 2014)

> ... ich scheine blind zu sein :lol:


Mach dir nix draus 

Zurück zum Thema *8*
Was hast du so alles geändert :rtfm:
Lass mal deinen Code rüberwachsen :hihi:


----------



## MrXYF (16. Mai 2014)

Leider noch nicht viel, ich hatte in den letzten Tagen fast keine Zeit ;(
Ich werd jetzt am Wochenende hoffentlich dazu kommen...


----------



## Androbin (16. Mai 2014)

Und wenn wir schon dabei sind, könntest du mir auch ein bisschen unter die Ärmchen greifen *8* :idea:
Hier geht's zu meinem [STRIKE]kleinen[/STRIKE] großen Projekt *8* "Projekt Library"


----------



## MrXYF (17. Mai 2014)

Also ich hab mich jetzt mal drüber gemacht 
Dabei hab ich jetzt mal alles n bisschen umgeschrieben, und n Game State Manager rein gepackt, ist einfach übersichtlicher 

Die Draw "Art", wie ich sie benutze, hab ich jetzt schon öfter mal gesehen, wieso ist es denn so falsch, es funktioniert ja eigentlich? :autsch:

Bei e.getButton(), wie soll ich da mit equals machen? Eigentlich sind es ja nur zwei Integer die ich vergleiche :bahnhof:

Naja, ich werd mal noch n bisschen weiter machen, denn jetzt gibts keine Abstürze mehr


----------



## Androbin (17. Mai 2014)

> Dabei hab ich jetzt mal alles n bisschen umgeschrieben, und n Game State Manager rein gepackt, ist einfach übersichtlicher


Gut, stell's doch gleich mal rein opcorn: Ich empfehle die Möglichkeit, MediaFire zu nutzen :rtfm:


> Die Draw "Art", wie ich sie benutze, hab ich jetzt schon öfter mal gesehen, wieso ist es denn so falsch, es funktioniert ja eigentlich? :autsch:


Ja, in diesem Fall der Fälle schon, aber es geht ums Prinzip ueh:


> Bei e.getButton(), wie soll ich da mit equals machen? Eigentlich sind es ja nur zwei Integer die ich vergleiche :bahnhof:


Sorry, hab gedacht, das wäre die actionPerformed und da stünde e.getSource() 


> Naja, ich werd mal noch n bisschen weiter machen, denn jetzt gibts keine Abstürze mehr


Schön zu hören :toll: Was haste denn geändert :reflect:


----------



## MrXYF (17. Mai 2014)

Androbin hat gesagt.:


> Gut, stell's doch gleich mal rein opcorn: Ich empfehle die Möglichkeit, MediaFire zu nutzen :rtfm:


Habs bei Post vorher mit im Anhang 



Androbin hat gesagt.:


> Ja, in diesem Fall der Fälle schon, aber es geht ums Prinzip ueh:


Ok gut, war mir bloß nicht sicher :bae:



Androbin hat gesagt.:


> Schön zu hören :toll: Was haste denn geändert :reflect:


Naja, ich habs einfach besser strukturiert, ich weiß leider nicht, was der Fehler war, aber ich glaube, dass es einfach unsauber war, und dann irgendwas gecrasht is


----------

