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. Easy Game(记忆化搜索)

    You are playing a two player game. Initially there are n integer numbers in an array and player A an ...

  2. oracle 11G R2卸载说明

    oracle 11G R2数据库卸载

  3. 网络协议HTTP、TCP/IP、Socket

    网络协议HTTP.TCP/IP.Socket 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.  其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的 ...

  4. SpringBoot整合Quartz及log4j实例

    SpringBoot整合Quartz及log4j实例 因为之前项目中经常会做一些定时Job的东西,所以在此记录一下,目前项目中已经使用elastic-job,这个能相对比Quartz更加简单方便一些, ...

  5. 520是秀恩爱吃狗粮,521才是真正的告白日,- Python告白神器用起来 !

    网络情人节是信息时代的爱情节日,定于每年的5月20日和5月21日,该节日源于歌手范晓萱的<数字恋爱>中“520”被喻成“我爱你” ,以及音乐人吴玉龙的网络歌曲中“我爱你”与“网络情人”的紧 ...

  6. ubuntu安装docker-ce 、docker-ce-cli、containerd.io

    问题 ubuntu安装docker的时候特别慢,百度搜了一大堆都没讲到点子上,最后请教了大佬才知道是源的问题 安装 修改源 sudo gedit /etc/apt/sources.list 添加源 阿 ...

  7. 10.QT-QAudioOutput类使用

    本章需要用到的类如下: QAudioDeviceInfo类提供音频输出设备 QAudioFormat类提供音频参数设置 QAudioOutput类提供了用于将PCM原始音频数据发送到音频输出设备的接口 ...

  8. windows上部署rabbitmq遇到的一些问题及解决方法

    在目前这家公司,刚进公司的时候接手了一个服务,算是个比较完备的服务,其中几台电脑之间通信用到了rabbitmq,一开始没出什么问题,然后后来勒索病毒wanner cry来的时候,系服把所有服务器装了一 ...

  9. [Java并发编程之美]第1章 线程基础

    第1章 线程 1.1 线程与进程 进程是操作系统资源分配和调度的基本单位,但cpu资源是分配到线程的,也就是线程是CPU分配的基本单位. 线程自己的栈资源中,存放的局部变量是线程私有的,其他线程无法访 ...

  10. Kafka实战宝典:Kafka的控制器controller详解

    一.控制器简介 控制器组件(Controller),是 Apache Kafka 的核心组件.它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群.集群中任意一 ...