1、多飞机多子弹碰撞

在实现多飞机与多子弹的碰撞过程中,有两个难点需要注意:
第一:如何存储多个飞机和多个子弹?
第二:多个飞机与多个子弹的碰撞判断如何实现?

第一:如何存储多个飞机和多个子弹?
如果程序需要同时存储多个数据的话,最好的解决办法就是数组。
所以,我们可以定义两个数组,分别存储多个飞机和多个子弹。

创建存储飞机的数组
飞机数组enemyList,用于存储创建的所有飞机。
多飞机、多子弹碰撞 - 图1
创建存储子弹的数组
子弹数组bulletList,用于存储创建的所有子弹。
多飞机、多子弹碰撞 - 图2

第二:多飞机与多子弹的碰撞判断如何实现?
多飞机与多子弹的碰撞,需要我们拿着每一个子弹与每一个飞机分别做碰撞判断。

原理如下:
多飞机、多子弹碰撞 - 图3

碰撞关键代码:
for(var i=0;ivar bullet = bulletList[i];
for(var j=0;jvar enemy = enemyList[i];
//碰撞判断相关代码
}
}

2.游戏暂停、继续

  1. var app = new PIXI.Application(400, 600);
  2. document.body.appendChild(app.view);
  3. var enemys = [];
  4. for(var i = 0; i < 8; i ++) {
  5. var enemy = PIXI.Sprite.fromImage("res/plane/enemy_04.png");
  6. app.stage.addChild(enemy);
  7. enemy.x = 70 * i;
  8. enemy.y = 100;
  9. enemy.anchor.set(0.5,0.5);
  10. enemys.push(enemy);
  11. }
  12. var plane = PIXI.Sprite.fromImage("res/plane/plane_blue_01.png");
  13. plane.anchor.set(0.5,0.5);
  14. plane.x = 200;
  15. plane.y = 500;
  16. app.stage.addChild(plane);
  17. app.stage.interactive=true;
  18. app.stage.on('mousemove', onMove);
  19. function onMove(event) {
  20. var pos=event.data.getLocalPosition(app.stage);
  21. plane.x = pos.x;
  22. plane.y = pos.y;
  23. }
  24. var isMove = true;
  25. var pause = new PIXI.Sprite.fromImage("res/plane/ui/ui_new_btn_png_03.png");
  26. pause.x = 340;
  27. pause.y = 10;
  28. app.stage.addChild(pause);
  29. pause.interactive = true;
  30. pause.on("click",function(){
  31. pause.visible = false;
  32. goOn.visible = true;
  33. isMove = false;
  34. });
  35. var goOn = new PIXI.Sprite.fromImage("res/plane/ui/ui_new_battle_png_03.png");
  36. goOn.x = 130;
  37. goOn.y = 250;
  38. goOn.visible = false;
  39. app.stage.addChild(goOn);
  40. goOn.interactive = true;
  41. goOn.on("click",function(){
  42. pause.visible = true;
  43. goOn.visible = false;
  44. isMove = true;
  45. });
  46. var bulletArr = [];
  47. var fireTime = 0;
  48. var fireSubTime = 5;
  49. function fire() {
  50. if(fireTime == 0) {
  51. var bullet = PIXI.Sprite.fromImage("res/plane/bullet_01.png");
  52. app.stage.addChild(bullet);
  53. bullet.y = plane.y;
  54. bullet.x = plane.x;
  55. bullet.anchor.set(0.5,0.5);
  56. bulletArr.push(bullet);
  57. fireTime = fireSubTime;
  58. }
  59. fireTime --;
  60. }
  61. app.ticker.add(animate);
  62. function animate() {
  63. if(isMove){
  64. fire();
  65. enemyMove();
  66. bulletMove();
  67. bulletCrash();
  68. }
  69. }
  70. function enemyMove() {
  71. for(var i = 0; i < enemys.length; i ++) {
  72. var enemy = enemys[i];
  73. enemy.y += 4;
  74. if(enemy.y > 800) {
  75. enemy.y = -100;
  76. }
  77. }
  78. }
  79. function bulletMove() {
  80. for(var i = 0; i < bulletArr.length; i ++) {
  81. var bullet = bulletArr[i];
  82. bullet.y -= 30;
  83. }
  84. }
  85. function bulletCrash(){
  86. for(var j = 0; j < bulletArr.length; j ++) {
  87. var bullet = bulletArr[j];
  88. for(var i = 0; i < enemys.length; i ++) {
  89. var enemy = enemys[i];
  90. var pos = (bullet.x - enemy.x) * (bullet.x - enemy.x) + (bullet.y - enemy.y) * (bullet.y - enemy.y);
  91. if(pos < 60 * 60) {//碰撞
  92. enemy.y = -100;
  93. }
  94. }
  95. }
  96. }

代码讲解

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