从零开始,使用Cocos2d HTML5完成一个游戏——第三步:连环反应

欢迎来到课程的第三部分。在 第一部分        (译文) 中我像您展示了如何安装Cocos2D HTML5 还有让一些东西移动,在 第二部分     (译文) 中我增加了一些鼠标交互,现在是时候给圆环做一个应激反应,这也是本游戏的特色。

   同样的,我们只需要在circlechain.js中做一点改动,主要是在handleBullet 函数中控制子弹的移动和碰撞的地方。


    
  1. var circlechain = cc.Scene.extend({
  2. onEnter:function(){
  3. this._super();
  4. var layer = new circleChainGame();
  5. layer.init();
  6. this.addChild(layer);
  7. }
  8. })
  9. var redCircle;
  10. var gameLayer;
  11. var bulletSpeed=5;
  12. var greenCircleArray=new Array();
  13. var circleChainGame = cc.Layer.extend({
  14. init:function(){
  15. this._super();
  16. this.setMouseEnabled(true);
  17. var circleSpeed = 2;
  18. var s = cc.Director.getInstance().getWinSize();
  19. gameLayer = cc.LayerColor.create(new cc.Color4B(0, 0, 0, 255), 500, 500)
  20. for(i=0;i<10;i++){
  21. var greenCircle = cc.Sprite.create("greencircle.png");
  22. greenCircleArray.push(greenCircle);
  23. var randomDir = Math.random()*2*Math.PI;
  24. greenCircle.xSpeed=circleSpeed*Math.cos(randomDir);
  25. greenCircle.ySpeed=circleSpeed*Math.sin(randomDir);
  26. gameLayer.addChild(greenCircle);
  27. greenCircle.setPosition(new cc.Point(Math.random()*500,Math.random()*500));
  28. greenCircle.schedule(function(){
  29. this.setPosition(new cc.Point(this.getPosition().x+this.xSpeed,this.getPosition().y+this.ySpeed));
  30. if(this.getPosition().x>500){
  31. this.setPosition(new cc.Point(this.getPosition().x-500,this.getPosition().y));
  32. }
  33. if(this.getPosition().x<0){
  34. this.setPosition(new cc.Point(this.getPosition().x+500,this.getPosition().y));
  35. }
  36. if(this.getPosition().y>500){
  37. this.setPosition(new cc.Point(this.getPosition().x ,this.getPosition().y-500));
  38. }
  39. if(this.getPosition().y<0){
  40. this.setPosition(new cc.Point(this.getPosition().x ,this.getPosition().y+500));
  41. }
  42. })
  43. }
  44. redCircle=cc.Sprite.create("redcircle.png");
  45. gameLayer.addChild(redCircle);
  46. this.addChild(gameLayer);
  47. return true;
  48. },
  49. onMouseDown:function (event) {
  50. var location = event.getLocation();
  51. gameLayer.removeChild(redCircle);
  52. for(i=0;i<4;i++){
  53. var redBullet = cc.Sprite.create("redbullet.png");
  54. redBullet.xSpeed=bulletSpeed*Math.cos(i*Math.PI/2);
  55. redBullet.ySpeed=bulletSpeed*Math.sin(i*Math.PI/2);
  56. gameLayer.addChild(redBullet);
  57. redBullet.setPosition(location);
  58. redBullet.schedule(function(){
  59. handleBullet(this);
  60. })
  61. }
  62. },
  63. onMouseMoved:function(event){
  64. var location = event.getLocation();
  65. redCircle.setPosition(location);
  66. }
  67. })
  68. function handleBullet(bullet){
  69. bullet.setPosition(new cc.Point(bullet.getPosition().x+bullet.xSpeed,bullet.getPosition().y+bullet.ySpeed));
  70. if(bullet.getPosition().x>500 || bullet.getPosition().y>500 || bullet.getPosition().x<0 || bullet.getPosition().y<0){
  71. gameLayer.removeChild(bullet);
  72. }
  73. for(i=greenCircleArray.length-1;i>=0;i--){
  74. var distX=bullet.getPosition().x-greenCircleArray[i].getPosition().x;
  75. var distY=bullet.getPosition().y-greenCircleArray[i].getPosition().y;
  76. if(distX*distX+distY*distY<144){
  77. gameLayer.removeChild(bullet);
  78. for(j=0;j<4;j++){
  79. var greenBullet = cc.Sprite.create("greenbullet.png");
  80. greenBullet.xSpeed=bulletSpeed*Math.cos(j*Math.PI/2);
  81. greenBullet.ySpeed=bulletSpeed*Math.sin(j*Math.PI/2);
  82. gameLayer.addChild(greenBullet);
  83. greenBullet.setPosition(new cc.Point(greenCircleArray[i].getPosition().x,greenCircleArray[i].getPosition().y));
  84. greenBullet.schedule(function(){
  85. handleBullet(this);
  86. })
  87. }
  88. gameLayer.removeChild(greenCircleArray[i]);
  89. greenCircleArray.splice(i,1);
  90. }
  91. }
  92. }
复制代码

     下面是结果:   【演示在原网页中查看

   用鼠标移动红色圆环点击鼠标让圆环碰撞。


   此时引擎已经完整了,期待下一步的完整游戏。




原文链接:http://www.emanueleferonato.com/2013/05/28/from-zero-to-a-complete-game-with-cocos2d-html5-step-3-chain-reaction/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值