歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android 游戲之場景的實現以及拓展應用照片浏覽器

我們說下Android游戲,當我們過關卡的時候游戲中或許出現場景切換,這對做游戲開發的同學們在熟悉不過了,這裡我簡單介紹下,一來自己鞏固下學習的知識,二來把我學習的心得分享出來,以便大家共同進步.

實現原理:首先我們對屏幕進行clipRect獲取相應的矩形模塊.然後在用圖片進行填充.

矩形(橫向)交差場景實現:

/***
  * 矩形場景(橫向)
  */
 public void doRect_H() {
  /** 交錯的實現矩形相交 **/
  int ractHeight = (mScreenHeight / ractCount);// 獲取每個矩形寬度.
  // 左邊開始(偶數0,2,4...)
  for (int i = 0; i < ractCount; i += 2) {
   drawFillRect(mCanvas, Color.BLACK, 0, i * ractHeight, rectStep,
     ractHeight);
  }
  // 右邊開始(奇數1,3,5...)
  for (int i = 1; i < ractCount; i += 2) {
   drawFillRect(mCanvas, Color.BLACK, mScreenWidth - rectStep, i
     * ractHeight, rectStep, ractHeight);
  }

 }

我簡單講解下流程:針對屏幕我們分割成10條矩形,然後我們在對這10條矩形進行一一填充.而填充的就是下一個的場景.矩形(縱向)交差場景同理.

這裡要說明一點,你要理解canvas的save和restore方法.

save:用來保存Canvas的狀態。save之後,可以調用Canvas的平移、放縮、旋轉、錯切、裁剪等操作。

restore:用來恢復Canvas之前保存的狀態。防止save後對Canvas執行的操作對後續的繪制有影響。

save和restore要配對使用(restore可以比save少,但不能多),如果restore調用次數比save多,會引發Error。save和restore之間,往往夾雜的是對Canvas的特殊操作。

百葉窗場景實現:

/***
  * 百葉窗場景
  */
 public void doSQUARE() {
  /** 百葉窗效果利用雙for循環 修改每個矩形繪制的寬度 **/
  for (int i = 0; i <= (mScreenWidth / squareRange); i++) {// 算取寬包含多少個正方形,
   for (int j = 0; j <= (mScreenHeight / squareRange); j++) {// 算去高包含多少正方形.
    drawFillRect(mCanvas, Color.BLACK, i * squareRange, j
      * squareRange, rectStep, rectStep);
   }
  }
 }

簡單說明:根據View的寬高分割成若干個正方形然後一一進行填充.

滾動(向右)水紋場景:

/***
  * 滾動水紋場景(右移動)
  */
 public void doSHADOW_RINGHT() {
  /***
  * 在這裡我們要算去各個矩形的寬度以及起始的X坐標
  *
  * 注意要理解其含義.
  */
  int X1 = rectStep + rectX1;// 矩形1的x坐標
  int rectWidth1 = rectW + 12;// 矩形1的寬度
  int X2 = X1 + rectWidth1 + rectX2;
  int rectWidth2 = rectW + 5;
  int X3 = X2 + rectWidth2 + rectX3;
  int rectWidth3 = rectW;

  /** 水紋效果其實繪制了4個矩形 中間留一些縫隙 **/
  drawFillRect(mCanvas, Color.BLACK, 0, 0, rectStep, mScreenHeight);

  drawFillRect(mCanvas, Color.BLACK, X1, 0, rectWidth1, mScreenHeight);

  drawFillRect(mCanvas, Color.BLACK, X2, 0, rectWidth2, mScreenHeight);// 繪制第二條矩形

  drawFillRect(mCanvas, Color.BLACK, X3, 0, rectWidth3, mScreenHeight);// 繪制第三條矩形

 }

簡單說明:首先我們將屏幕分割四個長方形.第一個會時時增大及向右移動,而其余三個長方形也跟隨右移動,所以感覺類似於滾動波紋.滾動(向左)水紋場景同理.

橫向分割場:

/***
  * 橫向分割圖片
  */
 public void doHalf_V() {
  int Y = mScreenHeight / 2;// 獲取中間分割線
  int Y1 = Y - rectStep;// 上半部分X坐標

  drawFillRect(mCanvas, Color.BLACK, 0, Y1, mScreenWidth, rectStep);// 繪制上部分

  drawFillRect(mCanvas, Color.BLACK, 0, Y, mScreenWidth, rectStep);// 繪制下部分
 }

Copyright © Linux教程網 All Rights Reserved