• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      SurfaceView在Android游戲開發(fā)中的研究

      2014-09-16 01:52:37易國(guó)平
      學(xué)周刊·下旬刊 2014年6期

      易國(guó)平

      摘要:目前,Android平臺(tái)的市場(chǎng)份額已經(jīng)躍居全球第一,其平臺(tái)的開發(fā)性讓越來(lái)越多的人加入Android平臺(tái)的游戲開發(fā)。在游戲開發(fā),程序運(yùn)行的元素越來(lái)越多,要讓程序員自己控制刷新屏幕,就需用到類庫(kù)SurfaceView。因此SurfaceView在游戲開發(fā)中尤為重要,本文就SurfaceView在開發(fā)中用到的相關(guān)屬性和方法做詳細(xì)說(shuō)明,以幫助大家對(duì)SurfaceView快速的了解。

      關(guān)鍵詞:Android SurfaceView 游戲開發(fā)

      近年來(lái),Android平臺(tái)越來(lái)越火爆,其市場(chǎng)份額已占全球第一。隨著科技水平的進(jìn)步和android平臺(tái)的領(lǐng)先,Android的游戲開發(fā)是程序員的新的發(fā)展方向。Android普通程序開發(fā)的UI線程更新畫面,是由程序后臺(tái)控制,這是被動(dòng)更新畫面。簡(jiǎn)單的棋牌類游戲開發(fā)可以,但是實(shí)時(shí)互動(dòng)的游戲就需要自我掌控屏幕的刷新。而SurfaceView類就是在這種情況產(chǎn)生的,它在一個(gè)新啟動(dòng)的線程中重新繪制畫面,主動(dòng)更新畫面。

      一、SurfaceView簡(jiǎn)介

      說(shuō)到SurfaceView類,就需要先介紹下它的父類View,View一般在onDraw方法里面繪圖,onDraw在UI主線程執(zhí)行。onDraw默認(rèn)只在View初始化的時(shí)候調(diào)用一遍,所以View不會(huì)自動(dòng)刷新畫面,一般要調(diào)用invalidate或者postInvalidate來(lái)重新執(zhí)行onDraw里面的代碼進(jìn)行刷新畫面。SurfaceView也可以在onDraw方法里面繪圖,即直接在UI主線程繪圖并渲染,因?yàn)镾urfaceView是View的子類。上面已經(jīng)介紹,繪圖完畢后只能在UI主線程內(nèi)渲染到屏幕上。為了不阻塞主線程,我們可以考慮采取這樣的方案:在后臺(tái)線程執(zhí)行繁重的繪圖任務(wù),把所繪制的東西緩存起來(lái);繪圖完畢后,再回到UI主線程,一次性把所繪制的東西渲染到屏幕上。(本質(zhì)就是后臺(tái)線程繪圖,UI主線程渲染)只使用View的onDraw方法是無(wú)法實(shí)現(xiàn)這種方案的,而SurfaceView可以實(shí)現(xiàn)這種方案。

      先看看SurfaceView的工作原理圖:

      首先,SurfaceView使用Canvas對(duì)象進(jìn)行繪圖;由圖可以看出,Canvas在后臺(tái)線程繪制的東西先緩存到Surface中。其次,讓Surface回到UI主線程渲染到屏幕上。因此,要有Surface對(duì)象存在,才能夠在屏幕上顯示圖案。

      二、SurfaceView在代碼中各成員解釋

      (一)Surface與SurfaceHolder對(duì)象

      Surface是SurfaceView里面的一個(gè)成員變量,它的創(chuàng)建和銷毀過(guò)程都是自動(dòng)的。Surface的主要作用是緩存Canvas繪制的東西,并渲染到屏幕上。SurfaceHolder對(duì)象通過(guò)類SurfaceView的getHolder()函數(shù)獲得。

      (二)后臺(tái)繪圖線程的開啟與銷毀

      在Surface被創(chuàng)建的時(shí)候,開啟繪圖線程。在Surface被銷毀的時(shí)候,銷毀繪圖線程。因?yàn)闆]有Surface,繪制再多的東西也無(wú)法渲染到屏幕上。既然要在創(chuàng)建Surface時(shí)開啟繪圖線程,在銷毀Surface時(shí)銷毀繪圖線程。那就需要監(jiān)聽Surface的生命周期,使用SurfaceHolder對(duì)象的addCallback()來(lái)添加Surface的生命周期監(jiān)聽器——SurfaceHolder.Callback

      (三)Callback的成員函數(shù)

      1.Surface的大小發(fā)生改變時(shí)調(diào)用surfaceChanged

      2.Surface創(chuàng)建時(shí)調(diào)用,一般在這里開啟繪圖線程surfaceCreated

      3.Surface銷毀時(shí)調(diào)用,一般在這里銷毀繪圖線程surfaceDestroyed

      三、實(shí)例的具體實(shí)現(xiàn)步驟及代碼實(shí)現(xiàn)

      (一)1SurfaceView使用步驟

      1.新建一個(gè)繼承SurfaceView的類——GameView

      2.得到SurfaceHolder對(duì)象,并監(jiān)聽Surface的生命周期

      3.開啟繪圖線程、銷毀繪圖線程

      4.在run方法中嘗試進(jìn)行繪圖

      5.動(dòng)態(tài)刷新屏幕

      (二)具體代碼實(shí)現(xiàn):

      1.MainActivity,主要Activity

      class MainActivity extends Activity {

      public void onCreate(Bundle savedInstanceState){

      super.onCreate(savedInstanceState);

      setContentView(new MyView(this));

      2.MySurfaceView

      class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{

      SurfaceHolder holder;

      public MyView(Context context) {

      super(context);

      holder = this.getHolder();//獲取holder

      holder.addCallback(this);

      }

      @Override

      public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }

      @Override

      public void surfaceCreated(SurfaceHolder holder) {

      new Thread(new MyThread()).start();

      }

      @Override

      public void surfaceDestroyed(SurfaceHolder holder) { }

      }

      3.MyThread

      class MyThread implements Runnable{

      @Override

      public void run() {

      Canvas canvas = holder.lockCanvas(null);//

      獲取畫布

      Paint mPaint = new Paint();

      mPaint.setColor(Color.BLUE);

      canvas.drawRect(new RectF(40,60,80,80), mPaint);

      holder.unlockCanvasAndPost(canvas);//解鎖畫布,提交畫好的圖像

      }

      }

      本文對(duì)Android系統(tǒng)的游戲開中的SurfaceView類進(jìn)行了分析,對(duì)于SurfaceView在游戲開發(fā)中與View的區(qū)別做了簡(jiǎn)單說(shuō)明,最后給出一個(gè)簡(jiǎn)單的例子作為學(xué)習(xí)的樣例,為能夠給游戲開發(fā)人員提供一點(diǎn)啟示。

      參考文獻(xiàn):

      [1](美)Shane Conder(美)Lauren Darcey .Android移動(dòng)應(yīng)用開發(fā)入門到精通人民郵電出版社,2010.

      [2]胡必波.基于Android系統(tǒng)的手機(jī)游戲設(shè)計(jì)與實(shí)現(xiàn)[D]. 華南理工大學(xué).

      (責(zé)編 張景賢)

      泗阳县| 中方县| 新宾| 龙胜| 航空| 钟山县| 韩城市| 瓮安县| 湟中县| 黔东| 平利县| 乌苏市| 恩施市| 临漳县| 德兴市| 武陟县| 永丰县| 田阳县| 郧西县| 河西区| 鹤岗市| 巴林左旗| 元朗区| 蓬安县| 遂昌县| 托里县| 瑞丽市| 会昌县| 雅安市| 大英县| 泰州市| 天柱县| 徐汇区| 三穗县| 长丰县| 昭觉县| 伊金霍洛旗| 迁西县| 章丘市| 勐海县| 陈巴尔虎旗|