PIZiadas圖形

PIZiadas圖形

我的世界是英寸.

圖形化編程: 發動機動畫 [JAVA]

motor_animación限定第一後 接口 繪製圖形對象 JAVA, 我們將實施 圖形動畫引擎 這使我們能夠管理應用程序的動態和, 後來, 新增用戶交互.

該發動機是負責調用鼓勵每個圖形對象的數據庫中的功能.

遊戲引擎 是一個術語,指一系列 編程程序 允許 設計, 的創作和表現 遊戲.

與此類似的還有兩個遊戲機運行遊戲引擎和 操作系統. 遊戲引擎的基本功能是提供一種渲染引擎為2D圖形和, 電機費斯切拉Ø 碰撞檢測, 聲音, 腳本, 動畫, 人工智能, 網絡, , 內存管理和場景圖。().

我們的第一個引擎實現將建立在功能,我們已經在類負責存儲和代表性: “黑板“. 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));
	}
JAVA

當然JAVA