网上有很多现成的Flash游戏,一直想在手机上玩,虽说Android2.2支持Flash,但是大多数游戏需要键盘控制,最多的就是方向键,而手机大多数没有键盘(有键盘的好像也不行),所以实际上就没办法玩了。
现在Rexsee提供了一个很简单的解决方案,可以迅速将Flash游戏移植到Android手机上(2.2以上)。(目前Rexsee已经开源,在社区可以查看全部的开发手册、API说明与源码,www.rexsee.com)
下面是一个例子,把经典的美羊羊卡丁车移植到了手机上,而且有两个版本,一个用虚拟键盘,一个用方向传感器。
所有代码是用HTML和JS写的,包括全部HTML,总共只有100多行。步骤如下:
- 准备键盘图片,这里用到了6个键,左、右、空格(跳跃)、退出、消息和Rexsee市场键,Rexsee提供了几套现成的键可以下载。将键的图片放到asset/keyboard/default/文件夹中,这样用"keyboard/default"来指定theme参数即可,否则要用放图片的文件夹的完整路径(本地SD卡或网络地址均可)来制定theme参数。文件名就是键值,后缀名是.png
- 将美羊羊卡丁车的swf文件放在asset/文件夹中
- 将横幅图片(这里是banner.png)和启动按钮图片(这里是startNow.png)放在asset/文件夹中
- 当然还有图标要放在res中,还要将string.xml中的首页地址设为file:///android_asset/index.html。这是唯一的一个程序文件,100多行。
- 这是离线版的,所以要下载Rexsee的JAR包,自己用Eclipse编译,如果嫌麻烦,可以在线编译一个首页地址指向服务器某个网页地址,然后将下面的index.html的代码放在这个文件中(有些路径要改,比如图片什么的),如果也想离线玩,可以在首次载入后将swf文件和图片自己或者用rexseeClient下载到本地。当然也可以不下载,就在线玩。
标签: Rexsee
Android SDK
1. [代码]先看一下res/values/string.xml
1 | <?xml version= "1.0" encoding= "utf-8" ?> |
3 | <string name= "app_name" >美羊羊卡丁车</string> |
4 | <string name= "app_home" >file: ///android_asset/index.html</string> |
5 | <string name= "rexsee_home" >http: //www.rexsee.com/flash/index.php</string> |
2. [代码]再看一下AndroidManifest.xml
01 | <?xml version= "1.0" encoding= "utf-8" ?> |
02 | <manifest xmlns:android= "http://schemas.android.com/apk/res/android" package= "MeiYangYangKaDingChe.rexsee" android:versionCode= "1" android:versionName= "1.0" > |
03 | <supports-screens android:largeScreens= "true" android:normalScreens= "true" android:smallScreens= "true" android:anyDensity= "true" /> |
04 | <application android:icon= "@drawable/icon" android:label= "@string/app_name" android:theme= "@android:style/Theme.NoTitleBar" > |
05 | <activity android:name= "rexsee.activity.RexseeActivity" android:configChanges= "orientation|keyboardHidden" android:launchMode= "singleTop" > |
06 | <intent-filter><action android:name= "android.intent.action.MAIN" /><category android:name= "android.intent.category.LAUNCHER" /></intent-filter> |
10 | <uses-permission android:name= "android.permission.INTERNET" /> |
11 | <uses-permission android:name= "android.permission.ACCESS_NETWORK_STATE" /> |
3. [代码]最后是asset/index.html的源代码
003 | 3: <TITLE>美羊羊卡丁车</TITLE> |
004 | 4: <META http-equiv=Content-Type content=text/html charset=GB2312> |
005 | 5: <META http-equiv=Expires content=0> |
006 | 6: <META http-equiv=Cache-Control content=no-cache> |
007 | 7: <META http-equiv=Pragma content=no-cache> |
008 | 8: <SCRIPT type=text/javascript> |
010 | 10: function startFlashGame(para){ |
012 | 12: rexseeScreen.setScreenOrientation(para.orientation); //将屏幕方向设为水平 |
013 | 13: if ( para.sensor ) { |
014 | 14: rexseeOrientation.setRate( 'fastest' ); //将传感器敏感程度设为最高 |
015 | 15: rexseeOrientation.start(); //启动传感器 |
017 | 17: rexseeOrientation.setRate( 'normal' ); //将传感器敏感程度设为正常 |
018 | 18: rexseeOrientation.stop(); //停止传感器 |
020 | 20: rexseeFlash.clearKeyboard(); //清空键盘 |
021 | 21: if ( para.leftKeyboard ) rexseeFlash.setLeftKeyboard(para.leftKeys,para.leftKeyTheme,para.leftKeyboardStyle,para.leftKeyRowStyle,para.leftKeyStyle,para.leftKeyPressedStyle); //设置左键盘 |
022 | 22: if ( para.rightKeyboard ) rexseeFlash.setRightKeyboard(para.rightKeys,para.rightKeyTheme,para.rightKeyboardStyle,para.rightKeyRowStyle,para.rightKeyStyle,para.rightKeyPressedStyle); //设置右键盘 |
023 | 23: rexseeFlash.setSwfStyle(para.swfStyle); //设置Flash游戏区域的样式 |
024 | 24: rexseeFlash.show(para.swf,para.dialogStyle); //设置对话框样式并启动对话框 |
026 | 26: var paraKeyboardVersion = { |
027 | 27: orientation: "landscape" , //屏幕方向 |
028 | 28: sensor: false , //是否启用方向传感器 |
030 | 30: leftKeyboard: false , //是否启用左键盘 |
031 | 31: leftKeys: "" , //左键盘的按键,数字序列,同一行按键使用逗号分隔,不同行使用分号分隔,Rexsee自定义按键包括-2,-3,-4,-5,其余按键请参考http://developer.android.com/reference/android/view/KeyEvent.html |
032 | 32: leftKeyTheme: "" , //左键盘的样式,字符串,应在asset目录下创建以该字符串命名的文件夹,然后将按键图片(键值.png)放在该文件夹 |
033 | 33: leftKeyboardStyle: "" , //左键盘的样式 |
034 | 34: leftKeyRowStyle: "" , //左键盘中每一行的样式 |
035 | 35: leftKeyStyle: "" , //左键盘中每个按键的样式 |
036 | 36: leftKeyPressedStyle: "" , //左键盘中每个按键被按下时的样式 |
037 | 37: //设置右边键盘,参看上面左键盘说明 |
038 | 38: rightKeyboard: true , |
039 | 39: rightKeys: "-1,-5;-2,62;21,22" , |
040 | 40: rightKeyTheme: "keyboard/default" , |
041 | 41: rightKeyboardStyle: "border-left-width:5px;border-left-color:#aaaaaa+#000000/2;background-color:#000000;" , |
042 | 42: rightKeyRowStyle: "" , |
043 | 43: rightKeyStyle: "" , |
044 | 44: rightKeyPressedStyle: "" , |
052 | 52: var paraSensorVersion = { |
053 | 53: orientation: "landscape" , |
055 | 55: leftKeyboard: false , |
058 | 58: leftKeyboardStyle: "" , |
059 | 59: leftKeyRowStyle: "" , |
061 | 61: leftKeyPressedStyle: "" , |
062 | 62: rightKeyboard: true , |
063 | 63: rightKeys: "-1;-5;-2;62" , |
064 | 64: rightKeyTheme: "keyboard/default" , |
065 | 65: rightKeyboardStyle: "border-left-width:5px;border-left-color:#aaaaaa+#000000/2;background-color:#000000;" , |
066 | 66: rightKeyRowStyle: "" , |
067 | 67: rightKeyStyle: "" , |
068 | 68: rightKeyPressedStyle: "" , |
074 | 74: window.onRexseeReady = function (){ |
076 | 76: if ( rexseeBuild.getSdk()<8) { |
077 | 77: alert( "对不起,您的手机软件版本太低,不能运行该游戏,请使用Android2.2以上版本运行该游。" ); |
078 | 78: rexseeApplication.quit(); |
080 | 80: if (!rexseeFlash.isReady()){ |
081 | 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();" ); |
083 | 83: rexseeScreen.setScreenAlwaysOn( true ); //总是点亮屏幕 |
084 | 84: rexseeScreen.setScreenOrientation( 'portrait' ); //将将屏幕方向设为垂直 |
085 | 85: rexseeStatusBar.setStyle( "visibility:hidden;" ); //隐藏状态栏 |
087 | 87: window.onAjaxReturned = function (ajaxUrl,response){ |
088 | 88: response = unescape(response); |
089 | 89: if ( ajaxUrl == headerUrl) document.getElementById( "header" ).innerHTML = response; |
090 | 90: else if ( ajaxUrl == footerUrl) document.getElementById( "footer" ).innerHTML = response; |
091 | 91: else if ( ajaxUrl == jsUrl) eval(response); |
093 | 93: window.onFlashDialogDismissed = function (){ |
094 | 94: //在退出Flash游戏返页面时运行 |
095 | 95: rexseeScreen.setScreenOrientation( 'portrait' ); //将屏幕方向设为垂直 |
097 | 97: window.onbeforeunload = function (){ |
099 | 99: rexseeScreen.setScreenOrientation( 'auto' ); //将屏幕方向设为自动 |
100 | 100: rexseeOrientation.stop(); //停止方向传感器 |
103 | 103: var version = "" ; |
104 | 104: //Rexsee新增按键的回调函数 |
105 | 105: window.onKeyboardHelpPressed = function (){ |
107 | 107: if ( version == "keyboard" ) alert( "左右键向左或向右,空格键跳跃。" ); |
108 | 108: else if ( version == "sensor" ) alert( "左右倾斜手机向左或向右,虚拟键盘的空格键跳跃。" ); |
110 | 110: window.onKeyboardQaPressed = function (){ |
112 | 112: alert( "QA pressed." ); |
114 | 114: window.onKeyboardHomePressed = function (){ |
116 | 116: if ( window.confirm( "要退出游戏吗?" ) ) { |
117 | 117: rexseeFlash.hide(); |
118 | 118: rexseeApplication.quit(); |
121 | 121: window.onKeyboardCancelPressed = function (){ |
123 | 123: if ( window.confirm( "要退出游戏吗?" ) ) { |
124 | 124: rexseeFlash.hide(); |
128 | 128: window.onOrientationChanged = function (){ |
129 | 129: //如果启用方向传感器,在回调函数中向Flash游戏发送键值 |
130 | 130: var x = Math.round(rexseeOrientation.getLastKnownX()); |
131 | 131: var y = Math.round(rexseeOrientation.getLastKnownY()); |
132 | 132: var z = Math.round(rexseeOrientation.getLastKnownZ()); |
134 | 134: rexseeFlash.keyDown(21); |
135 | 135: } else if ( y<-10){ |
136 | 136: rexseeFlash.keyDown(22); |
138 | 138: rexseeFlash.keyUp(21); |
139 | 139: rexseeFlash.keyUp(22); |
144 | 144: body { margin:0px; background-color: #eeeeee;} |
145 | 145: .imageButton { width:100px;height:100px; border:none; margin: 0 0 0 10; } |
146 | 146: .section {border:1px solid;border-color: #f7f7f7 #7f9db5 #7f9db5 #f7f7f7;background-color:#ffffff;padding:15px;} |
147 | 147: .gameTitle { font-size:24px;font-weight:bold; color: #F01D17;margin:15 0 15 0;} |
149 | 149: .gameVersion { font-size:20px;font-weight:bold; color: #F01D17;margin:10 0 15 0;} |
150 | 150: .gameGuide { margin: 0 0 10 0; } |
151 | 151: #copyright {background-color:#444444;padding:5px;color:white;font-size:10px;} |
155 | 155: <a href= "http://www.rexsee.com/flash/index.php" ><img src= 'banner.png' width=100% border=0></a> |
157 | 157: <div class=section> |
158 | 158: <div class=gameTitle>美羊羊卡丁车</div> |
159 | 159: <div class=gameIntro> |
160 | 160: 可爱的美羊羊是赛车高手哦,来体验下美羊羊马路杀手的感觉吧,美羊羊开车的速度可是会越来越快哦,小心呀! |
161 | 161: <br><br>游戏目标:帮助美羊羊躲避路障,安全抵达终点。 |
165 | 165: <div class=section> |
166 | 166: <table width=100%><tr> |
168 | 168: <div class=gameVersion>虚拟键盘版</div> |
169 | 169: <div class=gameGuide>左右键向左或向右,空格键跳跃。</div> |
171 | 171: <td><img src= "startNow.png" onclick= "version='keyboard';startFlashGame(paraKeyboardVersion);" class=imageButton></td> |
174 | 174: <div class=section> |
175 | 175: <table width=100%><tr> |
177 | 177: <div class=gameVersion>重力感应版</div> |
178 | 178: <div class=gameGuide>左右倾斜手机向左或向右,虚拟键盘的空格键跳跃。</div> |
180 | 180: <td><img src= "startNow.png" onclick= "version='sensor';startFlashGame(paraSensorVersion);" class=imageButton></td> |