黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

談?wù)凙VG游戲的Android移植(NScripter與吉里吉

系統(tǒng) 5669 0
大家好,很久不見,小弟最近閉關(guān)修煉iPhone中,所以很長(zhǎng)時(shí)間沒更新博文(順便在寫某物的C++版,另外某物0.3.2版與WP7版已構(gòu)建完成,不久就會(huì)發(fā)布)。這次回來,先換個(gè)與某物無關(guān)的話題,以目前用戶量最大的NScripter(簡(jiǎn)稱NS,以下同)與Krkr2(吉里吉里2)為代表,來簡(jiǎn)單談?wù)?AVG游戲的Android環(huán)境移植吧。

______________


關(guān)于NScripter的Android版移植:


ONS和SDL:


大家都知道,日本人高橋直樹是NScripter項(xiàng)目的發(fā)起者。

然而,事實(shí)上高橋直樹開發(fā)的原始版NS程式早在09年就已經(jīng)停止了更新,現(xiàn)今已很難再看見利用原版NS開發(fā)的程式。那么,NS為何還能有現(xiàn)在這么龐大的用戶支持率呢?答案很簡(jiǎn)單,一切都要?dú)w功于ONS的存在。應(yīng)當(dāng)說,目前應(yīng)用最廣,也是真正讓NS腳本發(fā)揚(yáng)光大的,還要數(shù)第三方制作的ONScripter,這一完整支持NS腳本的跨平臺(tái)AVG引擎不可(簡(jiǎn)稱ONS,以下同)。


單獨(dú)從編程角度上講,ONS不等同于NS,由于高橋氏開發(fā)的NS程式并沒有開放源碼,因此ONS是通過黑盒方式參考NS效果自行模擬出的ONS功能(這個(gè)過程有點(diǎn)像制作游戲機(jī)模擬器),所以它并不是一個(gè)代碼移植品,而應(yīng)視同一個(gè)獨(dú)立于NS原版的新型NS腳本解釋與執(zhí)行器。除了能解讀同樣的游戲腳本外,它與 NS就沒有任何程式上的繼承關(guān)系。

ONS相比較NS的最大優(yōu)勢(shì)在于,ONS和完全依賴DirectX渲染僅支持Windows系統(tǒng)的NS不同,它采用了一代神人Slouken制作的SDL框架進(jìn)行腳本與計(jì)算機(jī)設(shè)備交互,天生具備SDL框架“駭人聽聞”的跨平臺(tái)移植能力。


無論是windows、linux、mac抑或PSP、PS3、PS2gs乃至wince、iphone、ipod、android平臺(tái)都能看到它活躍的身影(當(dāng)然,這需要相關(guān)的本地運(yùn)行庫配合,比如從渲染角度上講,在Windows繪制畫面既可以使用SDL提供的DirectX封裝又可以使用OpenGL 封裝,而到了Linux環(huán)境就只能使用OpenGL庫,到了智能機(jī)或者掌機(jī)環(huán)境就要轉(zhuǎn)到OpenGLES庫,這些都必須有人提供相關(guān)的本地化封裝,然后才能通過統(tǒng)一的API進(jìn)行調(diào)用。即便所寫代碼在API層面高度一致,但在不同環(huán)境中的具體實(shí)現(xiàn)依舊是有差異的。也就是說,如果某個(gè)平臺(tái)并沒有必要的運(yùn)行庫支持,那么SDL也無法在該平臺(tái)編譯與運(yùn)行。而SDL的強(qiáng)悍就體現(xiàn)在,它所提供的本地運(yùn)行庫相當(dāng)完整,幾乎涵蓋了所有主流系統(tǒng),兼容性卻又相當(dāng)優(yōu)異)。

憑借這種優(yōu)勢(shì),目前大家所見的,絕大多數(shù)使用NS腳本開發(fā)的AVG游戲(或者狹義的指galgame),大多是以O(shè)NS而非原版NS作為運(yùn)行環(huán)境——在掌機(jī)和智能機(jī)上尤其如此。

可以說,沒有SDL的成功,就沒有今天的NS(ONS)的輝煌。

