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变量值,用于实现游戏暂停、继续游戏的效果
