| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > Flash游戏制作 > 文章正文 用户登录
为你新浪博客添加
如何开发网站市场
网站运营与开发的
网站运营与开发的
Flash Remoting -
如何开发基于ASP的
《Flash ActionSc
Flash V2组件开发
关于RPG类型游戏制
RIA 开发感想

游戏开发系列一:游戏中的敌人(5)           

游戏开发系列一:游戏中的敌人(5)

作者:佚名 来源:闪客帝国 作者: 边城浪子 更新:2007-1-13 20:43:16 错误报告 我要投稿

系列文章:

  游戏开发系列一:游戏中的敌人(1)
  游戏开发系列一:游戏中的敌人(2)
  游戏开发系列一:游戏中的敌人(3)
  游戏开发系列一:游戏中的敌人(4)

  讲过最简单的跟踪,我们来看一下复杂一些的跟踪,这里还是不去讨论障碍,因为那需要额外的数据支持。

  五、跟踪导弹

  看看这个例子,在动画屏幕上按下鼠标,导弹就会跟踪玩家,直到击中玩家:

  对于新手来说,一下子就实现它可能不太容易,我们来一点一点的做。

  (1)导弹的方向

  我们先来实现导弹朝向玩家的功能,就像下面这个:(按下鼠标观看)

  首先,我们注意到,敌人的导弹是要朝向玩家的,这和前面不同。前面的敌人是一个圆头圆脑的家伙,不用分辨它的方向。我们就先来看一下如何让敌人有方向感。

  首先给新手讲解一下基本知识:用鼠标来触发动画。

  我们先设定一个变量,布尔类型的 clickable。在初始化的时候,我们将其设置为真,即 true。

var clickable:Boolean;
init = function () {
 enemy._x = 40;
 enemy._y = 350;
 enemy._rotation = 0;
 clickable = true;
};

  而当鼠标按下的时候,我们来判断 clickable 是否为真,如果为真就可以执行新的语句,并且将 clickable 设置为假,即 false。这样,如果鼠标按下一次以后,再按就不起作用了。

onMouseDown = function () {
 if (clickable) {
  setInterval(run, 10);
  clickable = false;
 }
};

  这样我们就可以进入我们的主要内容了:改变导弹的角度。

  敌人到玩家之间一般情况下是会有一个夹角的。Flash 给我们提供了 Math.atan2(y,x) 来求得上图中所表示的 angle! 。所以我们很容易的就能够得到这个值 Math.atan2(dy, dx)*180/Math.PI,因为取到的是弧度,所以后面加了 *180/Math.PI 来转换成角度。

  得到 angle! 以后,我们会发现,我们的导弹在 enemy._rotation = 0 的时候,已经处在上图 90 度的位置上,在 enemy._rotation = 90 的时候,已经处在上图 -180(也是0) 度的位置上,在 enemy._rotation = 180 的时候,已经处在上图 -90 度的位置上。所以我们要做一下处理,给它减去 270 度,为了让这个角度很好的保持在 0 到 360 度之间,我们再给它加上 720 度然后针对 360 度取模,最后就变成这个样子:

(Math.atan2(dy, dx)*180/Math.PI+450)%360

  这样,我们计算之后得到的角度就可以直接应用到我们的 enemy 上面了。

  出于习惯,我把计算角度这部分做了一个函数,所以在主运行函数 run 里面,程序看起来很简单。

  剩下的不用多解释了,下面是完整的第一帧源代码:

var clickable:Boolean;
//
init = function () {
 enemy._x = 40;
 enemy._y = 350;
 enemy._rotation = 0;
 clickable = true;
};
onMouseMove = function () {
 player._x = _xmouse-10;
 player._y = _ymouse-10;
 updateAfterEvent();
};
onMouseDown = function () {
 if (clickable) {
  setInterval(run, 10);
  clickable = false;
 }
};
getAngle = function ():Number {
 var dx:Number = player._x-enemy._x;
 var dy:Number = player._y-enemy._y;
 return ((Math.atan2(dy, dx)*180/Math.PI+450)%360);
};
run = function () {
 var angle:Number = getAngle();
 enemy._rotation = angle;
};
// Run Program
init();

  这次的源代码请在这里下载附件(6K)。

  下一讲,给导弹规定一个最大角度,让它看起来更真实。

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。