這里吐個(gè)槽,前一陣小弟在某書店讀到某Android教程,其中以NDK5編譯了某版本的《雷神之錘》,而后就反復(fù)強(qiáng)調(diào)NDK移植C/C++游戲是多么方便,多么簡(jiǎn)單之類的。小弟以為,這種說法實(shí)在有些忽悠了。眾所周知,網(wǎng)上能找到的開源版《雷神之錘》( http://www.libsdl.org/projects/quake/ ),使用的就是SDL這個(gè)目前世界上兼容性最強(qiáng)的跨平臺(tái)引擎(而SDL子項(xiàng)目 http://libsdl-android.sourceforge.net/ ,早已提供了SDL與Android設(shè)備的完整交互支持)。因此,即便NDK5能正常編譯SDL開發(fā)的游戲,也只能證明NDK5的基本功能正常(Android好歹也是Linux核心,如果SDL在上面都跑不起來,讓Google情何以堪啊),卻無法理解成NDK開發(fā)有多么便捷,更不能代表所有 C/C++游戲都能輕松移植到Android環(huán)境當(dāng)中( 此前小弟曾和某友談及怎么常有人能把DOS游戲移植到Android環(huán)境中運(yùn)行的問題,小弟在此粗談兩點(diǎn):一、世上有個(gè)開源項(xiàng)目叫DosBox,能夠跨平臺(tái)模擬標(biāo)準(zhǔn)DOS運(yùn)行環(huán)境。二、DosBox是以SDL為核心開發(fā)的 ),就別提完全取代Java開發(fā)模式了。

我們登錄 http://onscripter.sourceforge.jp ,就可以獲得關(guān)于標(biāo)準(zhǔn)版ONS的詳細(xì)介紹與各版本下載路徑。

至于ONS-Android,則是由ONS作者提供的,完全實(shí)現(xiàn)了ONS功能的,專門用于跑在Android平臺(tái)的ONS版本。如果您要在Android上進(jìn)行NS游戲移植,首先就離不開ONS-Android的下載與編譯。


ONS-Android的編譯:


ONS-Android的編譯,僅需要如下步驟就可以做到。

1 下載SDL的Android版擴(kuò)展庫


由于標(biāo)準(zhǔn)版SDL源碼包中尚未包括Android本地化支持,所以我們需要單獨(dú)下載Android版SDL源碼包,才能在Android環(huán)境中正常編譯與運(yùn)行SDL程序。事實(shí)上,所有想使用SDL以C/C++方式開發(fā)Android游戲的用戶,也會(huì)需要這個(gè)SDL運(yùn)行庫的支持。

下載地址: http://libsdl-android.sourceforge.net/

(PS: ONScripter-Android內(nèi)置已是這個(gè)運(yùn)行庫,不必真正下載,此處僅說明來源)。

2 下載Android版ONScripter


下載地址: http://onscripter.sourceforge.jp/android/onscripter_android.tar.gz

由于ONS-Android采用JNI方式,進(jìn)行C/C++部分與Java部分的交互,因此下載后的源代碼也就同時(shí)包含了java(功能集中在游戲載入,界面初始化與JNI調(diào)用)與純C(sdl-android支持庫)兩大部分的源碼。

不過,真正解釋執(zhí)行NS腳本的ONScripter本體(C++實(shí)現(xiàn))這時(shí)卻并沒有包含在內(nèi)(估計(jì)是作者考慮到ONScripter核心代碼是所有平臺(tái)共通的,才沒有直接放入ONS-Android當(dāng)中)。

現(xiàn)在,我們還需要下載ONScripter的核心源碼部分,才能真正進(jìn)行ONS-Android編譯。

3 下載標(biāo)準(zhǔn)版ONScripter


下載地址(也可選其它版本): http://onscripter.sourceforge.jp/onscripter-20110619.tar.gz

好了,編譯ONS-Android的要素全部齊備了。

現(xiàn)在,將最后下載的ONS核心源碼解壓,并放入onscripter_android的jni\application文件夾下(建議解壓時(shí)不要改名,因?yàn)?ONS的Android.mk配置里默認(rèn)就是編譯onscripter*下文件,改名很可能導(dǎo)致找不到目標(biāo)文件(除非您重寫了Android.mk配置))。

這時(shí),我們只要通過NDK編譯onscripter_android項(xiàng)目,就能立刻得到相關(guān)的so文件了(累計(jì)將編譯出九個(gè)文件,其中只有l(wèi)ibapplication.so為ONS運(yùn)行庫,其余為SDL支持庫),相當(dāng)之簡(jiǎn)單吧?



下圖為通過Cygwin在Windows中編譯ONS的畫面。

