很抱歉,我的上一個問題How to detect a key press in Java沒有工作。在Java v2中檢測按鍵
我看過多個視頻並看到關於此類關鍵字的文章,但都沒有工作。我知道我必須致電
repaint();
要更新座標,請不要在此標記我。我知道我必須使用keyListener才能讓它移動。我想要它,所以當我按住一個鍵時,我的(PNG)圖形將按照我選擇的方向移動。
另外我怎樣才能使它保持移動,直到我的手指停止按下該鍵。並說我按了A和D,它會對角移動。
我不知道我的代碼有什麼問題,但這裏是我的代碼(我使用eclipse標準kelper 7.4)。我也嘗試在屏幕上一次放2個PNG圖像,但它只顯示1?我怎麼能阻止它?另外爲什麼我的背景不是黑色?
這裏是我的代碼:
import javax.swing.*;
import java.awt.*;
public class window {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame f = new JFrame();
f.setSize(600,600);
f.setBackground(Color.BLACK);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setLocationRelativeTo(null);
f.setResizable(true);
f.setAlwaysOnTop(true);
player player = new player();
f.add(player);
}
}
//I do seem to have a few errors throughout my code. this is because of the KeyListener
//The player class(this one has the keylistener problem)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
public class player extends JPanel implements KeyListener, ActionListener{
private ImageIcon image;
int x = 0;
int y = 0;
public boolean right = false;
public boolean left = false;
public player(Display f){
f.addKeyListener(new KeyAdapter(){
public void keyReleased(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_D){
right = false;
}
}});
}
public void paintComponent(Graphics g){
super.paintComponent(g);
this.setBackground(Color.BLACK);
image = new ImageIcon("neonShip.png");
image.paintIcon(this, g, x, y);
if(right){
x += 1;
}
repaint();
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
//Next is the Display class
import java.awt.*;
import javax.swing.*;
public class Display extends JFrame{
public JPanel gp = (JPanel) getGlassPane();
public Images i;
public player k;
public Display(){
i = new Images();
gp.setVisible(true);
k = new player(this);
gp.setLayout(new GridLayout(1,1,0,0));
this.setLayout(new GridLayout(1,1,0,0));
gp.add(k);
this.add(i);
}
}
我對一些錯誤我很抱歉,但我做了我最好的代碼。我的keyListener或東西有什麼問題。請解釋如何解決這個問題。
謝謝user783920的一個很好的答案!我怎麼能實現其他鍵並擺脫出現的白色閃光。另外我怎麼能增加運動的速度。我在複製代碼時看不到速度變量。 – user3343497
如果你想繼續使用'KeyListener',那麼你可以通過'e.getKeyCode()'做一個'switch''。然而,@camickr指出,'Key Bindings'被認爲是更好的揮杆練習。 「速度」在'if(按壓A)'中被硬編碼爲1.我不太清楚「白色閃光燈」的含義。 – user783920
好吧,我會看看鍵綁定,你是什麼意思的'硬編碼'?我的意思是它是如何消失1毫秒然後回來的。在屏幕上留下一小段時間。我怎麼能阻止這個? – user3343497