2017-2018-1 JaWorld 团队作业--冲刺2
2017-12-05 22:57
274 查看
2017-2018-1 JaWorld 团队作业--冲刺2 (20162314)
总体架构
我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏游戏中所有模型的原型设定是精灵,因此不管是敌机还是战斗机都是精灵类,精灵类是所有类的父类
精灵类(Sprite)下有三个子类,一个是战斗机类,也就是玩家;一个是走直线的精灵类(AutoSprite),也就是对敌机的统称;还有一个是爆炸类,指的是敌机或战斗机被摧毁。
我所负责的是精灵类(Sprite)下的走直线的精灵类(AutoSprite)下的子弹类(Bullet)
精灵类(Sprite)
精灵类是所有其他用于绘制(frame)的类的基类。
整个游戏界面是建立在一张巨大的位图(Bitmap)上的,它的长度和宽度是设定就好的,位图由像素构成,基于像素即可建立笛卡尔直角坐标系。因此战斗机开始,走过,被摧毁爆炸的位置就可以确定,我们通过战斗机走过的距离来为玩家记成绩。
宽度变量是getWidth,高度是getHeight,x和y分别表示战斗机初始位置的横纵坐标,offsetX和offsetY分别表示战斗机爆炸时的位置的横纵坐标,由此可以计算出战斗机走过的总距离。
其中,战斗机的横坐标x到位图x坐标中心点的距离显然是x减去宽度的一半,同理y也是减去高度的一半。
public void centerTo(float centerX, float centerY) { float w = getWidth(); float h = getHeight(); x = centerX - w / 2; y = centerY - h / 2; }
x是战斗机左边的长度,y是战斗机的高度,那么右边就是x加上宽度,到底部的长度就是y加上高度。
public RectF getRectF() { float left = x; float top = y; float right = left + getWidth(); float bottom = top + getHeight(); RectF rectF = new RectF( left, top, right, bottom ); return rectF; }
有了java架构下的算法后,接下来的就是把背后的算法表现出来,也就是绘制出来,我们称画(draw)到布(Canvas)上。
Draw需要三部分,游戏开始前的状态beforeDraw,游戏进行中的onDraw和游戏结束后的afterDraw。每部分都需要三要素布(Canvas),Paint(漆)和游戏视图(gameView)。
public final void draw(Canvas canvas, Paint paint, GameView gameView) { frame++; beforeDraw( canvas, paint, gameView ); onDraw( canvas, paint, gameView ); afterDraw( canvas, paint, gameView ); }
onDraw需要三个判定条件以确定是在游戏中,战斗机未被摧毁(!destroyed,位图bitmap不为空null,可见状态getvisible)
Draw将精灵Sprite绘制到布Canvas上。
摧毁类包含敌机被摧毁和战斗机被摧毁,摧毁后则位图bitmap为空。
public boolean isDestroyed() { return destroyed; } public int getFrame() { return frame; }
走直线的精灵类(AutoSprite)
敌机类,只能沿直线直上直下。
其速度为每帧移动的像素数,敌机的速度设定为2,即每帧移动的像素数==2.
战斗机的移动move量=速度speed*Time,Time=gameView。
public class AutoISprite extends ISprite { //每帧移动的像素数,以向下为正 private float speed = 2; public AutoISprite(Bitmap bitmap) { super( bitmap ); } public void setSpeed(float speed) { this.speed = speed; } public float getSpeed() { return speed; }
AutoSprite还内置了一个afterDraw的摧毁方法的扩充,isDestroyed检查Sprite是否超出了Canvas的范围,如果超出,则销毁Sprite。
protected void afterDraw(Canvas canvas, Paint paint, GameView gameView) { if (!isDestroyed()) { //检查Sprite是否超出了Canvas的范围,如果超出,则销毁Sprite RectF canvasRecF = new RectF( 0, 0, canvas.getWidth(), canvas.getHeight() ); RectF spriteRecF = getRectF(); if (!RectF.intersects( canvasRecF, spriteRecF )) { destroy();
子弹类(Bullet)
子弹是从下向上沿直线移动的。
前面我们用从上往下的speed为正设定了精灵类的速度,因此从下向上的子弹的速度就是负的。
负数表示子弹向上飞
public class Bullet extends AutoISprite { public Bullet(Bitmap bitmap) { super( bitmap ); setSpeed( -10 );//负数表示子弹向上飞 }
明日各个成员的任务安排
陈是奇同学进行博客整理,王译潇同学和张师瑜同学帮其他同学查找相关资料以及提供建议,其余同学完成任务并将已完成的内容进行测试。相关文章推荐
- 2017-2018-1 JaWorld 团队作业--冲刺3
- 2017-2018-1 JaWorld 团队作业--冲刺6
- 2017-2018-1 JaWorld 团队作业--冲刺5
- 2017-2018-1 JaWorld 团队作业--冲刺7
- 2017-2018-1 JaWorld 团队作业--冲刺1
- 2017-2018-1 JaWorld 团队作业--冲刺4
- 2017-2018-1 团队名称 第一周 作业
- 【2017下集美大学软工1412班_助教博客】团队作业4——Alpha冲刺日志公示
- 【2017下集美大学软工1412班_助教博客】团队作业7——第二次项目冲刺(Beta阶段)成绩公示
- 团队作业8——第二次项目冲刺(Beta阶段)5.27
- 2017-2018-1 JAVA实验站 第八周作业
- 团队作业8——第二次项目冲刺(Beta阶段)日志集合处
- 团队作业7——第二次项目冲刺(Beta版本12.07——12.08)
- 安徽科技学院2017-2018-1学期15电信12班《Java编程技术》课下作业~解题报告
- 团队作业4——第一次项目冲刺(Alpha版本)1st day
- 团队作业4——第一次项目冲刺(Alpha版本)2017.4.22
- 团队作业7——第二次项目冲刺(Beta版本12.05-12.07)
- 2017-2018-1 JAVA实验站 冲刺 day07
- 团队作业4----第一次项目冲刺(Alpha版本)4.24
- 20155216 2017-2018-1 第八周课下作业1