zip文件还包含编译的“MonkeyGame-debug”。可以在模拟器中运行的二进制文件。在“game.build”文件夹中有一个HTML5 build。在Chrome浏览器中运行MonkeyGame.html来测试游戏。 Introduction  有一些RAD跨平台游戏开发工具/引擎支持x86平台上的Android,如下所示:http://software.intel.com/en-us/blogs/2012/03/13/game- engines-forandroid 我们将使用Monkey game engine为基于Intel架构的设备构建一款新的基于ndandriod的游戏。它的优点是在ARM和x86架构上为Android预先编译了NativeGL共享库,否则我们将不得不使用NDK工具链来重新编译它们。您可以在附带源代码的“jni”文件夹中找到这些文件。Android packager在.apk中包含了x86和ARM共享库,在部署期间,根据目标设备是ARM还是x86安装必要的库。因此,生成的.apk是跨平台兼容的,不需要为这两种不同的体系结构进行本机重新编译。 背景 记忆游戏是一个变化的经典游戏,你揭开两张牌,以找到匹配的对。当所有配对都被揭开时,游戏结束。目标是用最少的步数暴露所有对。在游戏的这种变化中使用了一副部分的扑克牌。 游戏特点:24张卡用于增加难度。基于声音和粒子效果的动画卡 游戏状态classCollision类程序性字体代class 最适合的类使用硬编码的虚拟分辨率缩放比率和不同的实际设备方面决议——非常重要,因为Android设备碎片是一个主要issue 渐变classParticle引擎class  Highscore课程class 我选择这个游戏作为教学工具对于本文because 它包含所有必要的游戏元素和清楚地展示了游戏的实时特性循环和设计原则的使用。它是一款2D游戏,因为对于现代的基于触摸屏的移动设备来说,与2D精灵交互提供了一个更直观的界面。 技术信息 一些要求的快速原型,该引擎有: 快速调试-编译-运行周期可以在任何标准兼容的HTML5浏览器中执行。OnCreate()、OnUpdate()和OnRender()方法很好地定义了游戏循环。脚本语言是面向对象的。它具有用于精灵操作和游戏数据结构的基本语言构造。自动垃圾收集。 使用的代码 GameState变量循环状态机通过其各个阶段。它在start处被初始化到STATE_MENU。这个变量还控制代码的更新和呈现部分。 隐藏,复制Code

Method SetState (state:Int)
GameState = state
Select GameState
Case STATE_MENU
//The initial menu layer
Case STATE_PLAYING
//The game layer
Case STATE_PAUSED
//The game layer paused
Default
Print "ERROR: Unknown game state!"
End
End

让我们检查输入和更新游戏状态: 在OnUpdate()方法中,我们调用碰撞类的Card[i]. update()方法。取决于指针是否与卡精灵碰撞,它返回卡的可见或隐藏状态。如果单击了两张卡片,则增加try计数。 隐藏,复制Code

Case STATE_PLAYING
//check for two card clicks. show cards that were clicked by hiding corresponding cardback
For Local i : Int = 0 Until NUM_CARDS
Card[i].Update()
If Card[i].Pressed = True And Card[i].Visible = True And click < 2 Then
Card[i].Visible = False
savecard[click] = i
click = click + 1
If click = 2 Then
slowdown = Millisecs()
turns = turns + 1 //increment tries after two cards have been clicked
End If
PlaySound boom End If
Next

如果找到一对匹配的牌,我们将不覆盖这些牌,否则,如果这对牌不匹配,我们将使相应的牌背面可见并再次隐藏这些牌。1.5秒的延迟允许玩家看到两张牌有足够长的时间来发现它们不匹配。 隐藏,复制Code

If click = 2  Then
If coinplace[savecard[0]] = coinplace[savecard[1]] Then //a matching pair is found
click =0
Else
If Millisecs()-slowdown > slowlimit Then // wait before covering cards again
Card[savecard[0]].Visible = True
Card[savecard[1]].Visible = True
click =0 // reset to accept clicks on next two cards
Endif
Endif
End If Local drawncard:Bool = False
For Local i : Int = 0 Until NUM_CARDS
If Card[i].Visible = True Then
drawncard = True
End If
Next
If drawncard = False Then Restart() // If no cards are left to uncover End game

当因为碰撞类返回backcard可见状态为False而没有一张卡被backcard覆盖时,drawncard布尔值将状态更改为False,游戏结束。 抖一下这些卡片: 没有动画的游戏没有多少乐趣。我们来做花瓶吧。int变量n起了作用。n = -1*n在+1和-1之间切换。DrawImage()方法具有旋转和缩放参数。我们调整卡片精灵在+1度和-1度之间的旋转来创建振动卡片效果。 隐藏,收缩,复制Code

