什麼是類別?想像成 蛋糕模具
什麼是物件?想像成 蛋糕
→ 物件(蛋糕)是透過類別(蛋糕模具)而生成出來的
paint()方法 → 用來處理圖形,繪製圖形。在繼承JFrame或者JPanel時,系統會自動呼叫,不需要使用物件來呼叫paint()方法,當出現以下幾種情況時會自動呼叫paint()
1. 當程式啟動時
2. 更改視窗大小時
3. 使用repaint()方法時
repaint()方法 → 重新繪製paint()方法
調用update()方法下的paint()方法
建立一個Window的類別並繼承 JFrame,其中涵蓋了
在主程式main()方法裡面,用剛剛建立好的Window類別,建立名為window的物件,就完成了
建立一個Ball的類別並繼承 JPanel,其中涵蓋了
Ball()
建構子:在建立物件時,讓Ball類可以獲取Window類別的成員資訊paint()
方法:畫出小球moveBall()
方法:小球移動,碰壁後反彈在 Window 類別內建立小球物件
在Window類別的paint方法中,利用剛新建出的ball物件,呼叫Ball類別中的paint方法,把球畫在window視窗上
在Window類別新增一個move()方法
最後在main主程式當中,製作一個無限迴圈,讓它不斷地重新繪製小球,達到移動效果。
建立一個Racquet的類別並繼承 JPanel,其中涵蓋了
在 Window 類別內建立球拍物件
在Window類別的paint方法中,利用剛新建出的racquet物件,呼叫Racquet類別中的paint方法,把球拍畫在window視窗上
接下來,如何用鍵盤左右鍵移動球拍呢?
首先,為了接收到鍵盤操作的動作,在Window類別實作鍵盤監聽器 (implements KeyListener),
在Window() 建構子新增addKeyListener()方法,有點像是當物件生成時,自動註冊鍵盤監聽器,去接收鍵盤發生的事件
並且一定要定義下列三種方法 (一樣在Window類別)
keyPressed()
、KeyReleased()
、keyTyped()
再來,幫球拍寫出左右移動的方法 KeyPressed()
、KeyReleases()
、moveRacquet ()
最後,在move()方法裡,讓racquet物件呼叫Racquet類別中的moveRacquet()方法,就大功告成了!
Java函式庫裡有一個Rectangle類別,把小球和球拍變成Rectangle型態的變數,去使用Rectangle類別內有的intersects()方法,查看他們是否有相交,相交之後小球再彈回~
分別在Ball類別、Racquet類別,建立一個傳回值為Rectangle型態的方法
再來是碰撞檢測,使用intersects()方法檢測Rectangle型態的球拍和小球是否有碰撞
何時該使用這個方法呢?
當每次小球移動時,就檢測是否和球拍碰撞,因此新增在moveBall()方法中
一到碰撞的當下,必須馬上矯正小球的y座標,避免一直和舊球拍重疊,分數瘋狂增加
每碰撞一次,分數+1
ii. 為了取得球拍y座標而在Racquet類別新增的方法
這邊給大家自己腦力激盪,到底該怎麼做才會變成以下結果勒?? (是需要用到什麼套件嗎?)
雖然這些程式碼在網路上都可以找到,但我希望大家可以透過思考並查詢該使用什麼樣的套件,因而找到答案,並把它內化成自己的養分兒~
總結:
此次帶大家做的小遊戲,不知道大家對Java有沒有更進一步的興趣?不管你是否曾學過Java,我想讓大家可以透過比較有趣的方法去認識並學習Java。這次主要想帶給大家的是
在學習過程中如何透過Java API去找到該類別方法應該如何使用,我想這是學習一個程式語言很重要的過程。
點此連結:Java Documentation