談?wù)凙VG游戲的Android移植(NScripter與吉里吉里)
可以說,只要系統(tǒng)環(huán)境設(shè)定正常,原始ONS-Android配置已可保證編譯成功。假如在編譯時(shí)提示找不到某某文件,則說明環(huán)境變量中缺少必要的系統(tǒng)支持庫路徑,并非onscripter_android源碼不全,請(qǐng)自行在Android.mk添加相關(guān)路徑或者修改Cygwin環(huán)境配置,具體請(qǐng)參考NDK開發(fā)文檔或Cygwin使用文檔(當(dāng)然,直接Ubuntu編譯最簡(jiǎn)單)。

編譯成功后,獲得的so文件列表:

談?wù)凙VG游戲的Android移植(NScripter與吉里吉里)

有了so支持庫與Java代碼,任何稍有Android(或Java)開發(fā)經(jīng)驗(yàn)者,都能輕易將NS游戲運(yùn)行于Android系統(tǒng)之上。

ONS-Android的漢化問題:

出于眾所周知的原因,ONS-Android默認(rèn)并不支持中文編碼(它是日本人做的)。這樣的設(shè)計(jì),在使用原版ONS-Android運(yùn)行日文游戲時(shí)并不會(huì)有太大問題(只要該游戲沒有調(diào)用第三方插件,沒有使用額外API)。但是,一旦我們想要讓它跑一些經(jīng)過漢化的中文編碼游戲呢?顯而易見,肯定會(huì)造成亂碼的出現(xiàn)。


所以,如果我們想要ONS-Android能夠正常地進(jìn)行中文游戲顯示,在進(jìn)行ONS-Android編譯時(shí),便需修改其部分代碼。更準(zhǔn)確地說——是修改位于ONS核心包下的sjis2utf16.cpp文件來解決這一問題。

總體來講,ONS的字符解碼過程并不復(fù)雜,sjis2utf16.cpp中僅有initSJIS2UTF16(初始化解碼表到sjis_2_utf16這一數(shù)組中)、convSJIS2UTF16(轉(zhuǎn)化日文編碼SJIS為UTF-16編碼)、convUTF16ToUTF8(轉(zhuǎn)化UTF-16為UTF-8編碼)這三個(gè)函數(shù)在起作用。而ONS的所有字符解碼部分也會(huì)經(jīng)由調(diào)用convSJIS2UTF16和convUTF16ToUTF8這兩個(gè)函數(shù)產(chǎn)生作用(注意,initSJIS2UTF16是sjis_2_utf16變量初始化賦值時(shí)使用的函數(shù),僅會(huì)在ONS啟動(dòng)時(shí)調(diào)用一次)。


知道了這些,解決漢化問題就變得非常簡(jiǎn)單,只要根據(jù)現(xiàn)有的ONS解碼規(guī)則,將其sjis_2_utf16_org數(shù)組中的SJIS日文編碼表轉(zhuǎn)化為我們需要的中文編碼表(GBK也好,Big5也好,原理都一樣,一個(gè)指定編碼對(duì)應(yīng)一個(gè)相對(duì)的UTF-16編碼,然后以二維數(shù)組形式保存),就能夠非常輕松的實(shí)現(xiàn) ONS中文解碼,甚至不需改寫任何邏輯代碼(如果有某些字符需要特殊過濾,也可以修改convSJIS2UTF16和convUTF16ToUTF8這兩個(gè)函數(shù)進(jìn)行攔截)。編碼表較大,下文有相關(guān)下載地址。

