Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android游戲 >> Android游戲開發 >> Android游戲開發21:Android設備掩蓋真實分辨率的解決方法及游戲引擎的用法簡述

Android游戲開發21:Android設備掩蓋真實分辨率的解決方法及游戲引擎的用法簡述

編輯:Android游戲開發

       有時你可能會碰到這種情況:新建一個配置為WAGA800、分辨率是800*480的設備模擬器,我們在程序中獲取其Height和Width的時候發現總是320*533,明顯是系統對我們撒了謊!那麼系統為何要輸出假分辨率呢?有什麼意義呢?

       簡單的來說,在SDK1.6 (sdk version 4)以後,Android 增加了新功能“支持多屏”,所謂這項新功能也就是為了讓我們的游戲、軟件能在不同的分辨率,不同機型上一樣流暢、玩美運行,其作用一來減輕我們的移植工作量,二來更好的體現Android 越來越強勁的勢頭。

       自適應效果如下圖:(WVGA高密度(左),中密度的HVGA(中),低密度和QVGA(右)

Android設備掩蓋真實分辨率的解決方法及游戲引擎的用法簡述

       在不同的分辨率上想玩美的跑起來一款游戲和軟件,有兩種方式,一種是我們做游戲的時候都做成自適應屏幕的游戲方式,比如我們取坐標都根據屏幕的寬、高、圖片的寬、高等等而不是寫成死的位置坐標。 第二種那就是Android os 在1.6以後的這種自適應技術。

       但是有些時候顯然Android提供的這種自適應有時候我們不需要,或者說不太適合我們的開發,(其實這也類似於現在的游戲引擎,很多人都在問我開發游戲用什麼引擎,其實公司都有自己的引擎。我自己寫游戲一般不使用他人引擎(自己寫引擎),因為沒有一款游戲引擎適應所有的游戲類型開發,例如用RPG的引擎去做個益智連連看?是不是搞了點 – -…當然現在市面上已經有不少的游戲開發引擎,但是使用別人的游戲引擎,對於開發來說,雖然提高了開發效率,縮短了開發周期,但是對於其擴展性不得不說很是頭疼的一件事情,so~建議大家去吸收這些開源引擎的知識和技術,自己整理出一份屬於自己的游戲引擎,畢竟自己的擴展起來就容易多了!而不能去一謂的去使用和強加灌輸別人的思維方式到自己腦中)咳咳、回到主題上來,剛才說了,有時候我們並不想使用Android os 提供的自適應,而是我們自己去寫自適應,這樣更加的靈活.

       下面給講解如何避開Android os的自適應的方法

       先來看下官方的一段話:

Android設備掩蓋真實分辨率的解決方法及游戲引擎的用法簡述

       這裡是從官方文檔中截取的一段,這裡是在說,當Android sdk的版本是4或更低與版本為5或更高的之間的區別;

       那麼從這裡可以得知Android sdk 1.6(version 4)之前是不支持自適應的,那麼解決的方法也就有了;

       我們只需要在AndroidMainFest 中定義  <uses-sdk android:minSdkVersion=”4″ /> 就OK了!

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>     
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"    
  3.     package="com.desmo.testAd" android:versionCode="1" android:versionName="1.0">     
  4.     <application android:icon="@drawable/icon" android:label="@string/app_name">     
  5.         <activity android:name=".Test" android:label="@string/app_name">     
  6.             <intent-filter>     
  7.                 <action android:name="android.intent.action.MAIN" />     
  8.                 <category android:name="android.intent.category.LAUNCHER" />     
  9.             </intent-filter>     
  10.         </activity>     
  11.     </application>     
  12.     <uses-sdk android:minSdkVersion="4" />     
  13. </manifest>  

       然後我們看看修改後xml後的運行截圖:

Android設備掩蓋真實分辨率的解決方法及游戲引擎的用法簡述

       這樣就正常啦。

       最後再補充兩點內容:

       第一:

一般來說800X480的density為240, 這樣得到的系數大小為240/160,所以320X533再乘上1.5就是正確的像素,這個需要結合屏幕的density來計算。

       這段話說的沒錯,(公式的由來官方api 文檔中有寫)Android SDK 1.6 以上才可以通過 canvas.getDensity(); 得到密度,canvas.setDensity(240);設置密度,但是很多群友設置過密度的都知道這根本沒有任何的效果。然後我就想通過利用比值去對canvas進行縮放處理處理畫布使其回到正確的分辨率(像素),雖然目的達到了,但是發現失真效果很嚴重。所以我認為還是用xml定義minSdkVersion 的方式方便、實用。但是又出現了下一個問題:

       第二:

<uses-sdk android:minSdkVersion=”4″ /> ,加了這句話之後SDK=3時候(也就是SDK 1.5的時候),做出來的APK不就裝不成了嗎?

       沒錯,我們一旦定義了應用程序運行的最低版本,那麼低於此版本的都無法安裝此應用,但是除了利用密度比值,現在我也沒有其好的解決方案。

       總結:先說一句,我們這種使用定義應用程序運行的最低版本的方式來解決,存在兩種弊端:

       第一: 低於1.6sdk無法安裝程序。

       第二:影響高版本的功能,例如我們的BlueTooth(藍牙)是在2.0+的api中才有的。

       但是可以利用密度比值,但是最好不要,畢竟失真嚴重。

       有的童鞋說利用在項目的AndroidManifest.xml中定義這些屬性:

       android:normalScreens=”true”

       android:smallScreens=”true”

       android:anyDensity=”true”

       這些是一些開關,比如是否支持小屏幕、是否支持任意密度等等,但是通過嘗試發現效果不理想,甚至沒效果。可能是使用的方法不對,希望對這方面比較深入探究的童鞋可以將心得分享出來供大家討論學習。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved