2019独角兽企业重金招聘Python工程师标准>>>

摘要:

利用手机的重力感应机制和手机的屏幕绘画功能,实现一款躲避休闲游戏。

实现平台,工具:

采用java ADT工具,java语言,ZTE中兴手机硬件测试。

UML设计:

核心代码:

1.从当前的activity跳转与下一个activity,主要的代码如下:

Intent intent = new Intent( mContext,SurfaceViewAcitvity.class );
startActivity( intent );

2.提取和保存自己定义的数据。这里用了SharedPreferences对象提取手机里的数据,而Editor对象则是向手机里写 数据。

Context ctx = SurfaceViewAcitvity.this;      SharedPreferences sp = ctx.getSharedPreferences("MYDATA", MODE_PRIVATE);//获取数据,如果SCROSE不存在,则返回值为-1int i = sp.getInt("SCROSE", -1);/**如果没有数据,则初始化数据**/if(i==-1){Editor editor = sp.edit();editor.putInt("SCROSE", 0);editor.commit();}

3.绘制屏幕,每秒钟程序都会自动绘制手机屏幕50次,每次重新绘制屏幕都会重新绘制游戏的背景,当前小球的位置和流动的小鱼的位置。核心代码如下:

private void Draw() {/**绘制游戏背景**/mCanvas.drawBitmap(mbitmapBg,0,0, mPaint);/**绘制小球**/mCanvas.drawBitmap(mbitmapBall, mPosX,mPosY, mPaint);/**绘制最高分和当前得分**/if(scrose>0)  myscrose = scrose;mCanvas.drawText("最高分 :" + maxscrose+"分", 10, 30, mPaint);mCanvas.drawText("得    分 :" + myscrose+"分", 10, 60, mPaint);/**绘制游动的小鱼**/mCanvas.drawBitmap(fish1, fish_1_X,fish_1_Y, mPaint);mCanvas.drawBitmap(fish2, fish_2_X,fish_2_Y, mPaint);mCanvas.drawBitmap(fish3, fish_3_X,fish_3_Y, mPaint);mCanvas.drawBitmap(fish4, fish_4_X,fish_4_Y, mPaint);mCanvas.drawBitmap(fish5, fish_5_X,fish_5_Y, mPaint);
}

4.重绘屏幕,这里用了线程安全锁,在异步操作中保证了同一时间只对屏重绘一次。通过获取系统的前后时间,确保每秒钟更新屏幕50帧。

