微信demo游戏飞机大战从无到有

现在创建新项目会默认给飞机大战的demo,这里给大家从基础开始讲解游戏的从无到有是怎么实现的。

具体实现步骤:

创建背景图->背景图运动起来->创建飞机并随背景图一起动->控制飞机移动->飞机发射子弹->创建敌机->消灭敌机->玩家飞机被击毁->显示结算界面

首先删除所有自带文件,只保留game.js、game.json和project.config.json(原来的最好保留,因为等会要复制一些内容)

删除game.js中的内容,此时模拟器为一片漆黑,如下图所示

好,我们正式开始一步步开始编写飞机大战

官方提供了Adapter库,方便我们操作,官方的解释如下:

这里weapp-adapter足够用,就不用其它游戏引擎了!

1、weapp-adapter

新建JS文件夹,在js文件夹中新建libs文件夹,将weapp-adapter复制进来(原来保存中复制),然后js目录下新建一个main.js文件

2、在game.js中添加代码

main.js先空着,我们要先建立精灵类

3、创建精灵类

精灵,是构成游戏中活动体(比如,飞机、野兽等游戏人物)的最基本单元。

在JS目录下新建sprite.js文件,添加代码,定义背景图的文件,大小,位置等,并显示在画布上。

4、显示背景图

然后添加背景图片images/bg.jpg,在background.js文件中添加代码

背景图片的方法已经完成,现在到主函数main.js中实现图片显示,添加代码

即可实现图片加载,效果如下:

5、背景图运动起来

如果细心的朋友会发现,前面背景图方法里是绘制了两张图片的,一张是和铺满屏幕的,另一张是在屏幕上方看不到的。

如果让背景图运动起来,就要是图片向下移动,因为每一帧都会重新绘制,所以要再背景图方法中加一个向下运动的方法

然后再loop循环中添加

此时背景图就运动起来了

6、加载飞机,并随地图一起运动

新建玩家飞机类

在主函数中添加飞机相关

将loop循环中的内容拆分为重绘和更新

此时,玩家飞机出现,并可以和地图一起运动

7、控制飞机移动

新增判断手指的相关动作,以及判断是否处于屏幕中

此时,飞机的位置可以通过手指和鼠标进行控制

8、发射子弹

这个时候因为子弹会有很多个,而且超出屏幕的要回收掉,所以要加全局管理器和对象池

Base目录中新增pool.js文件(对象池),js目录中新增databus.js文件(全局管理器),这两个文件可以复制原来的

添加子弹类文件bullet.js,复制原来的即可

飞机类新增代码发射子弹

主函数文件中新增

Render中重绘子弹

Update中更新子弹的位置,并每隔20帧发射一枚子弹,数值越小,发射速度越快

已完成子弹发射的功能。

9、创建敌机

敌机会有爆炸的动画,所以要新建一个帧动画类和敌机类

帧动画类:base目录下的animation.js

敌机类:npc目录下enemy.js

(复制过来就行,具体不做详解)

主函数中新增生成敌机的代码

此时不会有敌机爆炸,也没有撞机的功能

10、消灭敌机

主函数中新增全局碰撞检测,被注释掉的是玩家飞机和敌机碰撞,暂时先不要

全局碰撞方法要放到update函数中,此时可以消灭敌机,但是没有爆炸动画,玩家也是出于无敌状态的。

新增代码,显示爆炸动画

11、玩家飞机被击毁,游戏结束

然后控制游戏不再更新

这个时候画面静止不动了,游戏结束了

12、显示结算界面

在runtime文件夹中新增gameinfo.js文件,用于积分和结算界面

判断游戏结束后,显示结算页面,并新增点击重新开始事件

游戏结束后,手指触摸事件

此时,如果游戏结束后,点击重新开始,会发现不正常,游戏立马结束了,原因是原来所有的游戏单元都还在。

新增代码

所有的单元全部重置,此时又有新的问题,游戏速度变的越来越快了

此时可以重新开始,但是飞机不能移动了,原因很简单,事件监听中还是开始的事件,要删除掉

至此,已经完成了飞机大战的制作了(音效就没管了,需要可以自己研究一下)

结束。。等等,游戏中的时候居然没有显示实时积分??这个居然漏了,现在补上

上面是显示积分,下面是积分增加,消灭一个敌机加一

至此,真的结束了,至少每一步是怎么实现的,应该有所了解,具体实现的逻辑可以自己研究,后续会有更多的实例提供大家参考。

顺便打个广告,欢迎大家关注笑林新记,每天都有不一样的爆笑内容,可以放松一下,扫码关注一下吧,我的更新也在这里。