//refactored because the renderscreen method appeared to work in the pause state, and halts
// game update, except for cards vibrating Method RenderScreen() Cls // for a resolution of 800x600 render cards in 6 columns and 4 rows, starting at
// x offset 33 pixels and y offset 30 pixels
For Local i:Int = 0 Until NUM_CARDS
DrawImage coins[coinplace[i]], 33+((i Mod 6)*100), 30 +(Int(i/6)*140)
Next //as n toggle between +-1, the card sprites oscillate(animation) between +-1 degree
//if collision check returns visible attribute show cardback else hide it
For Local i : Int = 0 Until NUM_CARDS
If Card[i].Visible = True
n = -1*n
DrawImage (card, Card[i].PositionX, Card[i].PositionY, n*1.0, 1.0, 1.0)
Else
DrawImage (cardclick, Card[i].PositionX, Card[i].PositionY, 0, 1.0, 1.0)
End If
Next DrawImage (sidebar, 620, 0) DrawImage pointer.image, pointer.x, pointer.y font.Draw( turns, 710, 290, 3, 3, 0.5, 1.0 ) //render the procedural font for number of tries End

下载中的代码有大量注释,几乎不需要解释,但是类成员和方法在下面有详细说明。 MyGame类: 方法:实例化游戏对象-图像,声音,成员和变量。 OnUpdate()方法:轮询/中断检查鼠标/触摸屏/键盘输入,并相应地改变游戏状态和对象状态。 方法:根据游戏的菜单状态、游戏状态或暂停状态以及游戏对象的状态属性来渲染图形。 碰撞类:获取触摸/鼠标坐标d碰撞精灵,并为相应的精灵对象返回可见或隐藏的属性。 字体类:这是一种顺序生成字体只渐变类:吞世代雪碧对象,缓解他们或使用不同的equationsParticle类:产生粒子接触后,“删除”粒子生命expiresHighscore类:各种高分升序或降序orderTimer类:延迟和synchronization ,最适合的类:提供硬编码的“虚拟”分辨率,并缩放图形到不同的屏幕分辨率(纵横比),而不会导致沿着x,y屏幕空间坐标轴失真。 黑色边框将出现在if的左/右或顶部/底部 物理设备的纵横比与“虚拟”纵横比不同。屏幕方向改变。面临的问题 对于功率较小的移动设备,我尝试实现一个粒子引擎,因为集成的粒子类占用的资源有点多。编译器不喜欢我在游戏循环的特定点创建一个精灵对象列表!但我相信,只要有时间,一定会有解决办法的。最后实现了粒子类。粒子精灵是在OnCreate()方法中静态创建的。我们不是在粒子生命结束后销毁精灵对象,而是通过在数组中动态交换来“删除”它们。我也非常想念集成调试器的开发和测试 最初的开发/调试是在浏览器中完成的,以获得快速的周转时间。 在一台1024x600、7英寸的Android平板电脑上进行了可伸缩性和实际运行时性能测试。 最后的测试是在Android模拟器中的x86 AVD上进行的。 虽然HTML5编译很流畅,但在Android目标上测试时,在从碰撞类返回图形对象句柄时抛出了一个空对象异常,但实现了一个合适的解决方案。 游戏运行在x86 AVD的Android模拟器 感谢所有在Monkey coder论坛上的家伙,当问题出现时,他们总是随时准备帮助我们。 结束 源代码可供您使用,我希望您可以在x86 Android平台上自己的游戏中进一步使用它。如需澄清或解释,请提问。另外,如果你发现任何需要纠正的地方,请告诉我。您可以尝试通过改变参数和粒子引擎使用不同吐温类,看看他们工作只History  10/11/2012  1.1.0——添加highscores和计时器class8/11/20121.0.1 -添加渐变类开始按钮的前端现在看起来多达宽松政策到位——添加粒子引擎类——点击卡片生成particles5/11/2012  MemoryGame 1.0.0 , Do , -在线全球高分避免功能creep , 本文转载于:http://www.diyabc.com/frontweb/news30596.html

