1、多飞机多子弹碰撞
在实现多飞机与多子弹的碰撞过程中,有两个难点需要注意:
第一:如何存储多个飞机和多个子弹?
第二:多个飞机与多个子弹的碰撞判断如何实现?
第一:如何存储多个飞机和多个子弹?
如果程序需要同时存储多个数据的话,最好的解决办法就是数组。
所以,我们可以定义两个数组,分别存储多个飞机和多个子弹。
创建存储飞机的数组
飞机数组enemyList,用于存储创建的所有飞机。
创建存储子弹的数组
子弹数组bulletList,用于存储创建的所有子弹。
第二:多飞机与多子弹的碰撞判断如何实现?
多飞机与多子弹的碰撞,需要我们拿着每一个子弹与每一个飞机分别做碰撞判断。
原理如下:
碰撞关键代码:
for(var i=0;i
for(var j=0;j
//碰撞判断相关代码
}
}
2.游戏暂停、继续
var app = new PIXI.Application(400, 600);
document.body.appendChild(app.view);
var enemys = [];
for(var i = 0; i < 8; i ++) {
var enemy = PIXI.Sprite.fromImage("res/plane/enemy_04.png");
app.stage.addChild(enemy);
enemy.x = 70 * i;
enemy.y = 100;
enemy.anchor.set(0.5,0.5);
enemys.push(enemy);
}
var plane = PIXI.Sprite.fromImage("res/plane/plane_blue_01.png");
plane.anchor.set(0.5,0.5);
plane.x = 200;
plane.y = 500;
app.stage.addChild(plane);
app.stage.interactive=true;
app.stage.on('mousemove', onMove);
function onMove(event) {
var pos=event.data.getLocalPosition(app.stage);
plane.x = pos.x;
plane.y = pos.y;
}
var isMove = true;
var pause = new PIXI.Sprite.fromImage("res/plane/ui/ui_new_btn_png_03.png");
pause.x = 340;
pause.y = 10;
app.stage.addChild(pause);
pause.interactive = true;
pause.on("click",function(){
pause.visible = false;
goOn.visible = true;
isMove = false;
});
var goOn = new PIXI.Sprite.fromImage("res/plane/ui/ui_new_battle_png_03.png");
goOn.x = 130;
goOn.y = 250;
goOn.visible = false;
app.stage.addChild(goOn);
goOn.interactive = true;
goOn.on("click",function(){
pause.visible = true;
goOn.visible = false;
isMove = true;
});
var bulletArr = [];
var fireTime = 0;
var fireSubTime = 5;
function fire() {
if(fireTime == 0) {
var bullet = PIXI.Sprite.fromImage("res/plane/bullet_01.png");
app.stage.addChild(bullet);
bullet.y = plane.y;
bullet.x = plane.x;
bullet.anchor.set(0.5,0.5);
bulletArr.push(bullet);
fireTime = fireSubTime;
}
fireTime --;
}
app.ticker.add(animate);
function animate() {
if(isMove){
fire();
enemyMove();
bulletMove();
bulletCrash();
}
}
function enemyMove() {
for(var i = 0; i < enemys.length; i ++) {
var enemy = enemys[i];
enemy.y += 4;
if(enemy.y > 800) {
enemy.y = -100;
}
}
}
function bulletMove() {
for(var i = 0; i < bulletArr.length; i ++) {
var bullet = bulletArr[i];
bullet.y -= 30;
}
}
function bulletCrash(){
for(var j = 0; j < bulletArr.length; j ++) {
var bullet = bulletArr[j];
for(var i = 0; i < enemys.length; i ++) {
var enemy = enemys[i];
var pos = (bullet.x - enemy.x) * (bullet.x - enemy.x) + (bullet.y - enemy.y) * (bullet.y - enemy.y);
if(pos < 60 * 60) {//碰撞
enemy.y = -100;
}
}
}
}
代码讲解
1、创建暂停按扭图片
var pause = new PIXI.Sprite.fromImage(“res/plane/ui/ui_new_btn_png_03.png”);
pause.x = 340;
pause.y = 10;
app.stage.addChild(pause);
2、创建继续的按扭图片
var goOn = new PIXI.Sprite.fromImage(“res/plane/ui/ui_new_battle_png_03.png”); goOn.x = 130;
goOn.y = 250;
goOn.visible = false;
app.stage.addChild(goOn);
创建继续的按扭图片,并将该图片默认隐藏
3、定义isMove变量
var isMove = true;
定义isMove变量,当isMove=false时游戏暂停,当isMove=true时游戏继续
4、给暂停按扭pause添加click事件
pause.interactive = true;
pause.on(“click”,function(){
pause.visible = false;
goOn.visible = true;
isMove = false;
});
给暂停按扭pause,添加click事件,将isMove变量值改为false,用于暂停游戏
5、给继续游戏按扭goOn添加click事件
goOn.interactive = true;
goOn.on(“click”,function(){
pause.visible = true;
goOn.visible = false;
isMove = true;
});
给继续游戏按扭goOn添加click事件,将isMove变量值改为true,用于继续游戏
6、添加帧频函数
app.ticker.add(animate); <br />function animate() { <br />if(isMove){ <br />fire(); <br />enemyMove(); <br />bulletMove(); <br />bulletCrash(); <br />} <br />} <br />在帧频函数中,通过if来判断isMove变量值,用于实现游戏暂停、继续游戏的效果