當(dāng)然,如果我們想保留原版sjis2utf16.cpp內(nèi)容也沒問題,大可以新建一個(gè)gbk2utf16.cpp之類的文件,讓兩套解碼器并行存在,按需求進(jìn)行切換(比如想根據(jù)手機(jī)環(huán)境自適配字符解碼器)。怎么做呢?粗讀ONS源碼我們可以發(fā)現(xiàn),它實(shí)際調(diào)用到字符解碼器的部分,僅集中于DirectReader.cpp和 ONScripterLabel.cpp、ONScripterLabel_text.cpp這三個(gè)源文件當(dāng)中。具體的說,在于DirectReader 中的convertFromSJISToUTF8函數(shù)(其中同時(shí)調(diào)用了解碼器的convSJIS2UTF16與convUTF16ToUTF8函數(shù)。 PS:該文件中還有convertFromSJISToEUC函數(shù),是給資源文件名解碼的,如果文件名中沒有稀奇古怪字符的話原則上可以忽視不管,如果有的話也需要進(jìn)行適當(dāng)修改),以及ONScripterLabel_text.cpp中的drawGlyph函數(shù)(調(diào)用convSJIS2UTF16)和 ONScripterLabel中的initSDL函數(shù)(調(diào)用initSJIS2UTF16)。如果想自適配解碼器,只需創(chuàng)建出相關(guān)的解碼用函數(shù)(放在 gbk2utf16.cpp、big52utf16.cpp隨便什么中原理都一樣,改個(gè)編碼表而已),繼而通過最簡(jiǎn)單的if……else……判定即可(如果想根據(jù)編譯環(huán)境判定,直接#if defined也行)。


總之,ONS中文解碼并不是什么復(fù)雜的問題,漢字編碼表可以去 http://unicode.org 查詢,或者參考Emacs項(xiàng)目提供的map文件(下載一個(gè)Emacs,解壓后它的etc/charsets文件夾下全是后綴為.map的編碼表)。還有,很久以前有人用google code發(fā)布過ONS的gbk解碼版本( http://onscripter-cn.googlecode.com/svn/trunk/ ),有需要的朋友可以從svn下載過來參考。



ONS-Android的運(yùn)行機(jī)制:


單從Java編程角度來說,ONS-Android的結(jié)構(gòu)可謂非常簡(jiǎn)單,開放給用戶的僅有Audio.java、DataDownloader.java、 GLSurfaceView_SDL.java、ONScripter.java、Video.java這五個(gè)Java文件而已(因?yàn)榫唧w實(shí)現(xiàn)是 C/C++的)。其中Video.java最為重要,它包含有DemoRenderer和DemoGLSurfaceView兩個(gè)子類,這不單是ONS- Android的渲染核心,而且包含了nativeInit, nativeInitJavaCallbacks, nativeDone,nativeResize,nativeMouse,nativeKey等六個(gè)jni接口。其中最主要的接口是 nativeInitJavaCallbacks以及nativeInit,只有執(zhí)行了這兩個(gè)jni函數(shù),才能真正啟動(dòng)ONS(本質(zhì)上是先啟動(dòng)SDL框架,附帶喚醒ONS)。


而執(zhí)行nativeInit函數(shù)時(shí)需要注入的地址字符串,默認(rèn)來源于 ONScripter類下的gCurrentDirectoryPath這個(gè)靜態(tài)變量。不管我們往gCurrentDirectoryPath中放入什么字符串,默認(rèn)情況下ONS都會(huì)按照這個(gè)字符串去讀取/保存游戲資源(如果不能找到該路徑,則ONS會(huì)立即崩掉)。

至于其它,nativeDone是關(guān)閉SDL(由于ONS依賴于SDL,所以這些操作實(shí)際上都會(huì)先執(zhí)行SDL部分,然后才轉(zhuǎn)到ONS部分,以下同),nativeResize是改變SDL畫面大小,nativeMouse觸發(fā)SDL屏幕操作,nativeKey觸發(fā)SDL鍵盤操作,皆屬基礎(chǔ)操作,并沒太多好講解的。

PS:上述部分jni源碼位于 onscripter_android\jni\sdl\src\video\android 文件夾下,如果要修改Java類名或接口名,請(qǐng)注意同時(shí)修改相關(guān)C代碼。

而 ONS-Android的啟動(dòng)用Activity是ONScripter類,其中真正調(diào)用ONS運(yùn)行的只有runSDLApp這個(gè)私有函數(shù),至于 runLauncher及runDownloader函數(shù)一者為要求游戲用戶選擇ONS資源所在路徑,一者為通過網(wǎng)絡(luò)下載ONS游戲資源,都只會(huì)在 runSDLApp執(zhí)行前調(diào)用,也不會(huì)實(shí)際觸發(fā)jni接口(只有runSDLApp觸發(fā)jni操作)。所以,如果您不想讓游戲用戶使用您的APK啟動(dòng)其它人提供的游戲資源(也就是不想被人當(dāng)模擬器用),則可以刪除runLauncher函數(shù),或者固定gCurrentDirectoryPath變量中路徑字符串即可。

