2016-10-09 6 views
-2

Я делаю программу, в которой пользователь может использовать клавиши arroy на клавиатуре для перемещения по лабиринту. Я могу заставить объект дроида двигаться слева направо просто отлично; но я не могу сделать то же самое для перемещения вверх или вниз. Когда я пытаюсь переместить его в этих направлениях, ничего не происходит вообще, что я не понимаю. Что я делаю не так? Вот код:Java - Как перемещать объект вверх и вниз с помощью KeyListener?

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JPanel; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

public class Droid2 extends JPanel 
{ 
int x=10, y=200; 


    ImageIcon icon = new ImageIcon("robot.jpg"); 


    public Droid2() 
    { 

     addKeyListener (new DotsListener()); 
     setFocusable(true); 
     setPreferredSize(new Dimension(850, 600)); 
    } 

public void paintComponent(Graphics page) 
    { 
     super.paintComponent(page); 
     File input = new File("maze.png"); 
     Image img = new ImageIcon("maze.png").getImage(); 
     Image img2 = new ImageIcon("robot.png").getImage(); 
     BufferedImage bufferedImage; 
     try { 
      bufferedImage = ImageIO.read(input); 
      Color c=new Color(bufferedImage.getRGB(x, y));// & 255;int d=(bufferedImage.getRGB(x, y)<<16)&0xFF; 
      System.out.println("Red:"+c.getRed()+",\t Green:"+c.getGreen()+",\t Blue:"+c.getBlue()); 
     if(c.getBlue()<255) 
      y-=10; 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 



     page.drawImage(img, 0, 0, null); 
     page.drawImage(img2, x, 260, null); 
     System.out.println(); 

    } 

private class DotsListener implements KeyListener 
{ 

    @Override 
    public void keyTyped(KeyEvent e) { 

    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
       if(e.getKeyCode()==KeyEvent.VK_RIGHT) 
        x+=10; 
       else if(e.getKeyCode()==KeyEvent.VK_DOWN) 
        y+=10; 
       else if(e.getKeyCode() ==KeyEvent.VK_LEFT) 
        x-=10; 
       else if(e.getKeyCode() ==KeyEvent.VK_UP) 
        y-=10; 

      repaint(); 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 

    } 
    } 
} 
` 
+0

Возможный дубликат [Как использовать привязки клавиш вместо ключевых прослушивателей] (http://stackoverflow.com/questions/22741215/how-to-use-key-bindings-instead-of-key-listeners) – user1803551

+0

Также , если вы используете изображения, это хорошая идея, чтобы дать их нам. – user1803551

ответ

0

Вероятно потому, что вы не используете переменную y нарисовать изображение, а не просто использовать жестко запрограммированный 260.

+0

Когда вы перерисовываете изображение, вам нужно также обновить координату y. Кроме того, в совете попробуйте использовать keyreleased для обновления координат вместо нажатия. –

+0

Похоже на это. Раньше у меня было только «y», но я не мог позиционировать объект дроида в начале лабиринта, поэтому я жестко запрограммировал его на вход в лабиринт. Все еще пытаюсь понять это; благодаря! – ognimoddd

+0

Когда я переключу его обратно на y, объект движется в странных направлениях. Я в тупике: / – ognimoddd

Смежные вопросы