Git Product home page Git Product logo

aircraft_war's Introduction

飞机大战

思路取自laya官方文档案例,游戏基于laya和FUI,内容推倒重做

前言

  • 飞机大战压缩包基于layaAir,文件夹demo是基于layaAir和FUI
  • 先声明一下:游戏内场景与角色资源全部为原开发者所有,压缩包为借鉴资源,demo为私有,本例只做研究学习之用,源码和资源请勿商用。 error

项目需求分析

 $ 在所有的游戏项目开始阶段,项目需求分析占有较大的时间比例。策划出了项目需求后,有经验的程序员也会自己构建逻辑思维导图,使程序架构上考虑得更加合理,开发思路上更清晰。
​ $ 因此,本教程根据开发需求提供了基本逻辑思维导图作为参考。建议开发者养成项目开发规划的习惯。

error 根据以上思维导图分析我们得出以下开发思路:

  • 可视化素材制作,分为两步,一是编辑UI,美术制作出效果图,输出与IDE命名规则匹配的图片资源,再进行UI页面编辑;二是可视化角色动画制作,通过IDE时间轴制作角色动画效果,所见即所得,程序直接调用动画生成文件,还可减少代码量。
  • 游戏流程控制,处理游戏开始、游戏中、游戏结束界面流程页面,并实现其UI功能。
  • 游戏主要逻辑功能分步骤开发,游戏地图、游戏角色、游戏操控、游戏逻辑、游戏升级等。

编辑器可视化资源制作

游戏中可见的部分都可以在laya的IDE中实现 由于laya自带的编辑器有很多bug,不推荐使用,我们使用的是 FUI

编辑游戏UI流程控制

  • 根据之前的需求分析,《飞机大战》的游戏的流程相对简单,游戏开始—游戏进行中—角色死亡—游戏结束—重新开始—游戏进行中;
  • 用三个方法来作为游戏的主要流程:游戏开始gameStart()、游戏中gameInit()、游戏结束gameOver(),负责游戏流程页面的显示与切换。

游戏UI功能实现

“开始页面”逻辑功能

1.游戏资源加载。使用了Loader.load()中加载完成和加载进度回调方法。加载进度方法中更新UI中进度文本框,完成方法中显示“开始游戏”按钮。 注:如果游戏除开始页面的其他资源较小,进度会很快到100%,因此也可以制作一个假的进度,时间至少1.5秒,符合人眼视觉停留的观察时间。 2.隐藏和显示开始按钮功能。在资源未完成前先隐藏,以免未加载完就点击进入游戏报错; 3.开始页面动画效果。按钮显示时缓动动画出现效果;页面弹出动画效果,Dialog页面有打开和关闭的缓动动画。

“地图页面”逻辑功能

让背景滚动起来即可,实际飞机不动背景缓慢下移

“游戏中页面”逻辑功能

游戏中”页面主要功能为: 1.游戏暂停,显示暂停页面。在LayaAir引擎中,时间对象是全局的,因此我们可以让游戏时间缩放到0,那么游戏就停止了。包括所有角色动画、背景地图移动、游戏主循环等。 2.游戏继续,暂停页面消失,游戏时间缩放到1,游戏继续。 3.更新游戏数值变化,主角血量,游戏关卡,获得分数。建立一个update()方法更新数据。

“游戏中页面”逻辑功能

“游戏结束”页面主要功能为: 1.监听“重新开始”按钮点击事件,在上一课程中我们讲了为页面元素增加动画效果,取名为ani_restart,在这里我们就可以程序调用了。逻辑为点击后播放按钮动画,按钮动画结束后再真正重新开始游戏。 2.监听按钮动效动画完成事件,动画完成后发送重新游戏开始事件给主类中的监听,并重新开始游戏。 3.修改Main类中gameOver()方法。将鼠标监听修改为事件监听。

游戏主角与操控

但最重要的角色还未加入,根据思维导图分析,游戏角色才是游戏的真正核心逻辑 error 1.建立基础角色类,可通过初始化方法对角色进行分类,根据角色类型可播放不同的动画。 2.在主类中实例化主角,并实现主角的控制方法,让主角移动。 3.建立主角更新方法,并作边界检查,使主角不能移动画屏幕外。

创建敌机与角色碰撞

代码思路如下: 1.在Main类中建立创建敌人方法creatEnemy(),可生成不同的敌人。 2.在Main类主循环loop()中加入定期创建敌机逻辑代码。 3.在角色Role类中建立角色死亡方法die(),包括了从舞台移除、事件移除、对象回收等, 4.修改角色Role类中更新方法update(),角色每帧根据速度移动。增加除主角外的其他角色边界检查,当飞出屏幕后,消失并被对象池回收。

主角射击与掉落道具

在以前的教程中我们是把射击放到了主类Main中,但主类中是主逻辑,代码较多,而且射击是角色的一个行为,因此本例中把射击方法放到角色Role类里。 在Role类里新增射击间隔时间shootInterval与下次射击时间shootTime属性,及角色是否是子弹类型isBullet属性。然后新建方法shoot()。 在射击方法中按射击间隔创建子弹,子弹对象同样是角色对象,区别是它只有飞行状态,无受伤死亡状态。

关卡升级与音效播放

关卡升级由玩家获得的积分转换运算,关卡越高,说明玩家操控越好。随着关卡的升级,增强敌机的血量、创建敌机时间缩短、敌机飞行速度加快、数量也逐步增加,这样游戏难度就增加了。

转载请注明出处,喜欢请点星

aircraft_war's People

Contributors

lyall-x avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.