这个游戏的逻辑主要在上升和下降以及触碰原理

图片:

4eb3cc2601e30b38736028f1ed4ba31.jpg

20190523_094047.gif

没有做开始游戏 暂停游戏 和结束游戏,但是主要逻辑全部都做出来了

思路,那个类创建的数据那个类管理

链式模拟Android 的Handler做出来的

d代码如下:

   //存入梯子数据public void saveInitData(LadderData ladderData) {if (mLadderData == null) {mLadderData = ladderData;//mLadderData.setIndex(mLadderData.getIndex() == 0 ? 0 : -1);} else {LadderData ladderData1 = new LadderData();ladderData1.setLadderX(ladderData.getLadderX());ladderData1.setLadderY(ladderData.getLadderY());ladderData1.setmLadderData(mLadderData);mLadderData = ladderData1;}initIndex();}

这块逻辑是类似于一个个引用在一块,Handler的代码逻辑:

  Message next() {// Return here if the message loop has already quit and been disposed.// This can happen if the application tries to restart a looper after quit// which is not supported.final long ptr = mPtr;if (ptr == 0) {return null;}int pendingIdleHandlerCount = -1; // -1 only during first iterationint nextPollTimeoutMillis = 0;for (;;) {if (nextPollTimeoutMillis != 0) {Binder.flushPendingCommands();}nativePollOnce(ptr, nextPollTimeoutMillis);synchronized (this) {// Try to retrieve the next message.  Return if found.final long now = SystemClock.uptimeMillis();Message prevMsg = null;Message msg = mMessages;if (msg != null && msg.target == null) {// Stalled by a barrier.  Find the next asynchronous message in the queue.do {//-------------------------------------------------------------------------------------------------------------------------prevMsg = msg;//这块↓↓msg = msg.next;} while (msg != null && !msg.isAsynchronous());}if (msg != null) {if (now < msg.when) {// Next message is not ready.  Set a timeout to wake up when it is ready.nextPollTimeoutMillis = (int) Math.min(msg.when - now, Integer.MAX_VALUE);} else {// Got a message.mBlocked = false;if (prevMsg != null) {prevMsg.next = msg.next;} else {mMessages = msg.next;}msg.next = null;if (DEBUG) Log.v(TAG, "Returning message: " + msg);msg.markInUse();return msg;}} else {// No more messages.nextPollTimeoutMillis = -1;}// Process the quit message now that all pending messages have been handled.if (mQuitting) {dispose();return null;}// If first time idle, then get the number of idlers to run.// Idle handles only run if the queue is empty or if the first message// in the queue (possibly a barrier) is due to be handled in the future.if (pendingIdleHandlerCount < 0&& (mMessages == null || now < mMessages.when)) {pendingIdleHandlerCount = mIdleHandlers.size();}if (pendingIdleHandlerCount <= 0) {// No idle handlers to run.  Loop and wait some more.mBlocked = true;continue;}if (mPendingIdleHandlers == null) {mPendingIdleHandlers = new IdleHandler[Math.max(pendingIdleHandlerCount, 4)];}mPendingIdleHandlers = mIdleHandlers.toArray(mPendingIdleHandlers);}// Run the idle handlers.// We only ever reach this code block during the first iteration.for (int i = 0; i < pendingIdleHandlerCount; i++) {final IdleHandler idler = mPendingIdleHandlers[i];mPendingIdleHandlers[i] = null; // release the reference to the handlerboolean keep = false;try {keep = idler.queueIdle();} catch (Throwable t) {Log.wtf(TAG, "IdleHandler threw exception", t);}if (!keep) {synchronized (this) {mIdleHandlers.remove(idler);}}}// Reset the idle handler count to 0 so we do not run them again.pendingIdleHandlerCount = 0;// While calling an idle handler, a new message could have been delivered// so go back and look again for a pending message without waiting.nextPollTimeoutMillis = 0;}}
a363f102f2e7efffde3f9ec003210bb.png

根据这个原理,它官方这个就是一个套一个

这个是重力加速度,复习了一下初中知识啊啊啊啊。。。。。。。

    /*** 返回抛物位置** @return*/private double getParabolic(long time) {return mV * (time * 0.001) - (0.5 * g * ((time * 0.001) * (time * 0.001)));}/*** 返回重力坐标** @param time* @return*/private double gravityM(long time) {return 0.5 * g * kg * ((time * 0.001) * (time * 0.001));}

主要控制阶梯往上移在这块:

 //开始弹跳private void startJumpUp() {final int[] x = {0};new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}x[0]++;if (arrayListladder != null && arrayListladder.size() > 0) {for (int i = 0; i < arrayListladder.size(); i++) {arrayListladder.get(i).setLadderY(arrayListladder.get(i).getLadderY() + x[0]);}}if (x[0] > 40) {break;}}}}).start();}

这块是链式最RAO的一段,可能网络上的大神一下就看明白了,哈哈哈

 //删除最后一个private void deleteLast() {if (mLadderData == null) {return;} else {LadderData temp = mLadderData;LadderData temp2 = null;if (mLadderData.getmLadderData() == null) {mLadderData = null;}while (true) {if (temp == null) {if (temp2 != null) {temp2.setmLadderData(null);} else {mLadderData = null;}break;}if (temp != null && temp.getmLadderData() != null)temp2 = temp;temp = temp.getmLadderData();}// showData();initIndex();}}

碰撞的检测功能类

 public void collision(ArrayList<LadderTempData> arrayList, int mLocationY, int x, GravityThread gravityThread, Context mContext) {garr.clear();for (int i = 0; i < arrayList.size(); i++) {LadderTempData ladderTempData = arrayList.get(i);int ladderY = ladderTempData.getLadderY();if (ladderY > 0) {garr.add(ladderTempData);}if (arrayList.size() < 5) {Ladder.temp.addAll(arrayList);arrayList.clear();Ladder.getInstance().initData(mContext);return;}if (arrayList.get(i).getLadderY() > mContext.getResources().getDisplayMetrics().heightPixels) {LadderTempData remove = arrayList.remove(i);i--;}}for (int i = 0; i < garr.size(); i++) {LadderTempData ladderTempData = garr.get(i);int ladderY = ladderTempData.getLadderY();int ladderX = ladderTempData.getLadderX();Log.e("坐标 X", "x:" + x + " ladderX:" + ladderX + " stopladderX:" + (ladderX + 300));Log.e("坐标 Y", "t:" + (ladderY + 5) + " b:" + (ladderY - 5) + " mLocationY:" + mLocationY);if (mLocationY < (ladderY + 50) && mLocationY > (ladderY - 50) && x > (ladderX - 40) && x < (ladderX + 300)) {gravityThread.height = ladderY + 20;Log.e("坐标", "--------------------------");break;} else {gravityThread.initX();}//ladderY 底部坐标//ladderY -40 顶部坐标//ladderX 左部坐标// ladderX + 300右部坐标/* int t = ladderY - 50;int b = ladderY;int l = ladderX;int r = ladderX + 300;int pY = mLocationY;int pX = x;Log.e("坐标", "top: " + (ladderY - 50) + " b:" + b + " mLocationY:" + mLocationY);if (pY < b && pY > t && pX > l && pY < r) {gravityThread.height = ladderY + 20;break;} else {gravityThread.initX();}
*/}}

类的主要说明

类说明:
XHApplication : 主要的Context
Accelerometer: 方向重力控制类
ControlTheCollision : 碰撞控制类
Gravity:   重力控制类
GravityThread : 重力控制线程
Ladder:梯子数据制造者
GameMainView:绘画

Demo:https://github.com/hanxinhao000/jumpgame

Android 仿doodle jump小游戏相关推荐

  1. Android 实现扑克牌动画,Android扑克牌猜点小游戏源码

    Android扑克牌猜点小游戏源码分享. 该游戏是简单的猜点游戏, 1点为正确的点数 点重新开始后进行洗牌 每次牌的顺序不同 Java代码: package com.mrzhu.test0109_pr ...

  2. Web前端--HTML+CSS+JS实现仿切水果小游戏

    目录 代码目录: 主要代码实现: 源码获取 效果演示: 代码目录: 主要代码实现: CSS样式: * {margin: 0;padding: 0;list-style-type: none;touch ...

  3. android开发--推箱子小游戏(二)

    一.前言 迎来第二章的更新啦:使用ListView实现关卡的选择. 本章的内容有点小复杂,毕竟涉及使用了安卓开发中最难用也是最常用的控件之一:ListView 本章可以说是复杂但是单一吧.主要是想大家 ...

  4. android实现猜扑克牌小游戏(改进:每次只可以选择一张)

    android实现猜扑克牌小游戏 项目目录 实现效果 XML代码如下 <?xml version="1.0" encoding="utf-8"?> ...

  5. 帝国CMS仿核弹头H5小游戏模板/92Game仿游戏网整站源码

    正文: 完整标题: 帝国CMS仿核弹头H5小游戏模板/92game帝国CMS内核仿游戏网整站源码 帝国cms仿核弹头h5小游戏模板,92game帝国cms内核仿游戏网整站源码.比较适合小游戏发布.AP ...

  6. 帝国CMS仿核弹头H5小游戏模板/92game帝国CMS内核仿游戏网整站源码

    帝国CMS仿核弹头H5小游戏模板/92game帝国CMS内核仿游戏网整站源码 ☑️ 编号:ym498 ☑️ 品牌:帝国CMS ☑️ 语言:php ☑️ 大小:360MB ☑️ 类型:仿核弹头H5小游戏 ...

  7. android高仿微信小视频,Android仿微信录制小视频

    本文实例为大家分享了Android仿微信录制小视频的具体代码,供大家参考,具体内容如下 先上张图片看看效果 简单叙述下 首先通过Camera类调用系统相机 通过surfaceview绘制出来 通过Me ...

  8. cocos2d 高仿doodle jump 无源代码

    1. 游戏视频 主角眼熟吗?没错,上次跑酷游戏中的"30"来Jump了,有三种道具.主角光环,竹蜻蜓.翅膀: 有两种怪物,螃蟹和鸟: 有5种板子.点击屏幕,30会把它的嘴巴3给发射 ...

  9. cocos2d 高仿doodle jump 无源码

    1. 游戏视频 主角眼熟吗?没错,上次跑酷游戏中的"30"来Jump了,有三种道具,主角光环,竹蜻蜓,翅膀: 有两种怪物,螃蟹和鸟: 有5种板子.点击屏幕,30会把它的嘴巴3给发射 ...

最新文章

  1. python re match groups_python re.match与re.search的区别
  2. Mac下安装PIL库
  3. ​ArduinoYun教程之ArduinoYun硬件介绍
  4. 工作55:对v-model的理解
  5. MySQL IFNULL函数
  6. 对列 、生产者与消费者
  7. 邮件服务器运维,什么是邮件服务器,邮件服务器详解
  8. linux ntfs 转换 无损,无损数据下NTFS转换FAT32分区
  9. Java解压Zip 压缩包
  10. 手机浏览网页或打开app时莫名弹出支付宝领红包界面的原因及预防措施
  11. 软件设计师2018上半年+历年资料
  12. ogv格式怎么转换为MP4格式
  13. 微信小程序开发手册 - 02JSON 配置
  14. python中else是指什么意思_python中elif什么意思?
  15. C# Code Review Checklist
  16. 基于ssm的大学校园兼职平台系统
  17. 【六大设计原则-SOLID】
  18. 全国计算机等级三级数据库技术知识点
  19. nodejs的下载与安装
  20. 关于不同坐标地之前的转化(地球坐标系,经纬度坐标系,火星坐标系,EPSG:4326,WGS84,EPSG:3857)

热门文章

  1. OpenEmu for mac(苹果系统原生游戏模拟软件)
  2. emule不能连接服务器解决办法
  3. sql 有则update 无则 insert
  4. 数据分析实践——面试官:如果DAU下降如何归因?(以抖音为例)
  5. hive 查询去除空值_hive 查看数据库表
  6. 手机测试定义和测试方法
  7. django请求生命周期,FBV和CBV,ORM拾遗,Git
  8. 八年级下计算机教师工作总结,八年级数学教师教学工作总结范文(精选5篇)...
  9. 介绍ReLU6!计算机视觉实习面经(京东/商汤/思谋/依图/图森/字节/腾讯)
  10. 老王学java8周第一天