Flash教程:通过实例学习AS(二)——小狗追骨头 (1)

2016-03-18 19:31 65 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是Flash教程:通过实例学习AS(二)——小狗追骨头 (1),一起来学习了解下吧!

【 tulaoshi.com - FLASH 】

本文由 sanbos 原创,转载请保留此信息!

先看看效果(用鼠标去拖动骨头看效果)

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

[1] 200806/12927_2.html'>[2] 200806/12927_3.html'>[3] 200806/12927_2.html'>下一页

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

  这其实就是一个鼠标跟随效果,大家都会做的,不过我的的目的不是做一个效果,而是学习AS,所以还是先介绍一下本例所要用到的AS知识。算了,这一例我们边做练习边来介绍AS。

  小狗追骨头,那先来画一只小狗,新建一图形元件,取名狗身,象不好听样哈,那随你高兴罗。用直线工具画出狗身,如图:

用黄色填充。

  新建图形元件,取名狗前腿,画图如:

 然后是新建图形元件,取名狗后腿,如图:

下面,新建影片剪辑元件,取名小狗,也可以叫“娜娜”,建三个图层1、2、3层分别取名为正面腿、身子、背面腿,将图形元件狗身,拖入第2层,居中放好。然后将前腿 、后腿图形元件拖入第1层,再将前腿、后腿拖入第3层。第帧按下图摆好:

在第1、3层插入关键帧,在第2层第3帧插入帧,将第3帧按下图摆好:

然后在各层第6帧插入帧。这样一只跑动的小狗就做好了。接下来做一根骨头:

新建一影片剪辑,取名骨头,然后画一根骨头吧。如图:

好了,准备工作做完了,我们现在开始组装,简单得很,回到主场景,将小狗和骨头拖到场景中就行了。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

200806/12927.html'>上一页  200806/12927.html'>[1] [2] 200806/12927_3.html'>[3] 200806/12927_3.html'>下一页

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

首先我们点小狗,打开属性面板,为小狗实例取名为:xg,然后点中骨头为骨头实例取名为:ggt,ggt是什么意思?笨,狗骨头啊,为什么叫狗骨头?而不直接叫骨头,这是狗的骨头麻,所以就叫狗骨头。其实不是这样的,如果取名叫骨头,那么拼音就是gt,你取来试试,一定会出错的,取个名也会出错?是的,下面我们就介绍本例的第一个AS知识:

AS中对象的命名

 在AS 中我们给变量,对象取名字的时候,要遵循一定规则,比如必须是下划线或英文字母开头等,另外AS固有的关键字是不能使用的。有些字是AS拥有商标权的,注册了的,所以你就不能用,不然法庭上见。比如_x,_y,this,if,stop,play........等等,还有很多,我们编写AS时可以看到这些关键字都以蓝色显示。这里顺便介绍一个技巧,当你的代码运行时出现错误,而你又不知道出在什么地方时,你可以看看,如果代码中的关键字不是蓝色,那么你肯定输错了。你可以取这些关键字之外的任何名字:ABCD,阿猫阿狗,清风飘飘都行。很不幸的是,我们刚刚想用的“gt"就是AS的关键字,在早期的flash中它是大于符号,现在多用“"取代了它。

接下来,我们来介一个十分重要的概念:

事件

在所有的面向对象的编程语言中,事件是最重要的概念。在AS中也是如此,因为我们所有的代码都要通过事件来驱动,它才执行。总会有一些事情发生,我们的命令才会执行。这些发生的事情我们就将之称为事件。实际上它的意思就是,当什么什么的时候,就做什么什么。举个例子来说,我们要让灯亮,就一定要先发生一件事情,按下开关。当按下开关的时候,灯就亮了。那么按下开关就是一个事件。我们在AS中也有很多事件,如点击元件时,鼠标移动时等。那么怎样写事件代码呢?这里要注意在 AS3中和AS2事件代码是不一样的,因为多数人都还在用AS2,所以我们只介绍AS2中怎样写,至于AS3中怎样写,可以参考我在论坛中发表的“初识 AS3.0”一帖。

在AS2中,代码可以写在元件上如影片剪辑或按钮中,也可以写在帧动作中,事件的代码写在这两个地方是不一样的,先看看在帧动作中写代码,格式:

