2017-2018-1 JaWorld 团队作业--冲刺6(20162308)

实现

  • 由于我在冲刺部分负责的是类之间的耦合,所以我就介绍一下本次游戏的总体实现。
  • 我们定义了Sprite类,即精灵类,游戏中的飞机、子弹、奖励道具等都是继承自该类,我们通过moveTo()、move()等方法控制精灵的位置,通过beforeDraw()、onDraw()、afterDraw()实现相应的绘图逻辑。
  • GameView是我们自定义的View类,由于View只支持单击事件,而不支持双击事件,所以我们自己定义了一个resolveTouchType()方法,通过这个方法可以合成我们自己想要的事件类型,比如双击事件。代码如下:
 @Override
public boolean onTouchEvent(MotionEvent event){
//通过调用resolveTouchType方法,得到我们想要的事件类型
//需要注意的是resolveTouchType方法不会返回TOUCH_SINGLE_CLICK类型
//我们会在onDraw方法每次执行的时候,都会调用isSingleClick方法检测是否触发了单击事件
} //合成我们想要的事件类型
private int resolveTouchType(MotionEvent event){
int touchType = -1;
int action = event.getAction();
touchX = event.getX();
touchY = event.getY();
if(action == MotionEvent.ACTION_MOVE){
long deltaTime = System.currentTimeMillis() - touchDownTime;
if(deltaTime > singleClickDurationTime){
//触点移动
touchType = TOUCH_MOVE;
}
}else if(action == MotionEvent.ACTION_DOWN){
//触点按下
touchDownTime = System.currentTimeMillis();
}else if(action == MotionEvent.ACTION_UP){
//触点弹起
touchUpTime = System.currentTimeMillis();
//计算触点按下到触点弹起之间的时间差
long downUpDurationTime = touchUpTime - touchDownTime;
//如果此次触点按下和抬起之间的时间差小于一次单击事件指定的时间差,
//那么我们就认为发生了一次单击
if(downUpDurationTime <= singleClickDurationTime){
//计算这次单击距离上次单击的时间差
long twoClickDurationTime = touchUpTime - lastSingleClickTime; if(twoClickDurationTime <= doubleClickDurationTime){
//如果两次单击的时间差小于一次双击事件执行的时间差,
//那么我们就认为发生了一次双击事件
touchType = TOUCH_DOUBLE_CLICK;
//重置变量
lastSingleClickTime = -1;
touchDownTime = -1;
touchUpTime = -1;
}else{
//如果这次形成了单击事件,但是没有形成双击事件,那么我们暂不触发此次形成的单击事件
//我们应该在doubleClickDurationTime毫秒后看一下有没有再次形成第二个单击事件
//如果那时形成了第二个单击事件,那么我们就与此次的单击事件合成一次双击事件
//否则在doubleClickDurationTime毫秒后触发此次的单击事件
lastSingleClickTime = touchUpTime;
}
}
}
return touchType;
}
  • 我们记录MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP的时间,一次单击事件由ACTION_DOWN和ACTION_UP两个事件合成,假设从ACTION_DOWN到ACTION_UP间隔小于200毫秒,我们就认为发生了一次单击事件。一次双击事件由两个点击事件合成,两个单击事件之间小于300毫秒,我们就认为发生了一次双击事件。在触发了双击事件的时候,我们就会触发炸弹,将屏幕内的敌机都炸毁。当处于ACTION_MOVE状态时,我们就通过event.getX()和event.getY()改变战斗机的位置。

  • 我们还为GameView提供了start()、pause()、resume()和destroy()等方法,使其具备类似于Activity的生命周期,方便在Activity中对GameView进行状态管理。

不足的地方

  • 在游戏的设计之初,我们计划设计出多种敌机,并且在游戏过程中有道具奖励。但在实际设计的过程中暂时还没实现。争取在最后一段时间将这个不足弥补。

小组讨论

