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来袭--飞行路径算法设计与实现(上)

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

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

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka        本文要实现飞机类游戏中的一连串飞机的跟随出和和并行出出。而网上找了一些Coco...
  • strongjava
  • strongjava
  • 2015年04月22日 07:22
  • 2272

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

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

边做游戏边学android—4(飞机大战③添加敌机和碰撞检测)

敌机的不会只有1个,而且也不会只有一种敌机。所以敌机也可以建一个继承与gameobject的父类。命名为EnemyPlane,代码如下:package com.example.object;impor...
  • oZuoDuanManBu
  • oZuoDuanManBu
  • 2015年05月16日 23:26
  • 1047

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

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

人工智能--打飞机游戏

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

基于cocos2dx的飞机大战学习[五]-添加三种敌机

这节完成了许多的功能: 1、添加小飞机、中等飞机、大飞机。 2、每种飞机的移动速度和血量不同。 3、飞机被子弹打击效果。 4、飞机被摧毁效果。cocos2d提供的Sprite类不足以提供以上功...
  • u012891055
  • u012891055
  • 2015年07月17日 20:02
  • 1014

unity学习之飞机大战制作 关键点(六) 子弹与敌机之间的碰撞

6.1,先给子弹和敌机添加collider 2D和rigidbody 2D ,做成碰撞和触发器 这里是2D游戏,不能让他们受到重力的影响,只能有物理的碰撞效果。把Box collider 2D组件的...
  • qq_39227270
  • qq_39227270
  • 2017年07月09日 17:59
  • 222

unity学习之飞机大战制作 关键点(四) 设置敌机和奖励物品的生成和随机

特别说明,因为敌机和奖励物品的代码方式差不多,我就放在一个代码里面写了。 3.1添加敌机以及敌机的移动 依旧是把图片拉到Hierarchy里面生成对象,添加代码,然后拖回scenes文件夹,就可以...
  • qq_39227270
  • qq_39227270
  • 2017年07月07日 10:21
  • 385

【cocos2d-x入门实战】微信飞机大战之八:自定义敌机精灵

cocos2d-x之微信打飞机实战演习,原滋原味的微信打飞机源码分享。
  • jackyvincefu
  • jackyvincefu
  • 2013年09月22日 11:38
  • 14879
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cocos2d-x《雷电大战》(6) 智能敌机AI来袭–飞行路径算法设计与实现(上)
举报原因:
原因补充:

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