雙緩衝渲染

2022-02-16 15:27:18 字數 1982 閱讀 6944

<?xml version="1.0" encoding="utf-8"?>

xmlns:mx=""

layout="absolute"

width="600"

height="400"

framerate="100"

creationcomplete="creationcomplete()"

enterframe="enterframe(event)"

currentstate="mainmenu">

name="game"

enterstate="entergame(event)"

exitstate="exitgame(event)">

protected var ingame:boolean = false;

public function creationcomplete():void

public function enterframe(event:event):void

}protected function startgameclicked(event:event):void

protected function entergame(event:event):void

protected function exitgame(event:event):void

]]>

複製**

package

public function gameobjectmanager()

public function startup():void

public function shutdown():void

public function enterframe():void

protected function drawobjects():void}}

複製**

遊戲物件管理器(gameobjectmanager)物件負責管理組成最終遊戲的各個元素,比如:敵人、遊戲玩家和各種不同的背景元素,它還負責管理畫這些元素的後台緩衝,如果你回想起前台緩衝是把它作為乙個畫布元素來實現的,這是因為乙個畫布能夠被作為應用程式的乙個孩子直接加到應用程式裡是很方便的。後台緩衝是把它作為乙個位圖資料物件來實現的。這使得我們能夠直接快速地複製作為最後影象的畫素。

clearcolor 屬性指定了影象建立起來之前用來擦除後台緩衝用的顏色。最終整個後台緩衝將被遊戲元素所覆蓋,和這個顏色不同,但是現在這個顏色很重要,因為它將把最終的幀塗成一整塊。值0xff0043ab 代表深藍色。最前面的兩位16進製制值(在0x之後的)代表了alpha:ff 表示不透明,00表示透明。隨後的六位16進製制值構成了紅(00)綠(43)藍(ab)元件。

靜態instance屬性和instance函式一起使用來實現單態設計模式。基本上我們在程式裡總是只需要乙個gameobjectmanager物件存在(顧名思義)。通過參考gamaeobjectmanager裡的instance 屬性,我們可以總是只有乙個gameobjectmanager生成。單態設計是一種相當普通的程式設計模式,當actionscript 缺少對私有構造器的支援它仍然可以作為乙個有用的自我測試工具(只要你看見乙個instance屬性,極有可能物件是單態設計模式。

lastframe 屬性僅僅儲存了最後一幀被繪製的時間。通過保留時間軌跡,我們能夠判斷最後一幀和當前幀的相隔時間,這最終相反又允許我們依據這個時間來更新遊戲元素。即使我們還沒有任何遊戲元素,我們仍然在enterframe函式中以秒來計算幀之間的時間。當呼叫startup函式時,lastframe時間被重置,這是因為程式不在遊戲狀態時gameobjectmanager不能被更新。如果我們不重置lastframe的值,下一級的第一幀時間將和遊戲玩家在選單的各個級別之間花費的時間相等。遊戲玩家能夠在第一幀通過該級別在遊戲中途直接結束遊戲,而這可以被很好地避免。

那麼現在我們完成了什麼呢?通過實現狀態我們生成了乙個選單螢幕,遊戲玩家能夠從這裡通過點選按鈕進入遊戲。「遊戲」本身只是乙個雙緩衝的實現,這裡還只是畫了乙個藍色的背景。最後通過實現狀態和繪製,我們能夠做到乙個有趣的事情:繪製螢幕。

如何實現雙緩衝 vc雙緩衝

cdc memdc 首先定義乙個顯示裝置物件 cbitmap membitmap 定義乙個位圖物件 隨後建立與螢幕顯示相容的記憶體顯示裝置 memdc.createcompatibledc null 這時還不能繪圖,因為沒有地方畫 下面建立乙個與螢幕顯示相容的點陣圖,至於點陣圖的大小嘛,可以用視窗的...

雙緩衝和後備緩衝

前面的例子都是,直接在主表面上繪東西。對於動畫,直接在主表面上繪,會產生很嚴重的閃爍。解決的辦法是採用雙緩衝或後備緩衝。雙緩衝 在離屏緩衝中繪製影象,然後將其拷貝到顯示表面。見下面 先把資料放到double buffer,最後再拷貝到主表面上。下面sleep 300 睡眠了0.3秒這麼長的時間是為了...

vc雙緩衝 VC 雙緩衝實現方法

在圖形圖象處理程式設計過程中,雙緩衝是一種基本的技術。我們知道,如果窗體在響應wm paint訊息的時候要進行複雜的圖形處理,那麼窗體在重繪時由於過頻的重新整理而引起閃爍現象。解決這一問題的有效方法就是雙緩衝技術。因為窗體在重新整理時,總要有乙個擦除原來圖象的過程onerasebkgnd,它利用背景...