2017-2018-1 JaWorld 团队作业--冲刺6的更多相关文章

  1. 2017-2018-1 JaWorld 团队作业--冲刺1

    2017-2018-1 JaWorld 团队作业--冲刺1(20162301) 一.小组分工: 由于小组成员在本周比较忙碌,所以考虑后本组的冲刺就按照每天加入不同的类来完成.我们根据类的难度大小来决定 ...

  2. 2017-2018-1 JaWorld 团队作业--冲刺2

    2017-2018-1 JaWorld 团队作业--冲刺2 (20162314) 总体架构 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏 游戏中所有模型的原型设定是精灵,因 ...

  3. 2017-2018-1 JaWorld 团队作业--冲刺3

    2017-2018-1 JaWorld 团队作业--冲刺3 (20162306) 总体架构 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏 游戏中所有模型的原型设定是精灵,因 ...

  4. 2017-2018-1 JaWorld 团队作业--冲刺4

    2017-2018-1 JaWorld 团队作业--冲刺4 (20162305) 总体架构 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏 游戏中所有模型的原型设定是精灵,因 ...

  5. 2017-2018-1 JaWorld 团队作业--冲刺5

    2017-2018-1 JaWorld 团队作业--冲刺5(20162310) 团队项目之战斗机类分析博客 总结 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏 游戏中所有模 ...

  6. 2017-2018-1 JaWorld 团队作业--冲刺7

    2017-2018-1 JaWorld 团队作业--冲刺7 冲刺博客 冲刺1 冲刺2 冲刺3 冲刺4 冲刺5 项目完成情况 存在的问题 存在的问题是敌机只设置了一种,没能实现多种敌机的游戏设置. 界面 ...

  7. 【2017集美大学1412软工实践_助教博客】团队作业4——第一次项目冲刺(Alpha版本)小组 成绩

    第四次团队作业成绩公布 题目 团队作业4: http://www.cnblogs.com/happyzm/p/6722264.html 团队成绩 成绩公示如下: 检查项 会议内容 代码签入 心得体会或 ...

  8. 【2017集美大学1412软工实践_助教博客】团队作业8——第二次项目冲刺(Beta阶段)

    题目 团队作业8: http://www.cnblogs.com/happyzm/p/6856179.html 团队作业8-1 beta冲刺计划 团队 新加入的成员,担当的角色,技术特点 下一阶段需要 ...

  9. 【2017集美大学1412软工实践_助教博客】团队作业7——Alpha冲刺之事后诸葛亮

    题目 团队作业7: http://www.cnblogs.com/happyzm/p/6827853.html 团队成绩 评分项目 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 全组 ...

随机推荐

  1. Windows系统调用架构分析—也谈KiFastCallEntry函数地址的获取

    为什么要写这篇文章 1.      因为最近在学习<软件调试>这本书,看到书中的某个调试历程中讲了Windows的系统调用的实现机制,其中讲到了从Ring3跳转到Ring0之后直接进入了K ...

  2. thinkphp5 Windows下用Composer引入官方GitHub扩展包

    很多新手,比如说我,写代码就是在windows下,所以总会遇到很多不方便的地方,比如说GitHub上面的代码更新了,要是你在linux,只要几行命令就可以搞定更新了,在windows下面,你需要用到C ...

  3. php 关于日期的知识总结

    1.UNIX时间戳   time() echo time(); 2.UNIX时间戳转换为日期用函数: date() 一般形式:date(); 即 echo date(date('Y-m-d H:i:s ...

  4. Android 动画fillAfter和fillBefore

    fillBefore是指动画结束时画面停留在此动画的第一帧; fillAfter是指动画结束是画面停留在此动画的最后一帧. Java代码设置如下: /*****动画结束时,停留在最后一帧******* ...

  5. luogu P1379 八数码难题(A*算法入门详细讲解)

     代码实现细节 #include<cstdio> #include<cstring> #include<iostream> using namespace std; ...

  6. redis未授权访问漏洞那拿SHELL

    一.什么是redis未授权访问漏洞: 1.redis是一种文档型数据库,快速高效,存储在内存中,定期才会写磁盘.主要用于快速缓存,数据转存处理等.默认redis开在6379端口,可以直接访问.并不需要 ...

  7. ios 给键盘上面加上“完成”

    #import <UIKit/UIKit.h> @interface FirstViewController : UIViewController<UITextFieldDelega ...

  8. Floyd算法并输出路径

    hdu1224 Free DIY Tour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  9. 从零打造在线网盘系统之Hibernate框架起步

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  10. mysql登录密码特殊字符处理

    mysql -h 192.168.12.23 -u root  -pClz_b1qYPyl6$Zu1 登录报错 mysql -h 192.168.12.23 -u root  -pClz_b1qYPy ...