事件名称 = function (){


要执行的语句;

}

如果要写在元件中,就应该这样写:

on (事件名称) {

    要执行的语句;

}

下面我们介绍本例中要用到的三个事件,进一步地了解事件。

onMouseMove事件

  onMouseMove事件是在当鼠标移动时发生,当我们场景中移动鼠标时,就会触发本事件。这个事件只能用到帧动作中。看个例子:大家可以将下面的代码,复制到第一帧看看。

    onMouseMove = function () {


trace(“鼠标移动了“);//trace是输出括号中的内容。

      }

  好,我们测试影片,移动鼠标就会弹出一个消息框,上面有“鼠标移动了”几个字。

press事件

 这个事件是当按下鼠标键,还没放开的时候发生。这个事件用到元件上,如果要用到帧上,就要用,onPress.看个例子,我们在场景中放上一个影片剪辑,然后点中它,单击右键,打开动作面板,就可以写代码了:

   on(press) {


trace(“你点下了鼠标”);


}

如果要把代码放到帧动作中,这样写(假如影片剪辑的实例名是mc)


mc.onPress = function () {


trace(“你点下了鼠标”);


}

release事件

  这个事件是当按下鼠标键,然后放开的时候发生。与press区别是,press是按下没放开时,而release是放开时发生的。同样release是写在原件上的,要写在帧动作上,请用onRelease,用法与press相同。

现在我们来分析一下,要让小狗去追骨头,实际就是让小狗和骨头的距离缩小就行。元件在场景中的位置是同其_x,_y属性决定的,只要缩小两个元件的_x,_y属性差距,两个元件就靠近了。所以我们先算出两元件_x,_y的差距:

  var dx,dy:Number;


dx =( ggt._x – xg._x)/20;


dy = (ggt._y – xg._y)/20;

为什么要除以20呢?因为我要的效果是小狗去追骨头,而不是一步就追上,所以我们给它除以20,就是说要追20步才能追上,所以这个除20实际就是控制小狗追骨头的速度的,除的数字赿大tuLaoShi.com,速度就赿慢。下面的代码是让小狗去追骨头:

  xg._x += dx;


xg._y += dy;

+=符号在上一次的实例中我们已经介绍了,这两句就好理解了。那么什么时候去追骨头呢?上面我们说了,这些命令都是要在一个事件发生时才能执行的。我们把它们放在鼠标移动时去执行。就是说当我们在场景中移动鼠标时,小狗就去追骨头。即然是追骨头,那么骨头就应该动才是,怎样动呢?当然是用鼠标去拖动,请看下面两个语句:

startDrag()

这个语句的意思是拖动,使用这句后元件将随着鼠标的移动而移动。如:

 mc.statDrag();

这时移动鼠标时就会将mc拖动走。

stopDrag()

停止拖动的意思,如:

 mc.stopDrag();

这时移动鼠标,mc不再被拖动了。

通过上面的知识,我们似乎已解决了,小狗追骨头的问题,当鼠标移动时,将拖动骨头,而这时,小狗也会以去追骨头了,不过有个问题,小狗的移动是_x,_y的增减,而小狗的方向是不会改变的,这就有可以出现,小狗用背或肚皮去追骨头,甚至会倒退着去追骨头,这不符合常理,我们应该想办法让小狗的头始终对着骨头,这就要求要改变小狗的方向,这时我们就会用到下面的属性:

_rotation属性


这个属性可设置对象的旋转度,如:

mc._rotation = 45;

这时mc会旋转45度。

那么怎样才能让小狗的头随着骨头旋转呢?我们来看一个图:

从图上看,小狗和骨头间形成了一个角,很显然,我们保持这个角度,就能保持小狗的方向。在保持这个角度,我首先来认识一个函数。

atan2()

在上一个实例练习中,我们说到了Math这个顶级类,它里面包含了很多数学相关的东西。atan2就是其中的一个。atan2()可以返回一个点与x轴的夹角。语法是这样的:

Math.atan2(y,x)请注意,这里点的坐标是y在前,x在后,跟一般的相反。这样我们就可以算出小狗和骨头跟x轴的夹角:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

  如小狗的夹角:Math.atan2(xg._y,xg._x)

