效果:
HTML代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>飞机大战游戏</title>
<style>
html {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
position: relative;
background-image: linear-gradient(#2C3E50,#4CA1AF);
}
.canvasbig {
position: absolute;
left: calc(50% - 260px);
top: calc(50% - 400px);
width: 520px;
height: 800px;
}
.canvasdiv {
position: absolute;
cursor: pointer;
left: 160px;
top: 500px;
width: 200px;
height: 53px;
background-image: url(img/starting.png);
}
.none {
display: none;
}
</style>
</head>
<body>
<!-- <script src="js/circle.js"></script> -->
<div class="canvasbig">
<div class="canvasdiv"></div>
<canvas width="520" height="800" id="canvas1"></canvas>
</div>
<script src="js/index.js"></script>
</body>
</html>
JS部分代码(代码太多,这里放部分,需要的私聊):
var canvas1 = document.getElementById("canvas1");
var context = canvas1.getContext('2d');
var canvasbig = document.getElementsByClassName("canvasbig")[0];
//背景图片
var bg = new Image();
bg.src = "img/bg.jpg";
//全民飞机大战标题
var starthead = new Image();
starthead.src = "img/starthead.png";
//我方战斗机
var myplane = new Image();
myplane.src = "img/myplane1.png";
var myplaneX = canvas1.width / 6,
myplaneY = 730;
//战斗机子弹
var bullet = new Image();
bullet.src = "img/bullet.png";
var bullettime = 10,
bulletnum = 10,
bulletarr = [];
//敌机
var enemytime = 0,
enemyarr = [];
var enemy1 = new Image();
enemy1.src = `img/enemy1.png`;
var enemy2 = new Image();
enemy2.src = `img/enemy2.png`;
var enemy3 = new Image();
enemy3.src = `img/enemy3.png`;
var enemy4 = new Image();
enemy4.src = `img/enemy4.png`;
var enemyall = [enemy1, enemy2, enemy3, enemy4];
//战斗机爆炸
var myplane1boom = new Image();
var myboomnum = 1,
myboomtime = 0;
//敌机爆炸
var enemychangearr = [];
//boss警告
var warning1 = new Image();
warning1.src = "img/warning1.png"
var warning2 = new Image();
warning2.src = "img/warning2.png";
var warningtime = 0,
warningchange = 0;
//boss出场背景
var bossbg = new Image();
bossbg.src = "img/bg2.jpg";
var boss = new Image();
boss.src = "img/planeboss.png";
//boss改变飞机速度
var bossattacktime = 0;
var bossattacknum = 1;
var obj = {
gamestart: 1,
gameload: 0,
gamerun: 0,
gameover: 0,
dead: 0,
score: 0,
life: 3,
bgy1: -854,
bgy2: 0,
warnon: 0,
bosstime: 0,
bossattack: 0,
bgon: function () {
context.drawImage(bg, 0, this.bgy1, 520, 854);
context.drawImage(bg, 0, this.bgy2, 520, 854);
},
bgchange: function () {
this.bgy1++;
this.bgy2++;
if (this.bgy1 == 0) {
this.bgy1 = -854;
this.bgy2 = 0;
}
},
scoring: function () {
var gradient = context.createLinearGradient(0, 0, 120, 60);
gradient.addColorStop(0, '#ff9569');
gradient.addColorStop(1, '#e92569');
context.font = '30px sans-serif';
context.fillStyle = gradient;
context.fillText("SCORE:" + this.score, 10, 50);
},
lifeing: function () {
context.font = '30px sans-serif';
context.fillStyle = "#D55555";
context.fillText("LIFE:" + this.life, 400, 50);
if (obj.dead == 1 && myboomnum == 9 && obj.life > 0) {
obj.dead = 0;
bullettime = 0;
bulletnum = 0;
bulletarr = [];
enemytime = 0;
enemyarr = [];
myboomnum = 1;
myboomtime = 0;
enemychangearr = [];
myplane1boom.src = `img/myplane1boom${myboomnum}.png`;
} else if (obj.dead == 1 && obj.life == 0) {
obj.gameover = 1;
}
},
gameovering: function () {
if (obj.gameover == 1) {
obj.gamestart = 1;
obj.gameover = 0;
obj.dead = 0;
obj.gamerun = 0;
}
},
starting: function () {
canvasdiv.className = "canvasdiv";
obj.life = 3;
obj.score = 0;
loadnum = 1;
loadtime = 0;
loadrect = 1;
loadtextblur = true;
loadtextnum = -1;
pointnum = 1;
myplaneX = canvas1.width / 2;
myplaneY = 730;
bullettime = 0;
bulletnum = 0;
bulletarr = [];
enemytime = 0;
enemyarr = [];
myboomnum = 1;
myboomtime = 0;
enemychangearr = [];
warningtime = 0;
warningchange = 0;
bossattacktime = 0;
bossattacknum = 1;
obj.bossbgy1 = -2420,
obj.bossbgy2 = -1640,
obj.bossbgy3 = -860,
obj.bg2boss = -262,
obj.bosstimeblur = true,
obj.bossattack = 0;
context.drawImage(starthead, 110, 200);
},