限定第一後 接口 為 繪製圖形對象 在 JAVA, 我們將實施 圖形動畫引擎 這使我們能夠管理應用程序的動態和, 後來, 新增用戶交互.
該發動機是負責調用鼓勵每個圖形對象的數據庫中的功能.
一 遊戲引擎 是一個術語,指一系列 編程程序 允許 設計, 的創作和表現 遊戲.
與此類似的還有兩個遊戲機運行遊戲引擎和 操作系統. 遊戲引擎的基本功能是提供一種渲染引擎為2D圖形和3ð, 電機費斯切拉Ø 碰撞檢測, 聲音, 腳本, 動畫, 人工智能, 網絡, 流, 內存管理和場景圖。(該).
我們的第一個引擎實現將建立在功能,我們已經在類負責存儲和代表性: “黑板“. Definiremos取消 新界面 添加一個新功能, 的能力 animar un objeto.
接口Animable
新 “接口” 宣布將合併實現它的類的單一方法.
包 圖形; 公眾 接口 動畫 { 公眾 無效 靈魂(); }
例如, 我們可以修改我們的圖形類之一是鼓勵, 或創建一個新的擴展其他的功能, 如新的類 Point2DAnimable 那 擴展的類 的Point2D 存儲坐標, 和 動畫實現接口 它鼓勵的作用只是隨機地改變存儲的坐標.
包 圖形; 公共類 Point2DAnimable 擴展 的Point2D 器物 動畫{ 公眾 Point2DAnimable(詮釋 x, 詮釋 和){ 超(x,和); } 公共無效 靈魂() { X + =(詮釋)(的Math.random()*5); X- =(詮釋)(的Math.random()*5); 和+ =(詮釋)(的Math.random()*5); Y- =(詮釋)(的Math.random()*5); } }
添加新的對象到黑板類的存儲系統從主applett
私人無效iniciarElementos() { pizarra.addElement(新Point2DAnimable(50,50)); pizarra.addElement(新的Point2D(70,50)); pizarra.addElement(新的Point2D(50,70)); }
在數據庫中有生命物體, 我們實現了類的新方法,該方法黑板將分析,如果他們是動畫, 在這種情況下,函數調用本身鼓勵每個對象
公共無效的靈魂(){ 枚舉枚舉= bd.elements(); 對象ob; 而(enum.hasMoreElements()){ OB = enum.nextElement(); 如果(OB的instanceof Animable){ ((動畫) 是否).靈魂(); } } }
動畫引擎
該管理動畫更新的過程就是我們所說的動畫引擎 (構造為螺紋或 “線“). 你的責任是要叫我們在類中實現的動畫製作流程 黑板.
在 操作系統, 一 執行線程, 線 或線程正在處理的可計劃由操作系統的最小單位.
一個線程 (線) 這是一個功能,允許應用程序同時執行多項任務 (concurrentemente). 各個線程共享一些資源,如內存空間, 打開文件, 認證情況, 等等. 該技術簡化了必須同時執行不同的功能的應用程序的設計.
線程是基本上可以並行與其他任務要執行的任務。(該)
我們的動畫引擎實現的類 “可運行” 提供啟動和停止方法.
包 圖形; 公共類 MotorGrafico 器物 可運行 { 長間隔= 100;
我們將有許多變量的布爾控制以暫停動畫.
布爾parar = FALSE; 公共無效parar() { parar =真; } 布爾pausado = FALSE; 無效pausar() { 悠然= !悠閒; }
在類的構造函數將接受一個對象 “黑板” 作為一個參數. 它將服務知道哪個元件具有主導動畫的任務. 這個對象將其存儲在一個變量以後引用它.
私人 黑板格拉夫; 公眾 MotorGrafico(黑板格拉夫) { 這.格拉夫=格拉夫; }
開始執行的線程之前,我們必須確保不活躍, 在這種情況下,我們將摧毀不會同時運行不超過一個過程.
私人 揮發物 螺紋信號燈; 公共無效 開始() { 如果(方向指示燈!=空值){ 閃光燈=空值; } 閃光燈= 新 線(這); blinker.start(); }
要停止動畫引擎破壞執行線程, 簡單地分配一個零值,以控制所述可變 “線”.
公眾 無效 停止() { 閃光燈= 空值; }
主要處理的功能進行 “運行()”.
我們不希望停止執行程序首先檢查, 並驗證執行的線程是正確的. 如果是這樣的, 暫停程序執行毫秒調用 “睡覺” 和, 恢復, 我們把動畫的方法. 一旦動畫圖形元素,以退 (重繪)
公共無效 運行() { 線 thisThread = 線.currentThread(); 而 (!停止 && 方向指示燈 == thisThread) { 嘗試 { thisThread.sleep(間隔); } 抓住 (InterruptedException的ê) {} 如果 (格拉夫 != 空值 && !悠閒) { 賦予生命(); graf.repaint(); } } }
性能 “賦予生命” 將調用函數 “靈魂()” 分類 “黑板”, 負責存儲圖形數據庫.
私人無效 賦予生命() { graf.anima(); } }
該計劃的實施
樣品類應該包括對象的聲明 “MotorGrafico” 誰將會傳遞參數,找到圖形顯示或 “黑板”.
公共類 示例1 擴展 Applet的 { 黑板板=新 黑板(); MotorGrafico電機=新 MotorGrafico(黑板);
也, 我們通過調用它的方法啟動動畫引擎 “開始()”
公眾 示例1() 投 HeadlessException的 { 這.的setLayout(新 網格佈局()); 這.加(黑板); iniciarElementos(); motor.start(); }
我們可以將某些元素只會增加關鍵幀的圖形數據庫來完成練習. 我們會看到,有些項目不移動, 而實現該接口 “動畫” 如果他們這樣做隨機.
私人 無效 iniciarElementos() { pizarra.addElement(新 Point2DAnimable(50,50)); pizarra.addElement(新 Point2DAnimable(60,50)); pizarra.addElement(新 Point2DAnimable(50,80)); pizarra.addElement(新 Point2DAnimable(50,70)); pizarra.addElement(新 的Point2D(70,50)); pizarra.addElement(新 的Point2D(50,70)); }
一定是 連接的 發表評論.