再者,游戲初始化后默認(rèn)顯示于畫面右側(cè)的僅僅是Java編碼的ONS操作按鈕(如ESC、Skip 這些),它們僅會(huì)通過JNI方式調(diào)用相應(yīng)的SDL API,而不會(huì)真正影響C/C++實(shí)現(xiàn)部分。因此,如果您需要改變它們的顯示位置,或者進(jìn)行刪除、修改這些按鈕的操作,乃至用其它方式徹底替代它們(比如將相關(guān)JNI調(diào)用放入Menu中,按下菜單鍵時(shí)才起作用),都只需修改相關(guān)Java代碼即可,無需改變?nèi)魏蜟/C++部分。

另外,通過解讀源碼我們可以獲悉,在ONS-Android初始化運(yùn)行時(shí),有三種文件必不可少。

一是腳本文件,它可以命名為0.txt、00.txt、nscr_sec.dat、nscript.___、nscript.dat這五種名稱中的任意一種(后三種都屬于NS的dat文件包,需要通過工具打包,網(wǎng)絡(luò)有下載),但除此之外的名稱一概不認(rèn),沒有則無法運(yùn)行游戲。

二是游戲資源文件,也就是NS中使用的arc.nsa,游戲中使用的音頻與圖像文件強(qiáng)制要求打成此包(NS提供有打包工具),并且保持此名稱不變,否則ONS還是不認(rèn)。

三是default.ttf,也就是字庫文件,由于ONS-Android默認(rèn)情況下不能使用Android字庫,所以此文件必須存在,并且正常可讀(必須能夠被SDL識(shí)別),否則游戲會(huì)強(qiáng)制退出(沒錯(cuò),如果字庫不存在或者讀取異常,ONS直接就崩了~連錯(cuò)誤都不報(bào)~)。有了上述三種文件,ONS才能在 Android中正常運(yùn)行。


最后,雖然AVG游戲通常需要較大的音頻與圖像文件支持,Android版ONS默認(rèn)要求將游戲資源文件保存于SD卡中。但經(jīng)實(shí)測(cè)發(fā)現(xiàn),如果將gCurrentDirectoryPath設(shè)定為其它可讀寫目錄,只要上述三文件正常無誤,ONS-Android一樣能正常運(yùn)行(比如APK的Cache文件夾)。所以,如果我們想對(duì)游戲資源作一些手腳(在內(nèi)存而非SD卡中進(jìn)行游戲什么的),完全可以根據(jù)此特性入手。


ONS-Android的運(yùn)行效果:

真機(jī)運(yùn)行效果:

談?wù)凙VG游戲的Android移植(NScripter與吉里吉里)

模擬器運(yùn)行效果:

(雖然ONS-Android默認(rèn)使用GLES,可惜Android模擬器默認(rèn)只支持PixelFlinger,因此建議真機(jī)測(cè)試,否則速度相當(dāng)悲劇)

談?wù)凙VG游戲的Android移植(NScripter與吉里吉里)

關(guān)于Krkr2(吉里吉里2)的Android版移植


談完了ONS的移植,下面再來談?wù)凨rkr2這個(gè)著名的AVG引擎(其實(shí),主要是做galgame~)的Android移植問題。

那么,開章明義,大家請(qǐng)首先注意好這一句話:

在Android中“直接運(yùn)行”Krkr2游戲是不可能的


雖然僅就Windows系統(tǒng)而言,Krkr2游戲量遠(yuǎn)遠(yuǎn)超過NS游戲在這一領(lǐng)域的數(shù)量。并且Krkr2系統(tǒng)無論在操作方式、畫面效果、腳本功能都較古老的 NS系統(tǒng)更為先進(jìn)。然而,以下三點(diǎn)因素卻決定了在Android系統(tǒng)中,向ONS那樣直接運(yùn)行Krkr2游戲資源將非常難以實(shí)現(xiàn)(其實(shí)任何系統(tǒng)都一樣)。

一、首先,ONS源碼不算SDL支持庫,其大小僅有1MB左右,可謂短小精悍。而Krkr2呢? 僅core包下核心源碼就有將近10MB,代碼量比ONS多了將近10倍(還不算plugins包下的一些必要插件),僅此一項(xiàng)就讓移植Krkr2比移植 ONS所面對(duì)的工作量大了許多(代碼越多,出Bug的機(jī)會(huì)也就越高)。

二、其次,ONS直接使用SDL框架開發(fā),令它先天具備相當(dāng)強(qiáng)大的跨平臺(tái)特性(前文已述,SDL純C打造,正宗的“一次編寫,隨處編譯,隨處運(yùn)行”)。反觀吉里吉里,W.Dee獨(dú)立開發(fā)的 Krkr2核心顯然沒能達(dá)到SDL的高度,他在開發(fā)之初甚至就沒考慮過跨平臺(tái)的問題,因此要將它跨平臺(tái)移植時(shí)所面臨的問題也就可想而知。

