Html飞机大战(十一): 飞机撞毁爆炸
好家伙,这篇写英雄撞机爆炸
我们先把子弹销毁弄上去
子弹穿过敌机,敌机爆炸后消失,子弹同样也应该销毁,(当然后续会考虑穿甲弹)
然后我们还要把主角碰撞爆炸检测也加上去
因为他们共用一个思路,所以我们把他写在一起
我们会为子弹和英雄都添加一个destory属性
在碰撞检测完成后,我们调用一个方法去把这个属性改为true
同时在一个全局函数中,时刻检测这个destory属性,
当这个属性由false转为true时,销毁这个数组中的这个对象
当然了,英雄类中还要添加一个方法用于渲染英雄的爆炸动画(然后再将他的destory改为true)
思路清晰,开干
1.全局检测函数
// 碰撞检测函数
function checkHit() {
// 遍历所有的敌机
for (let i = 0; i < enemies.length; i++) {
//检测英雄是否撞到敌机
if (enemies[i].hit(hero)) {
//将敌机和英雄的destory属性改为true
enemies[i].collide();
hero.collide();
}
for (let j = 0; j < hero.bulletList.length; j++) {
enemies[i].hit(hero.bulletList[j]);
//检测子弹是否撞到敌机
if (enemies[i].hit(hero.bulletList[j])) {
//将敌机和子弹的destory属性改为true
enemies[i].collide();
hero.bulletList[j].collide();
}
}
}
}
2.全局的删除方法deleteComponent()
function deleteComponent() {
if (hero.destory) {
life--;
hero.destory = false;
if (life === 0) {
state = END;
} else {
hero = new Hero(HERO);
}
}
for (let i = 0; i < hero.bulletList.length; i++) {
if (hero.bulletList[i].outOfBounds() || hero.bulletList[i].destory) {
hero.bulletList.splice(i, 1);
}
}
for (let i = 0; i < enemies.length; i++) {
if (enemies[i].outOfBounds() || enemies[i].destory) {
enemies.splice(i, 1);
}
}
}
这里做了一个整合,将子弹/敌机的出界判定销毁和子弹/敌机的碰撞判定销毁整合到一起了
看上去更方便理解了
outOfBounds()是一个出界判定
敌机或者子弹出界了就销毁
outOfBounds() {
return this.y < -this.height;
}
3.hero的爆炸动画渲染方法
这里需要补充一下
当我们完成了英雄和敌机的碰撞检测后(假设已经撞上了),
我们先将英雄的live属性改为false,(英雄死了)
然后我们让一个在检测live属性的方法(即hero类的judge)中添加动画渲染的方法
在爆炸动画渲染结束后,将destory属性改为true
最后,全局的删除方法deleteComponent()方法会检测到这个值
然后销毁英雄
judge() {
const currentTime = new Date().getTime();
if (currentTime - this.lastTime > this.speed) {
if (this.live) {
//活着的时候渲染"活着"数组的图片
this.img = this.frame.live[this.frameLiveIndex++ % this.frame.live.length];
} else {
//死亡后渲染"死亡"数组的图片,即渲染爆炸动画
this.img = this.frame.death[this.frameDeathIndex++];
if (this.frameDeathIndex === this.frame.death.length) {
this.destory = true;
}
}
this.lastTime = currentTime;
}
}
4.子弹类的collide方法
非常简单粗暴
collide() {
this.destory = true;
}
因为子弹不用考虑爆炸动画(有必要的话后期会做)
5.英雄类的collide()方法
collide() {
this.live = false;
}
来看看效果吧:

