`
ctfzh
  • 浏览: 32672 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

半个小时移植Flash游戏到Android平台

阅读更多

网上有很多现成的Flash游戏,一直想在手机上玩,虽说Android2.2支持Flash,但是大多数游戏需要键盘控制,最多的就是方向键,而手机大多数没有键盘(有键盘的好像也不行),所以实际上就没办法玩了。


现在Rexsee提供了一个很简单的解决方案,可以迅速将Flash游戏移植到Android手机上(2.2以上)。(目前Rexsee已经开源,在社区可以查看全部的开发手册、API说明与源码, www.rexsee.com

下面是一个例子,把经典的美羊羊卡丁车移植到了手机上,而且有两个版本,一个用虚拟键盘,一个用方向传感器。

所有代码是用HTML和JS写的,包括全部HTML,总共只有100多行。步骤如下:

  1. 准备键盘图片,这里用到了6个键,左、右、空格(跳跃)、退出、消息和Rexsee市场键,Rexsee提供了几套现成的键可以下载。将键的图片放到asset/keyboard/default/文件夹中,这样用"keyboard/default"来指定theme参数即可,否则要用放图片的文件夹的完整路径(本地SD卡或网络地址均可)来制定theme参数。文件名就是键值,后缀名是.png
  2. 将美羊羊卡丁车的swf文件放在asset/文件夹中
  3. 将横幅图片(这里是banner.png)和启动按钮图片(这里是startNow.png)放在asset/文件夹中
  4. 当然还有图标要放在res中,还要将string.xml中的首页地址设为file:///android_asset/index.html。这是唯一的一个程序文件,100多行。
  5. 这是离线版的,所以要下载Rexsee的JAR包,自己用Eclipse编译,如果嫌麻烦,可以在线编译一个首页地址指向服务器某个网页地址,然后将下面的index.html的代码放在这个文件中(有些路径要改,比如图片什么的),如果也想离线玩,可以在首次载入后将swf文件和图片自己或者用rexseeClient下载到本地。当然也可以不下载,就在线玩。

 

先看一下res/values/string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">美羊羊卡丁车</string>
<string name="app_home">file:///android_asset/index.html</string>
<string name="rexsee_home">http://www.rexsee.com/flash/index.php</string>
</resources>
 
再看一下AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="MeiYangYangKaDingChe.rexsee" android:versionCode="1" android:versionName="1.0">
<supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:anyDensity="true" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">
<activity android:name="rexsee.activity.RexseeActivity" android:configChanges="orientation|keyboardHidden" android:launchMode="singleTop">
<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>

</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
 
最后是asset/index.html的源代码
1:	<HTML>
2:	<HEAD>
3:	    <TITLE>美羊羊卡丁车</TITLE>
4:	    <META http-equiv=Content-Type content=text/html charset=GB2312>  
5:	    <META http-equiv=Expires content=0>
6:	    <META http-equiv=Cache-Control content=no-cache>
7:	    <META http-equiv=Pragma content=no-cache>
8:	    <SCRIPT type=text/javascript>
9:	        
10:	        function startFlashGame(para){
11:	            //开始Flash游戏
12:	            rexseeScreen.setScreenOrientation(para.orientation);     //将屏幕方向设为水平
13:	            if ( para.sensor ) {
14:	                rexseeOrientation.setRate('fastest');                //将传感器敏感程度设为最高
15:	                rexseeOrientation.start();                            //启动传感器
16:	            } else {
17:	                rexseeOrientation.setRate('normal');                //将传感器敏感程度设为正常
18:	                rexseeOrientation.stop();                            //停止传感器
19:	            }
20:	            rexseeFlash.clearKeyboard();                            //清空键盘
21:	            if ( para.leftKeyboard ) rexseeFlash.setLeftKeyboard(para.leftKeys,para.leftKeyTheme,para.leftKeyboardStyle,para.leftKeyRowStyle,para.leftKeyStyle,para.leftKeyPressedStyle);            //设置左键盘
22:	            if ( para.rightKeyboard ) rexseeFlash.setRightKeyboard(para.rightKeys,para.rightKeyTheme,para.rightKeyboardStyle,para.rightKeyRowStyle,para.rightKeyStyle,para.rightKeyPressedStyle);    //设置右键盘
23:	            rexseeFlash.setSwfStyle(para.swfStyle);            //设置Flash游戏区域的样式
24:	            rexseeFlash.show(para.swf,para.dialogStyle);    //设置对话框样式并启动对话框
25:	        }
26:	        var paraKeyboardVersion = {
27:	                orientation:             "landscape",        //屏幕方向
28:	                sensor:                 false,                //是否启用方向传感器
29:	                //设置左边键盘
30:	                leftKeyboard:             false,                //是否启用左键盘
31:	                leftKeys:                 "",                    //左键盘的按键,数字序列,同一行按键使用逗号分隔,不同行使用分号分隔,Rexsee自定义按键包括-2,-3,-4,-5,其余按键请参考http://developer.android.com/reference/android/view/KeyEvent.html
32:	                leftKeyTheme:             "",                    //左键盘的样式,字符串,应在asset目录下创建以该字符串命名的文件夹,然后将按键图片(键值.png)放在该文件夹
33:	                leftKeyboardStyle:         "",                    //左键盘的样式
34:	                leftKeyRowStyle:         "",                    //左键盘中每一行的样式
35:	                leftKeyStyle:             "",                    //左键盘中每个按键的样式
36:	                leftKeyPressedStyle:         "",                //左键盘中每个按键被按下时的样式
37:	                //设置右边键盘,参看上面左键盘说明
38:	                rightKeyboard:             true,
39:	                rightKeys:                 "-1,-5;-2,62;21,22",
40:	                rightKeyTheme:             "keyboard/default",
41:	                rightKeyboardStyle:     "border-left-width:5px;border-left-color:#aaaaaa+#000000/2;background-color:#000000;",
42:	                rightKeyRowStyle:         "",
43:	                rightKeyStyle:             "",
44:	                rightKeyPressedStyle:    "",
45:	                //设置Flash区域的样式
46:	                swfStyle:                "",
47:	                //设置对话框的样式
48:	                dialogStyle:             "",
49:	                //设置Flash游戏的地址
50:	                swf:                     "game.swf"
51:	        };
52:	        var paraSensorVersion = {
53:	                orientation:             "landscape",
54:	                sensor:                 true,
55:	                leftKeyboard:             false,
56:	                leftKeys:                 "",
57:	                leftKeyTheme:             "",
58:	                leftKeyboardStyle:         "",
59:	                leftKeyRowStyle:         "",
60:	                leftKeyStyle:             "",
61:	                leftKeyPressedStyle:         "",
62:	                rightKeyboard:             true,
63:	                rightKeys:                 "-1;-5;-2;62",
64:	                rightKeyTheme:             "keyboard/default",
65:	                rightKeyboardStyle:     "border-left-width:5px;border-left-color:#aaaaaa+#000000/2;background-color:#000000;",
66:	                rightKeyRowStyle:         "",
67:	                rightKeyStyle:             "",
68:	                rightKeyPressedStyle:    "",
69:	                swfStyle:                "",
70:	                dialogStyle:             "",
71:	                swf:                     "game.swf"
72:	        };
73:	
74:	        window.onRexseeReady = function(){
75:	            //在页面装载完毕时运行
76:	            if ( rexseeBuild.getSdk()<8) {
77:	                alert("对不起,您的手机软件版本太低,不能运行该游戏,请使用Android2.2以上版本运行该游。");
78:	                rexseeApplication.quit();
79:	            }
80:	            if (!rexseeFlash.isReady()){
81:	                rexseeDialog.confirm("Adobe Flash Player", "Adobe Flash Player没有安装,无法运行该游戏。是否现在安装?","现在安装","退出程序","javascript:rexseeBrowser.open('http://www.rexsee.com/flash/flashplayer/download.php');rexseeApplication.exit();","javascript:rexseeApplication.exit();");
82:	            }
83:	            rexseeScreen.setScreenAlwaysOn(true);                  //总是点亮屏幕
84:	            rexseeScreen.setScreenOrientation('portrait');      //将将屏幕方向设为垂直
85:	            rexseeStatusBar.setStyle("visibility:hidden;");     //隐藏状态栏
86:	                    }
87:	        window.onAjaxReturned = function(ajaxUrl,response){
88:	            response = unescape(response);
89:	            if ( ajaxUrl == headerUrl) document.getElementById("header").innerHTML = response;
90:	            else if ( ajaxUrl == footerUrl) document.getElementById("footer").innerHTML = response;
91:	            else if ( ajaxUrl == jsUrl) eval(response);
92:	        }
93:	        window.onFlashDialogDismissed = function(){
94:	            //在退出Flash游戏返页面时运行
95:	            rexseeScreen.setScreenOrientation('portrait');        //将屏幕方向设为垂直
96:	        }
97:	        window.onbeforeunload = function(){
98:	            //在退出页面时运行
99:	            rexseeScreen.setScreenOrientation('auto');            //将屏幕方向设为自动
100:	            rexseeOrientation.stop();                            //停止方向传感器
101:	        }
102:	        
103:	        var version = "";
104:	        //Rexsee新增按键的回调函数
105:	        window.onKeyboardHelpPressed = function(){
106:	            //对应键值:-2
107:	            if ( version == "keyboard" ) alert("左右键向左或向右,空格键跳跃。");
108:	            else if ( version == "sensor" ) alert("左右倾斜手机向左或向右,虚拟键盘的空格键跳跃。");
109:	        }
110:	        window.onKeyboardQaPressed = function(){
111:	            //对应键值:-3
112:	            alert("QA pressed.");
113:	        }
114:	        window.onKeyboardHomePressed = function(){
115:	            //对应键值:-4
116:	            if ( window.confirm("要退出游戏吗?") ) {
117:	                rexseeFlash.hide();
118:	                rexseeApplication.quit();
119:	            }
120:	        }
121:	        window.onKeyboardCancelPressed = function(){
122:	            //对应键值:-5
123:	            if ( window.confirm("要退出游戏吗?") ) {
124:	                rexseeFlash.hide();
125:	            }
126:	        }
127:	        
128:	        window.onOrientationChanged = function(){
129:	            //如果启用方向传感器,在回调函数中向Flash游戏发送键值
130:	            var x = Math.round(rexseeOrientation.getLastKnownX());
131:	            var y = Math.round(rexseeOrientation.getLastKnownY());
132:	            var z = Math.round(rexseeOrientation.getLastKnownZ());
133:	            if ( y > 10 ) {
134:	                rexseeFlash.keyDown(21);
135:	            } else if ( y<-10){
136:	                rexseeFlash.keyDown(22);
137:	            } else {
138:	                rexseeFlash.keyUp(21);
139:	                rexseeFlash.keyUp(22);
140:	            }
141:	        }
142:	    </SCRIPT>
143:	    <STYLE>
144:	        body { margin:0px; background-color:#eeeeee;}
145:	        .imageButton { width:100px;height:100px; border:none; margin: 0 0 0 10; }
146:	        .section {border:1px solid;border-color:#f7f7f7 #7f9db5 #7f9db5 #f7f7f7;background-color:#ffffff;padding:15px;}
147:	        .gameTitle { font-size:24px;font-weight:bold; color:#F01D17;margin:15 0 15 0;}
148:	        .gameIntro {}
149:	        .gameVersion { font-size:20px;font-weight:bold; color:#F01D17;margin:10 0 15 0;}
150:	        .gameGuide { margin: 0 0 10 0; }
151:	        #copyright {background-color:#444444;padding:5px;color:white;font-size:10px;}
152:	    </STYLE>
153:	</HEAD>
154:	<BODY>
155:	<a href="http://www.rexsee.com/flash/index.php"><img src='banner.png' width=100% border=0></a>
156:	
157:	<div class=section>
158:	    <div class=gameTitle>美羊羊卡丁车</div>
159:	    <div class=gameIntro>
160:	        可爱的美羊羊是赛车高手哦,来体验下美羊羊马路杀手的感觉吧,美羊羊开车的速度可是会越来越快哦,小心呀!
161:	        <br><br>游戏目标:帮助美羊羊躲避路障,安全抵达终点。
162:	        <br>&nbsp;
163:	    </div>
164:	</div>
165:	<div class=section>
166:	    <table width=100%><tr>
167:	        <td valign=top>
168:	            <div class=gameVersion>虚拟键盘版</div>
169:	            <div class=gameGuide>左右键向左或向右,空格键跳跃。</div>
170:	        </td>
171:	        <td><img src="startNow.png" onclick="version='keyboard';startFlashGame(paraKeyboardVersion);" class=imageButton></td>
172:	    </tr></table>
173:	</div>
174:	<div class=section>
175:	    <table width=100%><tr>
176:	        <td valign=top>
177:	            <div class=gameVersion>重力感应版</div>
178:	            <div class=gameGuide>左右倾斜手机向左或向右,虚拟键盘的空格键跳跃。</div>
179:	        </td>
180:	        <td><img src="startNow.png" onclick="version='sensor';startFlashGame(paraSensorVersion);" class=imageButton></td>
181:	    </tr></table>
182:	</div>
183:	</BODY>
184:	</HTML>
 

转:http://www.oschina.net/code/snippet_194999_6812




分享到:
评论

相关推荐

    半个小时移植Flash游戏到Android平台技术文档.rar

    半个小时移植Flash游戏到Android平台技术文档.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    半个小时移植Flash游戏到Android平台【技术文档】

    本文档主要介绍如何将Flash游戏快速移植到Android平台上,利用Rexsee提供的工具和技术,大约半小时内即可完成。首先,由于大多数Android手机缺乏物理键盘,针对键盘操作的Flash游戏在手机上难以玩转,但Rexsee提供了...

    智能手机开启信息时代

    - **半个小时移植Flash游戏到Android平台**:介绍如何将Flash游戏快速移植到Android平台,对于游戏开发者而言极具参考价值。 - **AndroidGallery实现CoverFlow**:展示如何利用AndroidGallery组件实现类似苹果Cover...

    g-bios手册

    13. **Android支持**:对Google Android操作系统提供了完美支持,简化了Android系统移植流程。 14. **图形化配置工具**:使新手容易上手,移植和开发过程更简单直观。 #### 三、获取与开发 **获取源码**:通过...

    FLAC3D隧道台阶法施工模拟:命令操作与支护结构一体化构建

    内容概要:本文详细介绍了利用FLAC3D进行隧道台阶法施工模拟的方法和技术细节。首先解释了隧道台阶法施工的基本流程,重点在于开挖命令的应用,如'zone cmodel assign'和'zone remove'用于改变区域本构模型并执行开挖操作。接着阐述了支护结构的设置方法,包括超前加固体、初衬、二衬、锚杆和锁脚锚杆的具体配置方式。此外,还讲解了如何通过'mesh'命令直接在FLAC3D中生成符合实际工程需求的网格模型。最后展示了模拟后的围岩体位移云图和应力云图,验证了计算结果的有效性,强调了这些数据对优化施工方案的重要性。 适合人群:从事岩土工程、隧道工程及相关领域的工程师和技术人员。 使用场景及目标:适用于需要进行隧道施工模拟的专业人士,旨在提升他们对FLAC3D的理解和应用能力,确保隧道施工的安全性和高效性。 其他说明:文中提供的实例和命令操作均基于真实项目经验,有助于读者更好地理解和掌握FLAC3D的实际应用技巧。

    纤维骨料细观尺度混凝土模型:基于多有限元软件的网格划分与应用

    内容概要:本文介绍了纤维骨料细观尺度混凝土模型的设计与应用,重点在于如何通过控制骨料尺寸和体积率,在不同有限元软件(如Abaqus、Ansys、Ls-Dyna、Flac3d)中进行有效的四面体网格划分和六面体网格投影。文中提供了生成随机骨料位置和直径的Python代码片段,并详细解释了网格划分过程中需要注意的技术细节,如碰撞检测、网格转换公式以及材料属性设置。此外,还讨论了模型验证的方法及其在实际工程项目中的应用价值。 适合人群:从事土木工程、材料科学领域的研究人员和技术人员,尤其是那些需要利用有限元方法进行混凝土结构分析的专业人士。 使用场景及目标:①帮助工程师更好地理解和预测纤维混凝土的行为特性;②为实际工程项目提供理论支持和技术指导,从而优化纤维混凝土的应用;③提高仿真精度,减少实验成本和时间。 其他说明:文中提到的一些具体操作步骤和技术细节对于初学者来说可能具有一定挑战性,建议读者在实践中逐步掌握相关技能并积累经验。同时,正确设置物理量单位非常重要,错误的单位可能导致计算结果严重偏离预期。

    嵌入式八股文面试题库资料知识宝典-c++个人笔记总结.zip

    嵌入式八股文面试题库资料知识宝典-c++个人笔记总结.zip

    工业自动化领域西门子S7-1200 PLC模块、板卡及多协议通讯详解

    内容概要:本文详细介绍了西门子S7-1200 PLC在工业自动化领域的应用,重点讲解了其模块、板卡和通讯方式。首先概述了PLC模块和板卡作为基本单元的作用,接着深入探讨了支持的多种通讯协议,包括Modbus-RTU、S7通讯、Modbus-TCP和TCP/IP等。每种协议都配有具体的代码分析和调试方法。最后,介绍了博途V16编程软件的使用体验,强调了其对S7-1200 PLC编程的支持。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对西门子S7-1200 PLC有初步了解或希望深入了解的人群。 使用场景及目标:适用于需要掌握PLC模块化设计、不同通讯协议的应用场景,旨在帮助读者理解PLC的工作原理,提高编程和调试能力,从而更好地应用于实际项目中。 其他说明:文中提供的实例和代码分析有助于读者快速上手,同时推荐使用博途V16及以上版本的编程软件进行实践操作。

    Comsol仿真无模型等离子体空气反应框架:多气体反应及关键参数求解

    内容概要:本文介绍了Comsol仿真软件在等离子体空气反应领域的应用,重点探讨了其无模型反应框架的功能。该框架能模拟超过40种气体(如氧气、氮气、氦气)的详细反应过程,提供碰撞截面数据、迁移率扩散系数、速率系数和汤森系数的查询与求解功能,并通过bosig+模块实现自定义反应路径的选择。此外,文中强调了代码分析与实践应用的重要性,以及这些功能如何提升等离子体反应研究的效率和准确性。 适合人群:从事等离子体物理、化学反应动力学及相关领域研究的专业人士和技术人员。 使用场景及目标:适用于需要精确模拟复杂等离子体环境中气体反应的研究项目,旨在提高对等离子体反应机制的理解,优化实验设计,预测反应行为。 其他说明:Comsol仿真软件凭借其强大的计算能力,在等离子体研究中扮演着重要角色。随着技术的发展,该框架有望进一步推动相关领域的创新和发展。

    嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip

    嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip

    嵌入式八股文面试题库资料知识宝典-c,c++笔试.zip

    嵌入式八股文面试题库资料知识宝典-c,c++笔试.zip

    少儿编程scratch项目源代码文件案例素材-激光连接.zip

    少儿编程scratch项目源代码文件案例素材-激光连接.zip

    嵌入式八股文面试题库资料知识宝典-奔图电子-软件笔试试题v1.1(C,C++工程师).zip

    嵌入式八股文面试题库资料知识宝典-奔图电子-软件笔试试题v1.1(C,C++工程师).zip

    嵌入式八股文面试题库资料知识宝典-国科环宇有限公司.zip

    嵌入式八股文面试题库资料知识宝典-国科环宇有限公司.zip

    基于LDA主题模型对AIGC的影响力分析.pdf

    基于LDA主题模型对AIGC的影响力分析.pdf

    HG2543C1EPON天翼网关(4口单频)rootfsA

    可以自己添加应用和功能版,在/opt/upt/apps/下面添加ubin目录和ulib目录,把你想用的程序添加到ubin,支持模块添加到ulib中,就可以运行,具体刷机操作,请看《》

    遗传算法在冷链物流与多配送中心VRP车辆路径优化中的应用及改进

    内容概要:本文探讨了遗传算法在车辆路径优化问题(VRP)中的应用及其改进,特别是在冷链物流、软时间窗和多配送中心场景下的路径优化策略。文中介绍了遗传算法通过模拟自然界进化过程来寻找最优路径解决方案的能力,并详细讨论了其在冷链物流中的重要性,即确保产品运输过程中的温度稳定和时效性。此外,还提到了软时间窗概念的应用,以平衡客户满意度和运输成本。在多配送中心场景下,遗传算法能有效处理复杂路径规划问题,如外卖配送路径优化和充电桩电车车辆路径优化。除了遗传算法,蚁群算法、模拟退火算法和粒子群算法也在不同类型的路径优化问题上得到广泛应用,如旅行商问题(TSP)、容量约束的车辆路径规划(CVRP)和带距离、容量和时间窗约束的车辆路径规划(VRPTW)。最后,文章强调了遗传算法改进的研究方向,旨在提高运算速度和精度,从而提升物流效率和客户满意度。 适合人群:从事物流与运输领域的研究人员和技术人员,对车辆路径优化感兴趣的学者和从业者。 使用场景及目标:适用于冷链物流、外卖配送、充电桩电车等多种实际应用场景,旨在优化路径规划,降低运输成本,提高客户满意度。 其他说明:本文不仅介绍了现有算法的应用情况,还指出了未来可能的研究方向和发展趋势。

    物流车辆路径优化研究:基于MATLAB的VRP、VRPTW及冷链物流与充电桩优化算法

    内容概要:本文详细介绍了物流领域的车辆路径优化(VRP)及其扩展问题——带时间窗的车辆路径优化(VRPTW),并探讨了冷链物流车辆路径优化(考虑充电桩需求)。文中通过MATLAB实现了遗传算法解决这些问题的具体步骤,包括参数设置、种群初始化、适应度函数计算、遗传算法循环等。此外,还讨论了多配送中心场景下的路径优化挑战和其他优化算法(如蚁群算法、粒子群算法、节约算法和模拟退火算法)的应用。最后,针对冷链物流和电动汽车路径优化提出了具体的解决方案和技术细节。 适合人群:从事物流管理、运筹学、算法设计的研究人员和工程师,尤其是对MATLAB有一定基础的技术人员。 使用场景及目标:适用于需要优化物流配送路径的企业和个人,旨在提高配送效率、降低成本、提升服务质量。具体应用场景包括但不限于城市配送、冷链运输、电动车辆调度等。 其他说明:文中提供了完整的MATLAB代码示例,帮助读者更好地理解和实践各种优化算法。同时,强调了不同算法的特点和适用条件,便于读者根据实际情况选择最合适的算法。

    嵌入式八股文面试题库资料知识宝典-文思创新面试题2.zip

    嵌入式八股文面试题库资料知识宝典-文思创新面试题2.zip

    嵌入式八股文面试题库资料知识宝典-网络编程.zip

    嵌入式八股文面试题库资料知识宝典-网络编程.zip

Global site tag (gtag.js) - Google Analytics