比如Krkr2默認(rèn)使用DirectX而非OpenGL,又不像SDL那樣為每個(gè)平臺(tái)都制作了必要的自適配圖形接口,導(dǎo)致它的渲染功能被綁死在 Windows平臺(tái)上,如果要移植只能重寫渲染部分不算;最要命的是,它還大量使用win32 API,先天與Windows系統(tǒng)難以分離,否則很多效果都要從頭摸索如何實(shí)現(xiàn);并且,Krkr2還非常隨性的提供第三方接口,毫無原則的允許大量第三方插件跑在Krkr2之上,直接導(dǎo)致很多游戲根本不是僅僅解決Krkr2運(yùn)行環(huán)境就能夠移植的。事實(shí)上,如果想讓Krkr2正常運(yùn)行在非Windows平臺(tái),沒有相當(dāng)大規(guī)模的代碼重構(gòu)(注意,是重構(gòu),而不是簡(jiǎn)簡(jiǎn)單單的修改),根本不可能實(shí)現(xiàn)(總不能在Android上跑個(gè)Windows模擬器吧|||)。事實(shí)上,Krkr作者為解決跨平臺(tái)問題,自2005年起已著手制作Krkr3,至今依舊努力中……


三、最后,Krkr2基本結(jié)構(gòu)是由一套C++核心(含基于DirectX的圖像渲染部分及tjs腳本解釋器與kag腳本解釋器以及其它功能的復(fù)合),一套tjs 腳本庫(依賴C++編譯出的解釋器運(yùn)行,Krkr2特有的腳本語言,語法類Java),以及一套構(gòu)建于tjs腳本及C++代碼之上的kag腳本庫(與 NScripter類似的命令行腳本,通過TJS腳本解釋器與KAG解釋器混合執(zhí)行)這三大部分組成。


簡(jiǎn)單點(diǎn)說,Krkr2在核心程序上運(yùn)行著兩個(gè)有嵌套關(guān)系,但關(guān)系又不那么緊密的解釋器,以一種不完全的,近似于模擬器上跑模擬器的形式存在著。雖然這種方式在 Windows環(huán)境中運(yùn)行AVG游戲,甚至更復(fù)雜一點(diǎn)的游戲(比如RPG)都不會(huì)存在太大問題(現(xiàn)代CPU的速度優(yōu)勢(shì))。然而,一旦遷移到手機(jī)或智能機(jī)環(huán)境中,這種方式所帶來的后患將相當(dāng)嚴(yán)重,龐大的資源損耗,將直接影響程序的運(yùn)行效果(沒見過模擬器跑模擬器多恐怖的朋友,可在Windows系統(tǒng)下運(yùn)行 android 3.0模擬器體驗(yàn)類似的“速度感”PS:題外話,Android模擬器截至到3.0為止,在PC機(jī)上的運(yùn)行速度一直逆增長(zhǎng),版本越高速度越慢,用 android1.5反而會(huì)比3.0快很多)。

綜上所述,大家應(yīng)該可以發(fā)現(xiàn),如果想完整移植Krkr2游戲的運(yùn)行環(huán)境到Android系統(tǒng)當(dāng)中,將會(huì)是一件多么費(fèi)力,而且很可能未必討好的事情,就算有高人能完整的重構(gòu)整個(gè)Krkr2項(xiàng)目到Android系統(tǒng),最終也未必會(huì)在Android系統(tǒng)(或其它什么智能機(jī)平臺(tái))跑出“人類能夠接受”的游戲速度來。

更簡(jiǎn)單的講,完整移植Krkr2的難度相當(dāng)之大,沒能力者肯定做不到跨平臺(tái)完整移植Krkr2。而某些有能力者呢?大約也沒人會(huì)窮數(shù)月乃至數(shù)載之功,一絲不茍得做完Krkr2的完美移植,卻平白開源出來給不相識(shí)的人免費(fèi)使用(特別是原作者都沒做到跨平臺(tái)的時(shí)候……)。

所以,想和ONS一樣近乎不改變?nèi)魏斡螒蛸Y源,直接在Android上運(yùn)行現(xiàn)有NS游戲的美夢(mèng)——是絕對(duì)不可能實(shí)現(xiàn)的。

