Flash游戏开发系列一:游戏中的敌人1

  对于目前的 Flash 来说,开发一些像模像样的游戏并不是什么奇怪的事情了。我这里所涉及到的内容和开发游戏有关,但是都是一些比较基本的知识。如果您是游戏开发方面的高手,那么完全可以忽略我这里所描述的内容。我的计划是要做一系列的教程,这是其中一个系列。

  游戏是一个交互作品,简单说,就是通过用户的行为,会对这个作品的进程产生一定的影响。说到游戏,总要提到难度,游戏的难度在于:当你想要达到某种目的的时候,你会发现它的实现多少有些困难,困难越难克服,难度也就越大。不同类型的游戏有不同的难度,以及不同的实现方法。比如:俄罗斯方块通过改变方块下落的速度来改变游戏的难度,空战射击游戏通过不同的敌机以及不同的 Boss 来实现不同的难度。

  在这个系列里面,我们想和大家一起研究一下游戏中敌人的运动方式,一点一点来。AS 基础最好是有一些,不然会稍微有些头疼。

  一、最直接的跟踪

  首先看看这个例子:

  假定红色圆圈是玩家,绿色圆圈是敌人,移动你的鼠标,敌人就会跟着你跑。

  这就是最简单的跟踪敌人,它的原理是:

如果(玩家x坐标 <> 敌人x坐标){    调整敌人x坐标,趋近玩家x坐标}如果(玩家y坐标 <> 敌人y坐标){    调整敌人y坐标,趋近玩家y坐标}

  这应该是极其容易理解的。那么具体的代码实现应该是什么样子的呢?

  我们先把两个不同的 MovieClip 放置在舞台上,一个实例名叫做 player,另外一个叫做 enemy。

  为了方便,我们仅仅通过鼠标来实现玩家的移动,于是代码就很简单了:

player._x = _xmouse-10;player._y = _ymouse-10;updateAfterEvent();

  玩家可以移动了,下面来解决坐标调整的问题。

  看上面的图片,不管玩家和敌人处于什么位置,只要不重合,两个角色之间总是具有一定距离的,我们用 dx 和 dy 来代表 x 方向和 y 方向的差值。根据 dx 和 dy,基于敌人靠近玩家的概念,我们就可以得出敌人应该前进的方向。

  敌人应该具有一定的速度,根据这个速度向玩家靠近。所以我们可以先定义一个变量来代表敌人的速度:enemySpeed。

  根据分析,我们可以得出下面的计算公式:

dx = player._x-enemy._x;dy = player._y-enemy._y;if (Math.abs(dx)>=enemySpeed) {enemy._x += ((dx>=0) ? enemySpeed : -enemySpeed);}if (Math.abs(dy)>=enemySpeed) {enemy._y += ((dy>=0) ? enemySpeed : -enemySpeed);}

  观察到,我们用了一个 Math.abs(dx)>=enemySpeed 来限制敌人运动,其实也可以不限制,但是那样在敌人速度比较高的时候,就会发生抖动现象。因为这种情况下,敌人的坐标和玩家坐标之间差值小,敌人可能会在逼近过程中不断摇摆。大家可以去掉限制尝试一下。

  对于 AS 不太熟悉的,我来解释一下这句: enemy._x += ((dx>=0) ? enemySpeed : -enemySpeed),其实是相当于下面这句:

if (dx >= 0){enemy._x = enemy._x + enemySpeed;} else {enemy._x = enemy._x - enemySpeed;}

  这是用来判断敌人的运动方向的,根据 dx dy 的正负情况,来决定向哪个方向运动。

  好,到此为止,我想已经都解释清楚了,下面是完整的第一帧源代码:

var enemySpeed:Number = 2;var dx, dy:Number;/* functions */

tracker = function () {player._x = _xmouse-10;player._y = _ymouse-10;dx = player._x-enemy._x;dy = player._y-enemy._y;if (Math.abs(dx)>=enemySpeed) {enemy._x += ((dx>=0) ? enemySpeed : -enemySpeed);}if (Math.abs(dy)>=enemySpeed) {enemy._y += ((dy>=0) ? enemySpeed : -enemySpeed);}updateAfterEvent();};/* run it*/setInterval(tracker, 10);

  针对 AS 新手:程序先定义了变量,确定了敌人的运动速度,这个是可以更改的,函数 tracker 则主要用来处理玩家移动以及敌人移动。 updateAfterEvent 是为了保证流畅度设定的,没有也可以。

  如果不触发 tracker 函数,那么这个程序是不会跑起来的,所以,我们使用了 setInterval,每隔 10 毫秒触发一次 tracker 函数,这样,程序就正常运行了。

  这一次的介绍就到这里了,很简单是不是?下一次我们要给目前的这个敌人增加一些小功能,或者说,限制一下它。

  这次的源代码请在这里下载。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索player
, 坐标
不同
,以便于您获取更多的相关知识。

时间: 2016-07-08
Tags: 不同, player, 坐标

Flash游戏开发系列一:游戏中的敌人1的相关文章

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

