2016-05-24 3 views
-2

Ich mache ein grundlegendes Labyrinth-Spiel in Java. Ich habe ein einfaches Schwarz-Weiß-Bild eines Labyrinths auf ein JPanel geladen, indem ich die drawImage-Methode von Graphic verwendete.Wie erkenne ich, ob eine gezeichnete Linie ein schwarzes Pixel in einem Bild schneidet oder berührt?

Ich muss wissen, ob oder nicht eine Linie, die ich auf dem JPanel zeichne (das den Pfad von jemand darstellt, der durch das Labyrinth geht), eine Wand des Labyrinths (alias eine Linie der schwarzen Pixel) berührt. Ich kenne bereits die Anfangs- und Endpunkte der Linie, die ich zeichnen würde, und ich denke, ich kann die Orte aller schwarzen Pixel (die die Wände darstellen) finden.

Ich denke daran, ein Array aller schwarzen Pixel im Bild des Labyrinths zu erstellen, und dann ein Array von kleinen Rechtecken basierend auf der Position jedes schwarzen Pixels zu erstellen und dann zu testen, ob die ursprüngliche Linie schneidet irgendeines der Rechtecke.

Gibt es eine einfachere/effizientere Möglichkeit, dies zu tun? Gibt es eine Möglichkeit, eine Karte der schwarzen Linien im Labyrinth zu erstellen?

Hier ist der Abschnitt meines Codes verantwortlich für das Bild unten.

public class TurtlePlane extends JPanel 
{ 
    private TurtleController myTurtleController; 
    private BufferedImage myMaze; 
    private BufferedImage myMazeExplorer; 

    public TurtlePlane() throws IOException{ 
     setLayout (null); 
     setBorder(BorderFactory.createLoweredBevelBorder()); 
     setBackground(Color.decode("0xEDFFED")); 
     setPreferredSize(new Dimension(800, 800)); 

     myMaze = ImageIO.read(new File("src/mazeforkids/Mazeforkids.png")); 
     myMazeExplorer = ImageIO.read(new File("src/mazeforkids/FlyingKappa.gif")); 
    } 

    public void drawPlane(){ 
     repaint(); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 

     //The Turtle object stores the x and y coordinates of the maze explorer image 
     Turtle t = new Turtle(12, 753); 

     g.drawImage(myMaze, 0, 0, null);//loads the image of the maze onto the JPanel 
     myTurtleController.getTurtleProgram().execute(t);//updates the coordinates of the maze explorer image 
     g.drawImage(myMazeExplorer, t.getX(), t.getY(), null);//loads the image of the maze explorer onto the JPanel 
    } 
} 

Maze game

+0

Der Ansatz im Allgemeinen könnte fragwürdig sein, konzentriert sich aber auf die Frage selbst: Wie ist die * "Linie, die ich auf den JPanel zeichne" * dargestellt? Hast du nur den Start- und Endpunkt dieser Linie? – Marco13

+0

Warum ist das Labyrinth ein Bild im Gegensatz zu einer 'java.awt.Shape'? –

+0

Siehe auch [diese Antwort] (http://stackoverflow.com/questions/14574045/collision-detection-with-complex-shapes/14575043#14575043) .. –

Antwort

-1

könnten Sie java.awt.Robot verwenden. Es hat eine Methode, die die Farbe eines Pixels irgendwo auf dem Bildschirm erhält. Wie Sie dies umsetzen würden, liegt an Ihnen.

+0

Mit einem Vorschlaghammer eine Nuss knacken. Der OP hat offensichtlich direkten Zugriff auf das Bild, also könnte er ein "BufferedImage" erstellen und ['getRGB (x, y)'] verwenden (http://docs.oracle.com/javase/8/docs/api/java/ awt/image/BufferedImage.html # getRGB-int-int-) –

+0

Ich mag Vorschlaghammer – RobotKarel314

Verwandte Themen