在Android中實(shí)現(xiàn)Krkr2游戲移植是可行的


事實(shí)上,如果大家曾注意Android Market的AVG游戲動(dòng)向,就會(huì)發(fā)現(xiàn)除了ONS的移植作品之外,還會(huì)有一些其它形式的AVG移植作品存在。但是,如果我們解壓其APK,卻很難發(fā)現(xiàn)諸如nscript.dat、arc.nsa這樣明顯的,和原版游戲同樣的資源包存在。

那么,他們是怎么做到的呢?很簡(jiǎn)單,他們所采用的手段是真正意義上的游戲移植,而非ONS那樣近似于游戲模擬器的重構(gòu)了整個(gè)NS運(yùn)行環(huán)境。

以Krkr2游戲移植為例,目前Android市場(chǎng)上可見的吉里吉里移植作品,大多僅僅模擬出了最容易實(shí)現(xiàn)的KAG3腳本部分,而無視TJS2腳本的存在,至于相應(yīng)功能,則使用LUA腳本替代或者直接Java編碼補(bǔ)全。

這樣做雖然遠(yuǎn)沒ONS移植省力,但在Krkr2運(yùn)行環(huán)境幾乎不可能在智能機(jī)完整再現(xiàn)的如今,也總比自己強(qiáng)行重構(gòu)Krkr2,再來用它運(yùn)行游戲要高效得多了。

——至少目前已知的,所有Krkr2游戲的Android移植項(xiàng)目,都是這樣開發(fā)出來的。

而下文介紹的KAS項(xiàng)目,就是一個(gè)非常典型的Krkr2-Android版移植實(shí)現(xiàn)。

項(xiàng)目地址: http://studiomikan.net

源碼下載: http://studiomikan.net/kas/

KAS參考Krkr2腳本實(shí)現(xiàn),可以部分支持KAG3腳本(標(biāo)準(zhǔn)KAG腳本命令大約有150個(gè)左右,截止到6月23日的KAS中實(shí)現(xiàn)了不足1/3,而且完全不支持TJS腳本),腳本命名方式同樣是.ks為后綴。

PS:突然發(fā)現(xiàn)一篇博文不可能寫全,所以緊急收筆,有時(shí)間小弟將單獨(dú)介紹KAS。下面是小弟貼出的一個(gè)KAS中TagHandlers類(翻譯后的),其中包含了KAS目前所支持的全部標(biāo)準(zhǔn)KAG指令,另外下文有部分翻譯后的KAS項(xiàng)目工程下載地址。

*****************



*****************

此外,KAS默認(rèn)的屏幕大小為800x450。

作者給出的效果圖:

談?wù)凙VG游戲的Android移植(NScripter與吉里吉里)

模擬器效果:
(KAS采用Canvas渲染,在模擬器與不支持硬件加速的手機(jī)中速度會(huì)比ONS更快,缺點(diǎn)是Canvas在圖像縮放時(shí)畫質(zhì)損失較大)
談?wù)凙VG游戲的Android移植(NScripter與吉里吉里)

談?wù)凙VG游戲的Android移植(NScripter與吉里吉里)

改變KAS的Util類中布爾值debug可以設(shè)定是否開啟調(diào)試模式(原版默認(rèn)為false,小弟修正包中默認(rèn)true)

對(duì)了,在iPhone下有同類項(xiàng)目Artemis Engine,兩者功能上基本一致(都是僅支持最基本的KAG腳本,與標(biāo)準(zhǔn)Krkr2最典型的差異是不能識(shí)別TJS文件以及不支持@iscript標(biāo)記,也就是都沒有提供支持TJS腳本解釋器),有興趣的朋友可以看看。

如果原版ONS或KAS運(yùn)行時(shí)出現(xiàn)問題的話(比如無法直接顯示游戲畫面),也可下載小弟提供的修正版本(加入NS資源打包工具,給ONS加上了編譯好的so 文件,修正成可讀取assets文件夾下游戲資源(注意讀取assets目錄下壓縮文件的大小限制)。給KAS加入部分中文注釋,修正了原版的 Canvas設(shè)定,真機(jī)上大約比原版快12FPS左右,在畫面縮放時(shí)稍微比原版清晰些)。


下載地址: http://download.csdn.net/source/3516651

談?wù)凙VG游戲的Android移植(NScripter與吉里吉里)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論