- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android游戏开发之飞行射击类游戏原理实现
Android游戏开发之飞行射击类游戏原理实现1.地图滚动的原理实现 举个简单的例子吧,同学们都坐过火车吧,坐火车的时候都遇到过自己的火车明明是停止的但是旁边铁轨的火车在向后行驶,会有一种错觉感觉自己的火车是在向前行驶吧,呵呵。飞行射击类游戏的地图原理和这个完全一样。玩家在控制飞机在屏幕中飞行的位置,背景图片一直向后滚动从而给玩家一种错觉自己控制的飞机在向前飞行,如下图所示两张地图图片在屏幕背后交替滚动,这样就会给玩家产生向前移动的错觉。 2.触摸屏幕控制主角飞机的移动范围 用手触摸屏幕中的任意一个点, 程序可以得到当前点的X , Y坐标 。 以当前飞机的X Y坐标为中心计算出当前飞机X,Y坐标点与目标X,Y点的距离 。因为飞机不可能直接就飞到目标点所以分别依次对当前坐标X,Y相加一次飞机移动的步长。 这里我们须要考虑飞机移动过程中玩家停止触摸屏幕,如果停止触摸飞机将原地停住不在向目标点移动,直到新的目标点出线即玩家新触摸屏幕的X,Y坐标。4、主角飞机子弹的实现原理与敌机的碰撞 因为子弹的数量会有很多,敌机的数量也会很多, 所以每一颗子弹须要用一个对象来记录这当前子弹的X,Y坐标 与在屏幕中的绘制区域,每一架敌机也是一个对象,也记录着它的X,Y坐标与在屏幕中的绘制区域,这样在处理碰撞的时候其实就是每一颗子弹的矩形区域 与每一架敌机的矩形区域的碰撞。通过遍历子弹对象与敌机对象就可以计算出碰撞的结果,从而拿到碰撞的敌机对象播放死亡爆炸动画。 说到这里有些同学可能会想如果按照这样的思路将会频繁的创建子弹对象与敌机对象这样会造成内存泄漏等严重的问题。仔细想一下屏幕中须要绘制的子弹数量与敌机数量肯定是有限的,我们可以初始化固定的子弹对象与敌机对象 只对这些对象进行更新逻辑与绘制 ,举个例子 当前游戏屏幕中我最多须要5架敌机,代码中我就只分配5个敌机对象,分别检测这些对象 如果被子弹打中 或者向下超过屏幕底边,这时候可以对这个对象进行属性的重置,让这架飞机从新出现在上方的战场上,这样就实现在不增加飞机对象的情况下让玩家感觉有打不完的飞机,子弹对象同理。简单敌机类实现 敌人有两个状态 一个是生存状态 一个是死亡状态 代码中根据当前状态播放动画。
public class Enemy {
/**敌人存活状态**/
public static final int ENEMY_ALIVE_STATE = 0;
/**敌人死亡状态**/
public static final int ENEMY_DEATH_STATE = 1;
/**敌人行走的Y轴速度**/
static final int ENEMY_STEP_Y = 5;
/**敌人图片的宽度**/
static final int BULLET_WIDTH = 40;
/** 敌人的XY坐标 **/
public int m_posX = 0;
public int m_posY = 0;
/** 敌人行走的动画 **/
private Animation mAnimation0 = null;
/** 敌人死亡的动画 **/
private Animation mAnimation1 = null;
/**播放动画状态**/
public int mAnimState = 0;
/**是否更新绘制敌人**/
boolean mFacus = false;
/**敌人状态**/
int mState =0;
Context mContext = null;
public Enemy(Context context, Bitmap[] frameBitmap,Bitmap[] deadBitmap) {
mContext = context;
mAnimation0 = new Animation(mContext, frameBitmap, true);
mAnimation1 = new Animation(mContext, deadBitmap, false);
}
/**初始化坐标**/
public void init(int x, int y) {
m_posX = x;
m_posY = y;
您可能关注的文档
最近下载
- 2025年中国气泡水行业深度调研与行业竞争对手分析报告.docx
- 高等教育学教学课件电子教案全套课件.pptx VIP
- 46桂阳县方元镇秀里村和荷叶镇山田村历史遗留砷渣污染场地风险管控项目附件文本.docx VIP
- 2024人教版PEP英语三年级上册全册教学设计教案含反思.pdf
- 课题材料目录.pdf
- 美好生活劳动创造-中职生劳动教育教程PPT完整全套教学课件.pptx VIP
- 第十四届全多媒体课件大赛获奖作品名单-初中组.doc VIP
- 湖北省武汉市2020年中考英语真题(含答案).docx VIP
- 2026届高考写作指导:先行者与后来者作文主体段讲解.pptx VIP
- 《GBT_20801.1-2020_压力管道规范_工业管道_第1部分_总则》.pdf VIP
文档评论(0)