java 板


LINE

(此文為代po,謝謝~) ※狀況概述:想請問能否在構造函式中使用判斷式。 以下是People檔案中的構造函式: public People() { try { if(UpStatue==true){ image1 = ImageIO.read(new File("image/boy-up-1.png"));//向上的圖片一 image2 = ImageIO.read(new File("image/boy-up-2.png"));//向上的圖片二 image3 = ImageIO.read(new File("image/boy-up-3.png"));//向上的圖片三 }else if(RightStatue==true) { image1 = ImageIO.read(new File("image/boy-right-1.png"));//向上的圖片一 image2 = ImageIO.read(new File("image/boy-right-2.png"));//向上的圖片二 image3 = ImageIO.read(new File("image/boy-right-3.png"));//向上的圖片三 }else if(LeftStatue==true) { image1 = ImageIO.read(new File("image/boy-left-1.png"));//向上的圖片一 image2 = ImageIO.read(new File("image/boy-left-2.png"));//向上的圖片二 image3 = ImageIO.read(new File("image/boy-left-3.png"));//向上的圖片三 }else if(DownStatue==true) { image1 = ImageIO.read(new File("image/boy-down-1.png"));//向下的圖片一 image2 = ImageIO.read(new File("image/boy-down-2.png"));//向下的圖片二 image3 = ImageIO.read(new File("image/boy-down-3.png"));//向下的圖片三 }else { image1 = ImageIO.read(new File("image/boy-down-1.png"));//向下的圖片一 image2 = ImageIO.read(new File("image/boy-down-2.png"));//向下的圖片二 image3 = ImageIO.read(new File("image/boy-down-3.png"));//向下的圖片三 } } catch (IOException e) { e.printStackTrace(); } x = 100;// 初始x軸化座標 y = 100;// 初始y軸化座標 } https://i.imgur.com/HHNdbTc.jpg
如上圖, 構造函式的圖片沒辦法進行判斷,按上下左右的鍵圖片也不會改變。 ※程式碼:全部的程式碼 https://i.imgur.com/fKuBbP3.jpg
https://i.imgur.com/dVNDIng.jpg
https://i.imgur.com/hC8JVxR.jpg
https://i.imgur.com/qf9ywGe.jpg
< GamePanel.java檔案> package ex02; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JPanel; //alt + / 自動補全 //ctrl + shift + f 調整格式 public class GamePanel extends JPanel implements KeyListener { BufferedImage image;// 主圖片 Graphics2D g2;// 繪圖工具,美工 People golden; boolean finish = false;// 遊戲是否結束 static final int FRESH = 20;//非靜態的 final無法改變的常量 ,刷新時間,20毫秒 BufferedImage background;// 背景 // 構造函數,給對象的數據(屬性)驚醒初始化 會先於初始化函數 相較於//靜態函數: 只能執行一次,構造函數:能執行多次 public GamePanel() { image = new BufferedImage(600, 500, BufferedImage.TYPE_INT_BGR); g2 = image.createGraphics(); golden = new People();//引用People()構造函數 try { background = ImageIO.read(new File("image/background.png")); } catch (IOException e) { e.printStackTrace(); } FreshThread t = new FreshThread(this);// 刷新線程 t.start(); } // 繪製圖片 private void paintImage() { golden.move();// 移動 g2.drawImage(background, 0, 0, this);// 先放背景 g2.drawImage(golden.image, golden.x, golden.y, this);// 再放人物 } // 設置畫布 @Override被繼承的方法 @Override public void paint(Graphics g) { paintImage(); g.drawImage(image, 0, 0, this); } public boolean isFinish() { return finish; } @Override public void keyTyped(KeyEvent e) {// 按鍵類型 // TODO Auto-generated method stub } @Override public void keyPressed(KeyEvent e) {// 按鍵按下 e可以 int code = e.getKeyCode(); if (code == KeyEvent.VK_UP) { golden.up(); } else if (code == KeyEvent.VK_DOWN) { golden.down(); } else if (code == KeyEvent.VK_RIGHT) { golden.right(); } else if (code == KeyEvent.VK_LEFT) { golden.left(); } } @Override public void keyReleased(KeyEvent e) {// 按鍵抬起 golden.released(); } } https://i.imgur.com/empqY5j.jpg
https://i.imgur.com/5LL37yZ.jpg
https://i.imgur.com/yDHxbxB.jpg
https://i.imgur.com/8bUy710.jpg
< People.java檔案> package ex02; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class People { int x, y;// 座標 BufferedImage image; BufferedImage image1, image2, image3;// 人的圖片 int stepTimer = 0;// 添加計時器 毫秒 int fresh = GamePanel.FRESH;// 為靜態 可調用 boolean UpStatue = false;// 向上的狀態 boolean DownStatue = false;// 向下的狀態 boolean RightStatue = false;// 向右的狀態 boolean LeftStatue = false;// 向左的狀態 public People() { try { image1 = ImageIO.read(new File("image/boy-down-1.png"));//向下的圖片一 image2 = ImageIO.read(new File("image/boy-down-2.png"));//向下的圖片二 image3 = ImageIO.read(new File("image/boy-down-3.png"));//向下的圖片三 } catch (IOException e) { e.printStackTrace(); } x = 100;// 初始x軸化座標 y = 100;// 初始y軸化座標 } public void move() {// 遊戲面板中的移動 step();// 踏步 if (UpStatue && (y > 5)) { y -= 5; } else if (DownStatue && (y < 410)) { y += 5; } else if (RightStatue && (x < 555)) { x += 5; } else if (LeftStatue && (x > 5)) { x -= 5; } } void step() {// 移動中的踏步 int tmp = stepTimer / 250 % 3;// 每四分之一秒出現一張圖 只會餘0,1,2因此只有 三種結果 switch (tmp) { case 0: image = image1; break; case 1: image = image2; break; default: image = image3; break; } stepTimer += fresh;// 得到計時器遞增刷新時間 } public void up() {// 向上 UpStatue = true; } public void down() { DownStatue = true; } public void right() { RightStatue = true; } public void left() { LeftStatue = true; } public void released() { UpStatue = false; DownStatue = false; RightStatue = false; LeftStatue = false; } } https://i.imgur.com/LY2N0B0.jpg
<MainFrame.java檔案> package ex02; import java.awt.Container; import javax.swing.JFrame; public class MainFrame extends JFrame { GamePanel p; public MainFrame() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); p = new GamePanel(); Container c = getContentPane();// 獲得窗體的主容器 c.add(p);// 把遊戲面板添加到主容器 addKeyListener(p);// 添加鍵盤事件監聽 } public static void main(String[] args) { MainFrame frame = new MainFrame(); frame.setTitle("The Game"); frame.setBounds(300, 100, 600, 500);// 設置屏幕位置,大小 frame.setVisible(true); frame.setResizable(false); } } https://i.imgur.com/SZa29fD.jpg
<FreshThread.java檔案> package ex02; public class FreshThread extends Thread {// 繼承線程功能 GamePanel p; public FreshThread(GamePanel p) {// 調用構造方法 this.p = p;// 將參數給類成員屬性賦值 } @Override public void run() { while (!p.isFinish()) {// 當遊戲沒有結束時 p.repaint();// 重新繪製圖片 try { Thread.sleep(p.FRESH); } catch (InterruptedException e) { e.printStackTrace(); } // 休眠多長時間 } } } 是超級新手,謝謝各位撥冗觀看~~~ --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.11.192 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1582274157.A.C91.html ※ 編輯: earric (59.126.69.245 臺灣), 02/21/2020 17:48:56 ※ 編輯: earric (59.126.69.245 臺灣), 02/21/2020 17:59:54 ※ 編輯: earric (59.126.69.245 臺灣), 02/21/2020 18:02:57 ※ 編輯: earric (180.217.239.202 臺灣), 02/21/2020 18:06:22 ※ 編輯: earric (59.126.69.245 臺灣), 02/21/2020 18:22:18
1F:推 pupudice: 要不要考慮考慮用一個repo, 這樣架構什麼的比較清楚 02/23 10:08
2F:→ earric: 昨天已經把功能用出來了,會試著用pro看看的,謝謝建議~ 02/23 10:36







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP