Cocos2d-x《雷电大战》(6) 智能敌机AI来袭–飞行路径算法设计与实现(上)

原创 2017年07月18日 11:03:58

好象掉了单例 算了与cocos2d-x也没关系 最后我加上消灭敌人算补偿?

有两种敌人会定期的循环出现,现个调试器实现

1 资源

var res = {
//...
  AIR3:'res/air3.png',
  AIR4:'res/air4.png',
//....
  };
2 HelloWorldScene.onEnter

var HelloWorldScene = cc.Scene.extend({
  onEnter:function () {

//....
    //敌人来了
    var  enemyLayer=new Enemy();
    this.addChild(enemyLayer,250);

//....

  }
});

3新的脚本资源project.json

    "jsList" : [
//..
        "src/enemy.js",
//..
    ]


4让我们实现敌人

var Enemy = cc.Layer.extend({
  flyEnemy:function(dt){
    var me=this;
    var newfly=function(sprite,p){
      var tag=this.enemyCount++;

      //加入到场景
      sprite.setPosition(p.x,p.y);
      sprite.setRotation(180);
      sprite.setScale(1.5);
      sprite.setTag(tag);

      this.addChild(sprite);

      //移动到底
      var speed=200;
      var height= sprite.getContentSize().height / 2;
      var duration= (p.y + height) / speed;
      var moveto=new cc.MoveTo(duration, cc.p(p.x,-height));
      sprite.dropMe=me.dropEnemy.bind(sprite);

      var dropMe=new cc.CallFunc(sprite.dropMe,sprite);
      sprite.runAction(new cc.Sequence([moveto,dropMe]));
    };
    var size=cc.winSize;
    var sprite=new cc.Sprite(this.air4SBN.getTexture());
    var spriteSize=sprite.getContentSize();
    newfly.call(me,sprite,cc.p(size.width/2,size.height-spriteSize.height));
    newfly.call(me,new cc.Sprite(this.air4SBN.getTexture()),cc.p(size.width/2-spriteSize.width * 2,size.height+spriteSize.height));
    newfly.call(me,new cc.Sprite(this.air4SBN.getTexture()),cc.p(size.width/2+spriteSize.width * 2,size.height+spriteSize.height));
  },
  dropEnemy:function(){
        var sp=this;
        var tag=sp.getTag();
        sp.removeFromParent();
        cc.log("remove enemy %d",tag);
  },
  newEnemy:function(dt){
    //加一架飞机
    var me=this;
    var enemy=new cc.Sprite(this.air3SBN.getTexture());
    var eid=me.enemyCount++;
    enemy.setRotation(90);
    var y=cc.winSize.height / 3 * 2;
    var x=cc.winSize.width / 2;
    enemy.setPosition(0, y);
    enemy.setScale(0.25);
    enemy.setTag(eid);
    me.addChild(enemy)

    //会动 p1:[250,300],p2:[180,150],p3[0,10]
    var bezierTo=new cc.BezierTo(3,[cc.p(x,y+100),cc.p(x,y / 2 -100),cc.p(0,y / 2)]);
    //会转
    var rotateBy=new cc.RotateBy(3,180);
    //同时
    var spawn=new cc.Spawn(bezierTo,rotateBy);
    //负责销毁自己
    enemy.dropMe=me.dropEnemy.bind(enemy);
    var dropMe=new cc.CallFunc(enemy.dropMe,enemy);

    var sequence=new cc.Sequence([ spawn,dropMe]);
    enemy.runAction(sequence);
  },
  ctor:function(){
    var me=this;
    me._super();

    me.enemyCount=1;
    me.air3SBN=new cc.SpriteBatchNode(res.AIR3);
    me.air3SBN.retain();
    me.air4SBN=new cc.SpriteBatchNode(res.AIR4);
    me.air4SBN.retain();
    //两种敌人
    me.schedule(me.newEnemy,0.5);
    me.schedule(me.flyEnemy,2);
    //ctor中两者都可以使用 onEnter中则只能使用后者了?
    //cc.director.getScheduler().schedule(me.newEnemy,me,0.5);
    return true;
  },

  onExit:function(){
    me.air3SBN.release();
    me.air4SBN.release();
  }

})



Cocos2d-x《雷电大战》(6) 智能敌机AI来袭--飞行路径算法设计与实现(下)

此文接上文Cocos2d-x《雷电大战》(6) 智能敌机AI来袭--飞行路径算法设计与实现(上) ,还是对游戏中的敌机路径进行一个设计和实现。这里笔者又实现了两种敌机路线。分别如下: (1)敌机朝着英...
  • Evankaka
  • Evankaka
  • 2015-05-01 18:03:37
  • 5356

Cocos2d-x《雷电大战》(6) 智能敌机AI来袭--飞行路径算法设计与实现(上)

本文要实现飞机类游戏中的一连串飞机的跟随出和和并行出出。而网上找了一些Cocos2dx开发的飞行类游戏,都只找到一些简单的智能敌机。基本上没什么AI,这样游戏玩起来就太没意思了。然后又去找敌机飞行路径...
  • Evankaka
  • Evankaka
  • 2015-04-17 23:48:50
  • 9826

Android 游戏雷电

  • 2012年10月09日 16:16
  • 291KB
  • 下载

[cocos2d-x] 打飞机子弹敌机碰撞检测

自己做了一个简单的打飞机游戏,比较粗糙,下面把子弹和敌人的产生,移动,碰撞的代码拿出来给大家参考参考...
  • u011784589
  • u011784589
  • 2013-10-17 10:58:21
  • 2831

智能寻路贪吃蛇 AI

  • 2014年02月04日 10:56
  • 1.78MB
  • 下载

人工智能--打飞机游戏

代码下载:Here。很久以前微信流行过一个小游戏:打飞机,这个游戏简单又无聊。在2017年来临之际,我就实现一个超级弱智的人工智能(AI),这货可以躲避从屏幕上方飞来的飞机。本帖只使用纯Python实...
  • wang2425559
  • wang2425559
  • 2017-12-09 17:10:16
  • 746

Cocos2d-x游戏《雷电大战》开源啦!要源码要资源快快来~~

写在前面的话:这是笔者开发的第二个小游戏《雷电大战》,之前就过这个游戏和《赵云要格斗》一样,最终将会开源。由于自己的一些个人原因。这个游戏还没有完成,但是许多网友都过来寻求代码或资源,本着开源的精神,...
  • Evankaka
  • Evankaka
  • 2016-01-23 13:42:25
  • 5894

Cocos2d-x《雷电大战》(3)-子弹无限发射

本文要实现雷电游戏中,游戏一开始,英雄飞机就无限发射子弹的功能。这里的思想是单独给子弹弄一个层,在这个层不设置一个定时器,每隔一个时间,根据当前英雄飞机传入的位置,生成子弹,并设置子弹的移动事件,和移...
  • Evankaka
  • Evankaka
  • 2015-03-15 16:50:10
  • 6261

java 仿雷电射击小游戏 java GUI、java Graphics、多线程

  • 2013年11月26日 23:21
  • 2.81MB
  • 下载

Cocos2d-x《雷电大战》(1)-双层地图无限滚动

本文要实现飞机射击游戏中的地图无限滚动的功能,这里分为两个层,一个层无限向下滚动,一个层无限向上滚动,这样子结合起来效果就非常有层次感,也非常逼真,这里我把地图层都写成一个类,自己把地图改下,就可以成...
  • Evankaka
  • Evankaka
  • 2015-02-27 21:08:52
  • 7004
收藏助手
不良信息举报
您举报文章:Cocos2d-x《雷电大战》(6) 智能敌机AI来袭–飞行路径算法设计与实现(上)
举报原因:
原因补充:

(最多只允许输入30个字)