Html飞机大战(十一): 飞机撞毁爆炸的更多相关文章
- Python小游戏之 - 飞机大战美女 !
用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...
- web版canvas做飞机大战游戏 总结
唠唠:两天的时间跟着做了个飞机大战的游戏,感觉做游戏挺好的.说是用html5做,发现全都是js.说js里一切皆为对象,写的最多的还是函数,都是函数调用.对这两天的代码做个总结,希望路过的大神指点一下, ...
- Cocos2d-x 3.0final 终结者系列教程16-《微信飞机大战》实现
看到cocos2d-x推出了3.1版本号,真是每月一次新版本号,速度. 另一个好消息就是http://cn.cocos2d-x.org/上线了,祝贺!啥时候把我的视频和教程放上去呢?!! . 视频下载 ...
- 【Web前端Talk】无聊吗?写个【飞机大战】来玩吧(上篇)
01前言介绍 微信小游戏是基于微信客户端的游戏,它即点即玩,无需下载安装,体验轻便,可以和微信内的好友一起玩,比如PK.围观等,享受小游戏带来的乐趣.那如何开发一款属于自己的小游戏呢? 源码地址: h ...
- 微信demo小游戏:飞机大战从无到有
微信demo游戏飞机大战从无到有 现在创建新项目会默认给飞机大战的demo,这里给大家从基础开始讲解游戏的从无到有是怎么实现的. 具体实现步骤: 创建背景图->背景图运动起来->创建飞机并 ...
- Python小游戏之 - 飞机大战 !
用Python写的"飞机大战"小游戏 源代码如下: # coding=utf-8 import random import os import pygame # 用一个常量来存储屏 ...
- 11.pygame飞机大战游戏整体代码
主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...
- 我的第一个NPM包:panghu-planebattle-esm(胖虎飞机大战)使用说明
好家伙,我的包终于开发完啦 欢迎使用胖虎的飞机大战包!! 为你的主页添加色彩 这是一个有趣的网页小游戏包,使用canvas和js开发 使用ES6模块化开发 效果图如下: (觉得图片太sb的可以自己改 ...
- js实例--飞机大战
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
- 微信5.0 Android版飞机大战破解无敌模式手记
微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...
随机推荐
- [转帖]kubelet 原理解析六: 垃圾回收
https://segmentfault.com/a/1190000022163856 概述 在k8s中节点会通过docker pull机制获取外部的镜像,那么什么时候清除镜像呢?k8s运行的容器又是 ...
- BMC修改密码
公司里的服务器都托管出去了, 为了好维护, 都给自己的机器设置了BMC远程管理的端口, 安全起见自己修改了密码. 方法很简单.默认用户密码是 用户:root 密码: root 用户:admin 密码: ...
- MySQL常用操作指令大全
前言: 一.基础概念 二.子句顺序 三.使用MySQL(USE.SHOW) 四.检索数据(SELECT) 五.排序检索数据(ORDER BY) 六.过滤数据(WHERE) 七.数据过滤(AND.OR. ...
- python:spacy、gensim库的安装遇到问题及bug处理
1.spacy SpaCy最新版V3.0.6版,在CMD 模式下可以通过 pip install spacy -U 进行安装 注意这个过程进行前可以先卸载之前的旧版本 pip uninstall sp ...
- C# 语言程序设计笔记
C#是一种最新的.面向对象的编程语言.它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领 ...
- 多路io复用pool [补档-2023-07-19]
多路IO- poll 3.1简介 poll的机制与select类似,他们都是让内核在以线性的方法对文件描述符集合进行检测,根据描述符的状态进行具体的操作.并且poll和select在检测描述符集合 ...
- P4747 [CERC2017] Intrinsic Interval 题解
题目链接:Intrinsic Interval 讲讲析合树如何解决这种问题,其实这题很接近析合树的板题的应用. 增量法进行析合树建树时,需要用 ST 表预处理出 \(max\) 和 \(min\) 以 ...
- P9549 「PHOI-1」路虽远 题解
题目链接:路虽远 带限制的 dijkstra,优先考虑有哪些限制条件,当做类似 dp 去写.闯黄灯次数有要求,限制速度的边数量有要求. 我们注意到,如果选择哪些边限速不易于基于贪心选择,可以考虑转换下 ...
- Python中os.walk函数说明
这个函数对于文件方面的遍历等其他方面的操作来说功能很强大,比如批量修改文件名.批量移动文件.将所有不在一个文件夹下的文件移动到同一个文件夹下等等. 这个其实很简单的,用一个示例就能明白这个函数的具体用 ...
- spring-cloud 配置管理
作用: 实现配置热更新 实现网关配置热部署 配置模板 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc ...