【Android遊戲開發二十一】Android os裝置謊言解析度的解決方案!以及簡單闡述遊戲引擎如何使用

來源:互聯網
上載者:User

Posted: 5th 二月 2012 by Himi in Android 遊戲開發系列
Tags: Android os, Android裝置, 謊言解析度
3

本站文章均為 李華明Himi 原創,轉載務必在明顯處註明:
轉載自【黑米GameDev街區】
原文連結: http://www.himigame.com/android-game/356.html


          ☞ 點擊訂閱 ☜
本部落格最新動向!及時將最新博文通知您!

 

剛才一群裡的兄弟問的一問題,稍微研究下,這裡一起分享:建立的Emulator -配置為:WAGA800  其解析度是 800*480
的裝置模擬器,當我們程式中在取得其 Height和 Width的時候發現,總是 320*533 ,明顯是系統對我們撒了謊!如:

 

下面是官方文檔原文:

http://androidappdocs.appspot.com/guide/practices/screens_support.html

那麼為什麼系統會對其解析度進行撒謊呢? 其作用是什麼呢?

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

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

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

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

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

先來看下官方的一段話:

 

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

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

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

12345678910111213 <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.desmo.testAd" android:versionCode="1" android:versionName="1.0">    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".Test" android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>    <uses-sdk android:minSdkVersion="4" /></manifest>

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

 

這樣就正常啦,
這裡呢我要給大家道個歉,大家也看到了,最近也沒有更新文章,主要原因是一個回老家過年,今天剛回到公司第一天上班,第二點是由於出書的緣故,已經簽下了
《清華出版社》的合約,將大概在上半年完成一本關於Android
遊戲開發書籍,so~大家也體諒一下我,當然部落格我肯定是還要更新的,不過速度不會跟以前一樣快了。

這裡還要說下,我寫的這21篇文章,基本上對於學習遊戲開發都是很實用很有用的,希望大家一定要細細的看,因為不少人問的都是寫過的東西 – -;如果大家還有什麼疑惑和問題可以來群裡進行交流和互相學習。

OK 就寫到這裡,自己會儘快完成書籍,讓大家早點看到。

_________________>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

本文補充:看到有些網友的回複,大概還存在兩個問題。下面來逐一進行分析;

    

第一:

”     一般來說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”

這些是一些開關,比如是否支援小螢幕、是否支援任意密度等等,但是通過嘗試發現效果不理想,甚至沒效果;

可能是使用的方法不對,希望對這方面比較深入探究的童鞋可以將心得分享出來供大家討論學習;

        如果各位童鞋還有什麼的好的建議和方法可以通知我、謝謝。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.