这里也附上我个人的微信,欢迎大家和我交流

微信demo小游戏:飞机大战从无到有的更多相关文章

  1. 原生JS实现的h5小游戏-植物大战僵尸

    代码地址如下:http://www.demodashi.com/demo/12755.html 项目介绍 本项目是利用原生js实现的h5小游戏-植物大战僵尸,主要结合了一下自己对于h5小游戏的理解,结 ...

  2. 软件工程 Android小游戏 猜拳大战

    一.前言 最近学校举办的大学生程序设计竞赛,自己利用课余时间写了一个小游戏,最近一直在忙这个写这个小游戏,参加比赛,最终是老师说自己写的简单,可以做的更复杂的点的.加油 二.内容简介 自己玩过Andr ...

  3. android小游戏 飞机躲子弹

    最近android老师让每人写一个小东西,因为之前学awt时写过一个java版的飞机躲子弹,所以这次想写成android版的. 文件直接导入就行http://files.cnblogs.com/fil ...

  4. 关于Unity的入门游戏飞机大战的开发(下)

    开发思路: 1: 修改测试模式,去掉开始按钮方便开发,加入敌机的资源2: 创建敌机 添加刚体,碰撞器组件,添加帧动画播放组件;3: 创建敌机出现的队形;4: 根据队形随机 生成我们的敌机,调整敌机的速 ...

  5. 关于Unity的入门游戏飞机大战的开发(上)

    每个组件都是一个类的实例,要获得某个组件,要先创建一个同类型的组件类实例,然后把实例传引用过去,就可以对想要的组件实例进行操作. 做游戏一般创建一个逻辑节点,里面只管逻辑,再创建一个动画节点,里面有好 ...

  6. 【Web前端Talk】无聊吗?写个【飞机大战】来玩吧(上篇)

    01前言介绍 微信小游戏是基于微信客户端的游戏,它即点即玩,无需下载安装,体验轻便,可以和微信内的好友一起玩,比如PK.围观等,享受小游戏带来的乐趣.那如何开发一款属于自己的小游戏呢? 源码地址: h ...

  7. python飞机大战简单实现

    小游戏飞机大战的简单代码实现: # 定义敌机类 class Enemy: def restart(self): # 重置敌机的位置和速度 self.x = random.randint(50, 400 ...

  8. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  9. 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)

    微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...

随机推荐

  1. webpack4.0打包优化策略整理小结

    本文转载于:https://www.jb51.net/article/137449.htm 介绍了webpack4.0打包优化策略整理小结,分享给大家,具体如下: webapck4 新特性介绍-参考资 ...

  2. spring-JDBC配置,使用,一些报错,mybatis原理,优化

    一. 配置spring的jdbc的pom.xml遇到报错 missing artifactXXXXX. 修改dependency的版本如下 <dependency> <groupId ...

  3. intelij idea 常用插件下载

    本文,给大家推荐几款我私藏已久的,自己经常使用的,可以提升代码效率的插件.IDEA插件简介常见的IDEA插件主要有如下几类:常用工具支持Java日常开发需要接触到很多常用的工具,为了便于使用,很多工具 ...

  4. Excel2013下拉框选择自动填充颜色

    图一写判断公式,图二选择应用范围.

  5. Crystal Report水晶报表碰到的一些纠结问题

    1.插入PNG文件时,透明的背景会变成黑色.试了矢量图WMF文件,是可以正常显示的,不过毕竟得到矢量图比较困难.   后来找到个方法,就是把JPG图片放在子报表里,调整子报表在父报表的位置并且保持JP ...

  6. pytorch 环境搭建

    https://pytorch.org/get-started/locally/ pip3 install torch torchvision

  7. Ubuntu 14.04 64bit中永久添加DNS的方法

    第一种方法修改如下文件,默认是空的sudo vim /etc/resolvconf/resolv.conf.d/base在里面加入你想添加的DNS服务器,一行一个nameserver 114.114. ...

  8. Codeforces 1276D/1259G Tree Elimination (树形DP)

    题目链接 http://codeforces.com/contest/1276/problem/D 题解 我什么DP都不会做,吃枣药丸-- 设\(f_{u,j}\)表示\(u\)子树内,\(j=0\) ...

  9. 图解Linux进程间通信实现原理(1)

    为Linux应用程序的开发人员,对Linux的进程间通信方式肯定是了如指掌,平时的开发中应该会大量的使用到.当你迅速的在键盘上按下[CTRL+C]终止掉一个正在运行中的命令时,你有没有仔细的思考过背后 ...

  10. go中interface作为参数和switch里的type

    package main import ( "fmt" "time" ) func main() { i :=2 fmt.Println("Write ...