佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2909|回复: 10

[教学]缓冲教程。。。

[复制链接]
发表于 16-12-2004 03:12 AM | 显示全部楼层 |阅读模式
既然有人想开始学AS的话,我就顺便来写一些简单且有用的教程吧

首先是从缓冲(Elasticity) 开始

作者:Super-Tomato

1。首先在场景上画一个圆形, 然后转换成Movieclip, 命名为 mc
2。在场景的第一个frame上使用这个代码:
mc._x = 100;
onEnterFrame = function() {
  mc._x += (500 - mc._x) * .1;
}

3。测试影片

你应该会看到圆形会从左边开始向右移动,之后慢慢地停下来。那么原因是什么呢?
主要的代码为 mc._x += (500 - mc._x) *.1;
为了方便大家理解, 我们就把这个代码一步步的分析一下吧

开始我们设定mc的_x为100, onEnterFrame会让代码不断的循环

那么接下来mc._x就会是

mc._x新位置 = mc._x + (500 - mc._x) * .1;
mc._x新位置 = 100 + (500 - 100) * .1;
mc._x新位置 = 100 + (400) * .1;
mc._x新位置 = 100 + 40;
mc._x新位置 = 140;  //第一次圆形移动到的位置


再次循环,把得到的mc._x再次代入:

mc._x新位置 = mc._x + (500 - mc._x) * .1;
mc._x新位置 = 140 + (500 - 140) * .1;
mc._x新位置 = 140 + (360) * .1;
mc._x新位置 = 140 + 36;
mc._x新位置 = 176;  //第二次圆形移动到的位置


那么接下来一直不停的循环, mc._x的值一直增加,而运算公式(500 - mc._x)就会越来越少,到最后移动的距离也会越来越近,直到肉眼看不出在移动,这就是缓冲的公式了



再来就在增加多一点东西,让这个圆形在限定范围内不断的进行缓冲移动, 公式:

mc._x = 100;
var ax = 0;
onEnterFrame = function () {
  ax += (200 - mc._x) * .1;
  mc._x += ax;
};


同样的我们只是略微修改了一点, 然后测试就会看到这样的效果
Flash: http://www.flash8.net/bbs/UploadFile/2004-5/20045955121179.swf

至于计算方面不用我在写出来了,不了解的朋友可以从上面的演算方法去了解。。。那么最后就给个应用的例子
Flash: http://www.flash8.net/bbs/UploadFile/2004-5/20045952815818.swf

在这里复制了多个mc, 然后让这些mc独立的进行缓冲, 代码如下:
onLoad = function() {
  num = 20; //设定星星的数量
  i = 1;
  while (num>=i) {
    duplicateMovieClip(a, "a"+i, i);
    b = eval("a"+i);
    b.rX = (random(5)+4)/1000; //设定星星移动x的速度
    b.rY = (random(5)+4)/1000; //设定星星移动y的速度
    b.xvel = b.yvel = 0;
    b._x = random(344)+100; //设定星星复制后的x坐标
    b._y = random(154)+100; //设定星星复制后的y坐标
    b.gotoAndPlay(random(10)+1); //设定星星到影片中的桢, 这样每个星星闪烁就会不一样
    i++;
  }
  a._visible = 0; //复制完毕就让场景上原来的星星消失
};

onEnterFrame = function() {
  i = 1;
  while (num>=i) {
    b = eval("a"+i);
    b.xvel += (250 - b._x) * b.rX; //从这里开始就和我上面那个例子相同了, 所以不多说
    b.yvel += (220 - b._y) * b.rY;
    b._x = b._x+b.xvel;
    b._y = b._y+b.yvel;
    i++;
  }
};


源文件 : Flash: http://www.flash8.net/bbs/viewFile.asp?Boardid=1&ID=118923

[ Last edited by hahabin on 17-12-2004 at 07:44 PM ]
回复

使用道具 举报


ADVERTISEMENT

发表于 16-12-2004 01:08 PM | 显示全部楼层
恩~就是要这样的教学
谢谢分享哦~
回复

使用道具 举报

发表于 17-12-2004 07:48 PM | 显示全部楼层
很好。加分哦。
回复

使用道具 举报

发表于 2-2-2005 05:25 PM | 显示全部楼层
为什么我的不会动的?
mc._x = 100;
onEnterFrame = function() {
  mc._x += (500 - mc._x) * .1;
}

才开始就停止了~~~~
回复

使用道具 举报

 楼主| 发表于 2-2-2005 09:28 PM | 显示全部楼层
1. 你的场景上是否有元件mc
2. 你目前mc的坐标x是否是在500

最好上传文件以解决问题
回复

使用道具 举报

发表于 26-5-2006 03:02 PM | 显示全部楼层
例子的连接都过期了咯。。。
回复

使用道具 举报

Follow Us
开心D过每一天啦 该用户已被删除
发表于 27-5-2006 12:20 AM | 显示全部楼层
谢谢啦,得益不浅。。。
回复

使用道具 举报

 楼主| 发表于 27-5-2006 08:51 PM | 显示全部楼层
原帖由 开心D过每一天啦 于 27-5-2006 12:23 AM 发表


我做好了,分享给你吧

直接看: http://www.geocities.com/happy_to_everyday/circle1.html
fla 档: http://www.geocities.com/happy_to_everyday/circle1.zip

直接看: http://www.geocities.com/hap ...




像“开心D过每一天啦” 動手做的就受益,不動手做就等別人文件的就看看這裡
http://chinese.cari.com.my/myfor ... ge=1&highlight=
回复

使用道具 举报


ADVERTISEMENT

发表于 10-1-2007 03:23 PM | 显示全部楼层
为什么打了第一个指令后测试影片 出现以下错误信息?

appear within on/onClipEvent handler
     onEnterFrame = function() {

Total ActionScript Errors: 2          Reported Errors: 2
回复

使用道具 举报

发表于 12-1-2008 04:46 AM | 显示全部楼层
tomato 兄的作品镇的太厉害廖。。。请问tomato 是怎样学的??
回复

使用道具 举报

 楼主| 发表于 14-1-2008 05:14 PM | 显示全部楼层
原帖由 hong5305 于 10-1-2007 03:23 PM 发表
为什么打了第一个指令后测试影片 出现以下错误信息?

appear within on/onClipEvent handler
     onEnterFrame = function() {

Total ActionScript Errors: 2          Reported Errors: 2



以上的 scripting 要貼在 Frame 上的 Actionscript Panel, 而不是 MovieClip 上.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 13-5-2024 05:41 PM , Processed in 0.090351 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表