2018年6月14日 星期四

[JAVA] 圖片移動小範例

※ 此程式碼並非優化版本,僅供個人學習用途,若有任何問題請告知。

※ 準備1個jpg圖檔:1.jpg。
※ 參考自java图片移动(键盘控制) - CSDN博客。

程式碼如下:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PictureMove extends JFrame implements KeyListener {
private Container content;
private JPanel mainPane;
protected Image img = null;
Graphics g;
final int INIT_X_POS = 250, INIT_Y_POS = 100; //圖片初始位址
//X移動, Y移動, 圖片X, 圖片Y, 圖片寬度, 圖片高度
int SpeedX = 15, SpeedY = 15, imgX = INIT_X_POS,
imgY = INIT_Y_POS, imgW = 100, imgH = 100;
public PictureMove() throws InterruptedException {
/*視窗設定*/
super("test");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
this.setBounds(350, 200, 650, 350);
content = this.getContentPane();
mainPane = new JPanel();
mainPane.setLayout(new BorderLayout());
content.add(mainPane, BorderLayout.CENTER);
this.setVisible(true);
/*圖片*/
img = Toolkit.getDefaultToolkit().getImage("src\\M\\p\\1.png");
g = mainPane.getGraphics();
MediaTracker t = new MediaTracker(this);
t.addImage(img, 0);
t.waitForAll();
g.drawImage(img, imgX, imgY, imgW, imgH, null);
this.addKeyListener(this);
}
public static void main(String[] args) throws InterruptedException {new PictureMove();}
public void keyPressed(KeyEvent e) {
g.drawImage(img, imgX, imgY, imgW, imgH, null);
g.clearRect(imgX, imgY, imgW, imgH);
int key = e.getKeyCode();
/*有作邊界判定*/
if(key == KeyEvent.VK_LEFT) { //如(圖片的X位置-移動位置數)小於0 則等同於超出邊界
imgX -= ((imgX - SpeedX) >= 0 ? SpeedX : imgX);}
if(key == KeyEvent.VK_RIGHT) { //如(圖片的X位置+圖片寬度+移動位置數)大於視窗寬度 則等同於超出邊界
imgX += ((imgX + imgW + SpeedX) <= this.getWidth() ? SpeedX : (this.getWidth() - imgX - imgW));}
if(key == KeyEvent.VK_UP) {
imgY -= ((imgY - SpeedY) >= 0 ? SpeedY : imgY);}
if(key == KeyEvent.VK_DOWN) {
imgY += ((imgY + imgH + SpeedY) <= this.getHeight() ? SpeedY : (this.getHeight() - imgY - imgH));}
/*沒有作邊界判定*/
if(key == KeyEvent.VK_A) {imgX -= SpeedX;}
if(key == KeyEvent.VK_D) {imgX += SpeedX;}
if(key == KeyEvent.VK_W) {imgY -= SpeedY;}
if(key == KeyEvent.VK_S) {imgY += SpeedY;}
g.drawImage(img, imgX, imgY, imgW, imgH, null);
}
public void keyReleased(KeyEvent arg0) {}
public void keyTyped(KeyEvent arg0) {}
}

結果如下:

沒有留言:

張貼留言