JAVA飞机移动斜着走_通过键盘的能够使飞机上下左右八个方向移动,现在实现键盘监听时没有反应是怎么回事,哪里出错了?...
通過鍵盤的能夠使飛機上下左右八個方向移動,現在實現鍵盤監聽時沒有反應是怎么回事,哪里出錯了?
關注:93??答案:2??mip版
解決時間 2021-01-30 07:58
提問者雨份涼伴
2021-01-29 19:08
import javax.swing.JFrame;
public class MyFrame extends JFrame{
MyPanel mp=null;
public void lostFrame(){
mp=new MyPanel();
this.setTitle("雷霆戰機");
this.setLocation(10, 10);
this.setVisible(true);
this.setSize(500,500);
this.add(mp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
}
import java.awt.Graphics
; import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
importjavax.swing.JPanel;
//主窗口
public class PlaneGame extends MyFrame{
public static void main(String[] args) {
new MyFrame().lostFrame();
}
//重寫父類
public void lostFrame(){
super.lostFrame();
addKeyListener(new moveList());
}
//監聽事件
class moveList extends KeyAdapter{
public void keyPressed(KeyEvent e) {
System.out.println("按下"+e.getKeyChar());
}
public void keyReleased(KeyEvent e) { }
}
}
//繼承JPanel在面板上畫圖片
class MyPanel extends JPanel{
Image bg=ImageIcon.getImage("image/bg.gif");
Plane p=new Plane("image/enemy2.png",100,100);
public void paint(Graphics g){
g.drawImage(bg, 0, 0,null); p.draw(g); repaint();
}
}
import java.awt.Graphics;
import java.awt.Image;
* 戰機的屬性
public class Plane {
double y;
double x;
Image img;
double speed=0.1;
public Plane( String imgpath,double x, double y) {
this.x = x;
this.y = y;
this.img =ImageIcon.getImage(imgpath);
}
public void draw(Graphics g){
g.drawImage(img, (int)x, (int)y, null);
}
}
載入圖片的就不寫了,放不下了
最佳答案
二級知識專家包子女孩
2021-01-29 20:37
沒反應這種問題一般就是焦點問題了,你點擊一下游戲窗體,看看有沒有反應,如果沒有就requestFocus看看。
全部回答
1樓寄出個心動
2021-01-29 20:54
你的程序主要是因為MyPanel覆蓋了MyFrame,把監聽移到MyPanel上,并讓它獲得焦點(用this.requestFocus();語句),鍵盤控制就可以運行了.
另外,你的Image獲取方式有一點問題,我給你都改成new ImageIcon(imgpath).getImage()的形式了.
其它的改動都是小地方,你對照著原程序一看就知道了.
改完后,完整的程序如下:
//MyFrame.java文件
import javax.swing.JFrame;
public class MyFrame extends JFrame{
MyPanel mp=null;
public void lostFrame(){
mp=new MyPanel();
this.setTitle("雷霆戰機");
this.setLocation(10, 10);
this.setVisible(true);
this.setSize(500,500);
this.add(mp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//PlaneGame.java文件
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
//主窗口
public class PlaneGame{
public static void main(String[] args) {
new MyFrame().lostFrame();
}
}
//監聽事件
class moveList extends KeyAdapter{
public void keyPressed(KeyEvent e) {
System.out.println("按下"+e.getKeyChar());
}
public void keyReleased(KeyEvent e) { }
}
//繼承JPanel在面板上畫圖片
class MyPanel extends JPanel{
Image bg=new ImageIcon("image/bg.gif").getImage();
Plane p=new Plane("image/enemy2.png",100,100);
MyPanel(){
addKeyListener(new moveList());
}
public void paint(Graphics g){
g.drawImage(bg, 0, 0,null); p.draw(g); repaint();
this.requestFocus();
}
}
//Plane.java文件
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
// 戰機的屬性
public class Plane {
int y;
int x;
Image img;
double speed=0.1;
public Plane( String imgpath,int x, int y) {
this.x = x;
this.y = y;
this.img =new ImageIcon(imgpath).getImage();
}
public void draw(Graphics g){
g.drawImage(img, x, y, null);
}
}
我要舉報
如以上問答內容為低俗/色情/暴力/不良/侵權的信息,可以點下面鏈接進行舉報,我們會做出相應處理,感謝你的支持!
→點此我要舉報以上信息!←
推薦資訊
大家都在看
總結
以上是生活随笔為你收集整理的JAVA飞机移动斜着走_通过键盘的能够使飞机上下左右八个方向移动,现在实现键盘监听时没有反应是怎么回事,哪里出错了?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [ICCV2019论文阅读]Asymme
- 下一篇: 健身房APP开发