public void run() {while (mIsRunning) {/** 取得更新游戏之前的时间 **/long startTime = System.currentTimeMillis();/** 在这里加上线程安全锁 **/synchronized (mSurfaceHolder) {/** 拿到当前画布 然后锁定 **/mCanvas = mSurfaceHolder.lockCanvas();Draw();/** 绘制结束后解锁显示在屏幕上 **/mSurfaceHolder.unlockCanvasAndPost(mCanvas);}/** 取得更新游戏结束的时间 **/long endTime = System.currentTimeMillis();/** 计算出游戏一次更新的毫秒数 **/int diffTime = (int) (endTime - startTime);/** 确保每次更新时间为50帧 **/while (diffTime <= TIME_IN_FRAME) {diffTime = (int) (System.currentTimeMillis() - startTime);/** 线程等待 **/Thread.yield();}

5.获取手机重力机制下重心的偏移量,用于确定小球的坐标位置,同时当小球的坐标超出手机的边界时,使它不离开手机边界。

public void onSensorChanged(SensorEvent event) {mGX = event.values[SensorManager.DATA_X];mGY= event.values[SensorManager.DATA_Y];mGZ = event.values[SensorManager.DATA_Z];//这里乘以6是为了让小球移动的更快mPosX += mGY * 6;mPosY += mGX * 6;//检测小球是否超出边界if (mPosX < 0) {mPosX = 0;}else if (mPosX > mScreenBallWidth) {mPosX = mScreenBallWidth;}if (mPosY < 0) {mPosY = 0;} else if (mPosY > mScreenBallHeight) {mPosY = mScreenBallHeight;}

效果展示:

1.游戏的开始界面:

所有的背景和图标都是自己上网查找后并用PS处理过的,力求符合游戏的主题。其中“开始”按钮和“退出”按钮被我换成了小鱼的图标。

2.进入游戏界面:

当游戏即将开始里,会有提示出现,符合人性化设计。

3.游戏中的界面:

游戏者通过控制小球躲避不停游过的小鱼来获得得分,坚持的时间越久,得分越高,为了激发游戏者的斗志,界面上还保存了游戏的至今的最高得分。

4.游戏结束界面:

游戏自动暂停,并提示游戏结束,同时也显示了游戏者的最终得分,如果该得分高于历史最高得分,将会代替历史最高得分保存进手机。

转载于:https://my.oschina.net/u/1540055/blog/280523

重力感应机制和手机的屏幕绘画相关推荐

  1. android重力传感器横竖反,Android重力感应实现方式

    在Android应用程序的开发中,占据主要地位的当属游戏的开发.我们在这篇文章中将会针对在游戏中需要用到的重力感应功能,来为大家详细分析Android重力感应的实现方法,以帮助大家解决相关问题. An ...

  2. 我的雷电游戏(重力感应控制)

    算是第一个写的比较满意的游戏吧,肯定还有很多很多不足,希望高手能指点下,呵.现在在看图灵出版的一本android游戏的书籍,有点难,涉及底层有点多,都是JNI.NDK.linux shell脚本等,主 ...

  3. Android重力感应开发

    一.手机中常用的传感器 在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用,具体如下:(Sensor类) #define SENSOR_TYPE_ACCE ...

  4. Android重力感应基础

    android中的很多游戏的游戏都使用了重力感应的技术,但其api demo却并没有重力感应的实例(不知道是不是我没找到,找到的朋友麻烦告诉我一下,谢谢),因为开发的需要,就研究了一下重力感应这方面, ...

  5. Android 根据sensor重力感应 app横竖屏旋转

    在app开发中,当系统禁止自动旋转以后,app需要横竖屏旋转该怎么做呢,那就只能根据sensor 重力感应的值来实现屏幕旋转了 1.获取sensor重力感应的值 import android.hard ...

  6. android 重力感应 横竖屏切换,重力感应 横竖屏切换

    1,去掉StatusBar 在info.plist添加UIStatusBarHidden设置Boolean,设置为YES. 2,横屏 继续在info.list中添加UIInterfaceOrienta ...

  7. linux屏幕旋转后触控不准,手机重力感应失效解决方法 不能自动旋转屏幕怎么设置...

    如今手机已经成为人们生活中必不可少的一个工具了,在使用过程也常常会遇到各种各样的问题,比如当手机重力感应失效的时候应该怎么解决呢,手机不能自动旋转屏幕要怎么设置,针对这个问题下面就为大家带来最新解决方 ...

  8. H5监听摇一摇和手机倾斜事件(重力感应)

    摇一摇功能(DeviceMotion) 摇一摇功能是很多原生APP都可以实现的功能,如微信中的摇一摇找好友,QQ音乐中的摇一摇换歌等.它们都是利用了手机加速传感器提供的API,当监听到手机加速变化的事 ...

  9. android手机重力感应例子

    手机重力感应实现简单介绍 现在有很多游戏是通过摇晃手机实现的,比如赛车游戏 摇骰子游戏 迷宫游戏 等等 . 今天我用简单的代码为大家介绍一下android 下重力感应的实现方式 下面是一个模拟器的屏幕 ...

最新文章

  1. 微信支付技术解决方案
  2. python网课什么平台好-python网课什么平台好
  3. MySQL模糊查询—is null关键字
  4. 111 《深入理解Java虚拟机》读书笔记
  5. JAVA基础--toString, equals方法
  6. Rob Papen Quad for Mac - 合成器插件
  7. DevExpress v18.1新版亮点——WPF篇(一)
  8. 分水岭算法 matlab实现
  9. c4d细分曲面的使用和导出的一些快捷键笔记
  10. SU插件情报局 | SUBD(细分曲面)详细中文介绍
  11. python的模块和包
  12. Oracle隐含参数查看
  13. 金仓数据库KingbaseES实现主键自增的方式
  14. 透过现象看本质,如何针对用户做好需求分析
  15. 为什么美国大城市里不修二环三环四环五环?
  16. linux设备驱动读书笔记
  17. 【Vue知识点- No4.】vue组件、组件通信、Todo案例
  18. 小米手机关闭广告的方法,三步让你的小米手机跟广告说再见
  19. 前端表单七牛云php,记录一下前端分片上传七牛云踩过的坑
  20. 最好听的钢琴曲排行榜 世界上最好听的钢琴曲

热门文章

  1. clousx6机器人怎么导入词库_全国二等奖,临安学子登上机器人大赛国家级舞台...
  2. 数据挖掘十大算法之—C4.5
  3. shell脚本执行返回的状态码
  4. 简单选择排序--转载
  5. redis-cluster集群搭建
  6. Python自动化之django的ORM
  7. 在Xcode8中 如何添加.pch文件
  8. Linux ARP代理 与 NAT
  9. vs2008.net 单元测试NUnit
  10. ubuntu网络配置