基于Intel x86 Android的RAD游戏开发的更多相关文章

  1. Android研究之游戏开发处理按键的响应

    1.onKeyDown 方法 onKeyDown 方法是KeyEvent.Callback 接口中的一个抽象方法,重写onKeyDown 方法能够监听到按键被按下的事件,我们先看看onKeyDown方 ...

  2. Android安卓手机游戏开发

    成都传智播客Java培训,免费学Android安卓手机游戏开发,安卓android开发课程包括Android安卓应用开发和Android安卓游戏开发两个方向,可是偏向游戏开发. 依据"199 ...

  3. Android——Cocosd2d-x手机游戏开发学习思路

    手机APP应用如雨后春笋般冒了出来,而在众多的APP应用中,游戏占据了半壁江山.它丰富着人们的业余生活,增进了人们之间的沟通交流.也有许多开发的朋友对游戏开发情有独钟,他们不止是享受着有很多的人们去下 ...

  4. Coco2d-x android win7 Python 游戏开发环境的搭建

    1:我用的电脑配置 win7 3 核 内存8G 桌面.一直想学习Coco2d 游戏开发,所以,一个星期后,需要找到,最终建立了一个良好的环境 2:我使用的版本号版本号,至于建筑android开发环境略 ...

  5. Android研究之游戏开发摄像头更新

     游戏中摄像头的原理介绍        在游戏开发中更新摄像头的位置能够决定屏幕显示的内容,尤其是RPG类游戏摄像头有着很关键的数据.我举一个样例 有时候我们在玩RPG游戏的时候进入一个新的场景 ...

  6. 一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_200 时光荏苒,过隙白驹,即将进入2022年,著名敏捷开发语言Python也放出了3.10最终版,本次我们来展示一下在不同的系统和 ...

  7. x86 Android游戏开发专题篇之使用google breakpad捕捉c++崩溃(以cocos2dx为例)

    近期一直都在x86设备上进行游戏开发.就c++层和Android java层倒没有什么要特别注意的(除了须要注意一下改动Application.mk指定平台外),在c++崩溃的时候,非常多时候看不到堆 ...

  8. Android游戏开发实践(1)之NDK与JNI开发01

    Android游戏开发实践(1)之NDK与JNI开发01 NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码&q ...

  9. Android游戏开发研究帧动画实现

     1.动画的原则框架        帧的动画帧的动画顾名思义,画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在同样区域高速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,事实上只 ...

随机推荐

  1. java基础(swing+jsp+mybatis配置)

    JAVA SE GUI编程(swing) # 组件 描述 1 JFrame 一个普通的窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器) 2 JDialog 对话框 常用的中间 ...

  2. 用Python写一个随机数字生成代码,5行代码超简单

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 第一步,安装 random 库 random库是使用随机数的Python标准库 ...

  3. Oracle12C创建scott账户

    Oracle12C创建scott账户 具体步骤: 打开SqlPlus 输入用户名和密码用户名:sys口令:sys as sysdba 创建c##scott用户CREATE USER c##scott ...

  4. Spring的循环依赖,学就完事了【附源码】

    目录 啥是循环依赖? Spring可以解决循环依赖的条件 Spring如何去解决循环依赖 SpringBean的创建流程 Spring维护的三级缓存 getSingleton getSingleton ...

  5. 提交并发量的方法:Java GC tuning :Garbage collector

    三色算法,高效率垃圾回收,jvm调优 Garbage collector:垃圾回收器 What garbage? 没有任何引用指向它的对象 JVM GC回收算法: 引用计数法(ReferenceCou ...

  6. STL(常用)

    STL 简单记录.讲解一些初级阶段常用的用法. STL是C++的一个标准模板库,其中包含了许多在计算机领域常用的基本数据结构以及基本算法.STL主要依赖于模板,使得STL具有广泛的通用性.这篇文章旨在 ...

  7. 云计算openstack共享组件——时间同步服务ntp(2)

    一.标准时间讲解 地球分为东西十二个区域,共计 24 个时区 格林威治作为全球标准时间即 (GMT 时间 ),东时区以格林威治时区进行加,而西时区则为减. 地球的轨道并非正圆,在加上自转速度逐年递减, ...

  8. yum管理——ningx部署私有repo源(4)

    一.前言: 为了加快安装效率,或者日后服务器处于内网环境,本次特写一片搭建的是一个属于个人私有repo源仓库,思路如下: 1.首先到mirrors.ustc.edu.cn下载用到的源的仓库 2.然后安 ...

  9. 栈帧的内部结构--局部变量表(Local Variables)

    每个栈帧中包含: 局部变量表(Local Variables) 操作数栈(Opreand Stack) 或表达式栈 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用) 动态返 ...

  10. 提交 linux kernel 补丁流程备忘录

    1. 订阅 linux 邮件列表 linux 邮件列表 Kernel Mailing Lists 是所有 linux kernel 开源贡献者协同工作的平台,可以通过向 VGER.KERNEL.ORG ...