如果让小狗旋转与骨头和小狗跟X轴的夹角差,小狗不就对着骨头了吗?象这样写:

 xg._rotation = Math.atan2(dy,dx)

行吗,管它的,试试看,结果不行。

对了,atan2()得出的度数是弧度,我们要让小狗旋转的是角度,问题是不是出在这呢?

角度与弧度的转换

在AS中计算常常是用弧度,而我们直观操作又常常用到角度,因此,就会常常用用到角度现弧度转换的问题。这个不想说太多,记住下面两个公式就行了。

  角度 = 弧度 * 180/Math.PI


弧度 = 角度 * Math.PI/180

我们将 xg._rotation = Math.atan2(dy,dx) 转换成角度就成为:

  

     xg._rotation = Math.atan2(dy,dx) * 180/Math.PI;

再试一下,没想到成功了。


好了,看起来本例中的所有问题都解决了,下面我们写代码。在上面,我们已经将小狗和骨头放到场景中,并分别将实例命名为xg,ggt,现在新建一层,命名为action,在第一帧的动作面板中写上如下代码:

var dx,dy:Number ;

var dz;

onMouseMove = function () {

 

dx = (ggt._x - xg._x)/20;

dy = (ggt._y - xg._y)/20;

dz = Math.atan2(dy,dx)*180/Math.PI;

xg._x += dx;

xg._y += dy;

xg._rotation = dz;

}

上面的代码不需要解释了吧。然后,点击骨头,打开动作面板,写下如下代码:

on(press) {


this.startDrag();

}

on(release) {


stopDrag();

}

ok,大功告成,把你的佳作帖在后面吧。

与本文相关讨论请到这里与作者交流:http://bbs./viewthread.php?tid=164833

200806/12927_2.html'>上一页  200806/12927.html'>[1] 200806/12927_2.html'>[2] [3] 

来源:https://www.tulaoshi.com/n/20160318/1895333.html

延伸阅读
标签: Web开发
本教程一共三个例子:1、设置背景颜色;2、设置文本的背景颜色;3、将图像设置为背景。 参考网页教学网关于CSS背景的理论知识:CSS教程(1):学习CSS背景相关知识 1、设置背景颜色 本例演示如何为元素设置背景颜色。 html head style type="text/css" body {background-color: yellow} h1 {background-color: #00ff00} h2 {backg...
标签: Web开发
本教程介绍:1.如何仅显示一次背景图像,2.如何放置背景图像,3.如何使用%来定位背景图像。 参考网页教学网关于CSS背景的理论知识:。 1、如何仅显示一次背景图像 本例演示如何仅显示一次背景图像。 html head style type="text/css" body { background-image: url('/i/eg_bg_03.gif'); background-repeat: no-repeat } /style /...
标签: Web开发
本教程一共三个例子:1、如何重复背景图像;2、如何在垂直方向重复背景图像;3、如何在水平方向重复背景图像。 参考网页教学网关于CSS背景的理论知识:。 1、如何重复背景图像 本例演示如何重复背景图像。 html head style type="text/css" body { background-image: url(/i/eg_bg_03.gif); background-repeat: repeat } /style...
本例为Flash AS3.0菜鸟学飞系列教程,在上一讲中我们学习了含有多个类的AS3类文件的写法,在这一讲中我们来学习帧循环的运用,希望能给初学Flash AS编程的朋友带来帮助~~ 学习AS3菜鸟起飞吧之帧循环 多帧循环 Flash中的帧在默认情况下是循环执行的,租用gotoAndPlay()函数可以实现简单的帧循环,而实现代码的重复执行。 gotoAndPlay()...
标签: flash教程
如今使用来制作MTV已经不是什么新鲜事了。不过,还是有必要提醒一句,其实Flash制作出的MTV并不是真正意义上的MTV。因为MTV是音乐电视的缩写,所以,Flash制作出的音乐视频,应该称之为MV,也就是Music Video的缩写。 有很多朋友喜欢在FreeHand中绘制图像,在SoundForge中制作音乐,然后在Flash MX中仅仅安排时间轴和组件,这其实...

经验教程

306

收藏

20
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部