首页 >> 动画知识 >> flash游戏

Animation knowledge

flash游戏

FLASH游戏里导弹追踪的一些简单算法

大字小字2014年9月28日

  Flash游戏以目前的形式,使用范围广阔。Flash游戏中的导弹追踪算法,更快的掌握Flash游戏中的技巧,关于势函数用到追踪和拦截的算法,利用代码来识别:

  代码如下:

  var stepAngle:Number = 3;

  //角度最大增量

  var tempNum:Number = 0;

  var radius:Number = 100;

  //导弹飞行半径

  var M_speed:Number = 3;

  //导弹速度(非常量)

  var P_speed:Number = 5;

  //飞机速度

  findToHit(missile, target);

  function findToHit(missile, target) {

  missile.onEnterFrame = function() {

  _root.AngText = stepAngle;

  if (missile.hitTest(target.hit)) {

  target.play();

  missile._visible = false;

  delete missile.onEnterFrame;

  }

  //---------------击中目标

  tempNum++;

  if (tempNum == 15) {

  if (stepAngle == 2) {

  if (Math.abs(target._x-missile._x)>radius*2 || Math.abs(target._y-missile._y)>radius*2) {

  stepAngle = 3;

  }

  } else if ((Math.abs(target._x-missile._x)<30 || Math.abs(target._y-missile._y)<30)) {

  stepAngle = 2;

  }

  tempNum = 0;

  }

  //---------------------改变角度增量-------------------------

  P = new Object();

  P.x = missile.way._x;

  P.y = missile.way._y;

  missile.localToGlobal(P);

  dx = P.x-missile._x;

  dy = P.y-missile._y;

  dx1 = target._x-P.x;

  dy1 = target._y-P.y;

  //----------------------取得向量--------------------------

  angle = Math.atan2(dy1, dx1)*180/Math.PI;

  //-----------------------取得角度------------------------

  angle = angle<=0 ? Math.abs(360+angle) : angle;

  M_angle = missile._rotation<0 ? 360+missile._rotation : missile._rotation;

  if (Math.abs(M_angle-angle)>stepAngle) {

  if (angle-M_angle>180) {

  M_angle += -stepAngle;

  } else {

  M_angle += angle< : -stepAngle ? (M_angle-angle<180) &&>

  }

  missile._rotation = M_angle;

  }

  //---------------------改变导弹角度-----------------------

  missile._x += dx*M_speed/10;

  missile._y += dy*M_speed/10;

  //-----------------------导弹移动---------------------

  };

  }

  //-----------------------------追踪---------------------

  listen = new Object();

  listen.onKeyDown = function() {

  onEnterFrame = function () {

  if (Key.isDown(Key.RIGHT)) {

  target._x += P_speed;

  } else if (Key.isDown(Key.LEFT)) {

  target._x -= P_speed;

  } else if (Key.isDown(Key.UP)) {

  target._y -= P_speed;

  } else if (Key.isDown(Key.DOWN)) {

  target._y += P_speed;

  }

  };

  };

  Key.addListener(listen);

  //----------------------------键盘控制--------------------------

分享打印返回


动画知识Animation knowledge

广州形动动画设计有限公司

电话:020-87612322

传真:020-87615976

手机:13570023373

Q Q: 853033818

邮箱:853033818@qq.com

地址:广州市越秀区达道路16号

最新动态

形动动画承接以下业务:flash制作、动漫制作、二维动画制作、2d动画设计,如有这方面的需要,请与我们联系:020-87612322!

Copyright © 2007-2014 广州形动动画设计有限公司  网站备案/许可证号:粤ICP备17050071号-1

业务咨询:020-87612322  招聘热线:020-87615976  地址:中国·广东省广州市越秀区东山街道寺右新马路108号丰伟大厦A座7楼