第六篇:Flash游戏开发系列一:游戏中的敌人. 五.跟踪导弹(续完) 上次我们已经知道怎样让导弹的旋转看起来像那么回事,紧接着就是让导弹运动起来了. 导弹的一些属性,我们需要好好定义一下,这是完整的初始化函数: init = function () {enemy._x = 40;enemy._y = 350;enemy._rotation = 0;enemy_obj.MAXAngle = 6;enemy_obj.MAXSpeed = 4;enemy_obj.speedX = enemy_obj

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

第五篇:Flash游戏开发系列一:游戏中的敌人. 五.跟踪导弹(续) 前面讲过了如何让导弹朝向玩家,但是真正在应用的时候,不可能这么生硬的体现.大家可能也发现了,导弹的方向一直指向玩家,其实很不真实,那么如何才能更加真实一些呢.常用的方法有几种,我们这里介绍其中一种,其它的大家可能要去参考游戏开发图书了. 在这里,我们使用的方法是,导弹有一个最大转向角度,也就是说,如果转向达到这个角度,就不能再转了,这样,看起来就会真实一些,导弹也就不回一下子面对玩家,看看下面这个例子,我把导弹的最大转向角度设

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

第四篇:Flash游戏开发系列一:游戏中的敌人. 五.跟踪导弹 看看这个例子,在动画屏幕上按下鼠标,导弹就会跟踪玩家,直到击中玩家: 对于新手来说,一下子就实现它可能不太容易,我们来一点一点的做. (1)导弹的方向 我们先来实现导弹朝向玩家的功能,就像下面这个:(按下鼠标观看) 首先,我们注意到,敌人的导弹是要朝向玩家的,这和前面不同.前面的敌人是一个圆头圆脑的家伙,不用分辨它的方向.我们就先来看一下如何让敌人有方向感. 首先给新手讲解一下基本知识:用鼠标来触发动画. 我们先设定一个变量,布尔类

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

第三篇:Flash游戏开发系列一:游戏中的敌人. 四(插).半随机移动的敌人 看看这个例子: 我们可以看到,一个敌人按照一定的规律从上面到下面移动.主要的规律是自上而下,但是移动的范围是随机的.这种方法在早期的游戏里面经常使用,包括一些大型的游戏.其实这是一种非常简单的运动方式,但是如果使用得当,也很有威胁. 我们大概瞧一下原理: 敌人每次向一个方向以随机的速度走八步,然后再改变方向,再走八步.在这个例子里面,为了简单说明,敌人走到画面底部以后,我们会让它重新回到原来的位置,重新再走. 我们创建

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

第二篇:Flash游戏开发系列一:游戏中的敌人. 三.指定范围内的跟踪深化 再看看这个例子: 现在的敌人的视线范围比较真实了,它一直在四周查看,只有当你进入它的视觉范围的时候,敌人才会来追赶你. 这就是有指定范围的跟踪敌人,它的原理是和前面一样的: 如果(玩家进入敌人范围){ 如果(玩家x坐标 <> 敌人x坐标){调整敌人x坐标,趋近玩家x坐标}如果(玩家y坐标 <> 敌人y坐标){调整敌人y坐标,趋近玩家y坐标}} 我们可以在 enemy 里面放置一个扇形的范围,给一个实例名叫做

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

第一篇:Flash游戏开发系列一:游戏中的敌人 上一次,我们已经学习了最基本的敌人跟踪方法,这次,我们来限制一下敌人. 二.指定范围内的跟踪 首先看看这个例子: 现在的敌人周围有了一个范围,那么,只有当你进入这个范围的时候,敌人才会来追赶你. 这就是有指定范围的跟踪敌人,它的原理是: 如果(玩家进入敌人范围){  如果(玩家x坐标 <> 敌人x坐标){      调整敌人x坐标,趋近玩家x坐标  }  如果(玩家y坐标 <> 敌人y坐标){      调整敌人y坐标,趋近玩家y坐标

安卓开发-安卓手机游戏开发用什么游戏引擎

问题描述 安卓手机游戏开发用什么游戏引擎 想学安卓游戏开发,想问问现在安卓开发用什么游戏引擎,大型的预习也是java代码吗??还有网游呢???untiy3d只能是c#吗???cocos2d呢??真心求知道谢谢....没有开发过游戏,请调教 我现在在java web公司上班 没怎么解除新鲜的实物 请大家帮忙 想做一个小型的角色扮演类网游,学习一下.看点什么资料好呢 解决方案 cocos2d是最流行的 解决方案二: 开发Android游戏的引擎有很多,比如 cocos2d.AndEngine.Uni

android-Android游戏开发, Android小游戏

问题描述 Android游戏开发, Android小游戏 有没有android弹珠游戏的源代码,eclipse环境下的android源代码 解决方案 http://download.csdn.net/detail/zhoujiao_2010/2426306 这里就有,自己下吧

手机游戏开发成为安卓应用中的重中之重

目前,对于现在的中国大陆智能手机操作系统市场来说,占大部分份额的还是安卓系统.塞班系统还有ios系统三大手机系统.当然还有一部分智能手机是使用的别的系统的,例如黑莓公司使用的就是其公司本身研发的系统黑莓系统.但不得不承认,在这么多系统中安卓系统了是风头最劲的一个.不管是安卓系统的制造商还是软件开发者都具有永不松懈的创新创新精神,而且安卓系统对于"未来适用于各类链接性设备"的定位也使更多的开发商加入其中!不难预测,安卓未来的前景非常广阔. 随着HTC.MOTO.联想,中兴.华为.三星等手

【ANDROID游戏开发之八】游戏中添加音频-详解MEDIAPLAYER与SOUNDPOO!并讲解两者的区别和游戏中的用途!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/312.html  ----------------------- 『很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九篇Himi专门写了关于这些错误的原因和解决方法,这里我在博客都补充说明下,省的童鞋们总疑惑这一块:请点击下面联系进入阅读