有关胶片的FLASH教程
发布网友
发布时间:2023-09-18 09:37
我来回答
共2个回答
热心网友
时间:2023-09-28 11:11
胶卷动画如1楼说的,我主要说鼠标跟随
鼠标跟随代码物体对鼠标的跟随可以采用在帧上添加as语句starDrag的方法来实现。
但是采用这种方法所实现的跟随过程太生硬,跟得实在是紧,也就是当鼠标移动到别的位置,物体也很快的移动了过来,假如要让物体慢慢(速度可以控制)的靠近鼠标,使用starDrag这条语句就不能做到。
慢慢靠近的效果:
starDrag语句的功能其实是和下面的代码相同的。
onClipEvent (enterFrame) { xTarget = _root._xmouse; yTarget = _root._ymouse; _x = xTarget; _y = yTarget;}
这几行代码是添加在物体(影片剪辑)上面的。
其中,语句 _x = xTarget 和 _y = yTarget的作用是使物体的坐标定位到(xTarget,yTarget)上,
而(xTarget,yTarget)就是鼠标的当前坐标。
修改这几行代码,就可以使物体在鼠标移动后,慢慢的靠近鼠标。
_x = xTarget 等价于 _x = xTarget + _x - _x(加一个减一个)
即:_x =_x + (xTarget - _x)
其中的(xTarget - _x)是物体的目标位置与当前位置的坐标差
如果让(xTarget - _x)乘上一个小于1的系数,那么物体就不会突然移动到坐标(xTarget,yTarget)上,
而是慢慢的靠过去。
于是,修改后的代码如下:
onClipEvent (enterFrame) { xTarget = _root._xmouse; yTarget = _root._ymouse; fraction=0.5; _x = _x + (xTarget-_x)*fraction; _y = _y + (yTarget-_y)*fraction; }
实现了慢慢靠近
对“慢慢靠近”的加以利用:一个跟一个
场景上放置一个影片剪辑,instance name命名为darg0
在帧上添加代码:
copies = 5;for (var i = 1; i<=copies; i++) { plicateMovieClip ("drag0", "drag"+i, i); eval("drag"+i).num = i;}
上面的代码复制了5个,drag1~drag5,连同drag0,场景上共6个
其中,还给drag1~drag5定义了内部变量drag1.num~drag5.num
在场景上的drag0上面添加代码:
onClipEvent (enterFrame) { if (num) { xTarget = eval("_root.drag"+(num-1))._x; yTarget = eval("_root.drag"+(num-1))._y; } else { xTarget = _root._xmouse; yTarget = _root._ymouse; } fraction = .5; _x += (xTarget-_x)*fraction; _y += (yTarget-_y)*fraction;}
这几行代码使得drag0跟随着鼠标,drag1跟随着drag0,drag2跟随着drag1,……,drag5跟随着drag4
解释一下if这个判断语句
因为drag1.num~drag5.num的值都不为空,所以对于drag1~drag5这5个影片剪辑,执行的代码是:
xTarget = eval("_root.drag"+(num-1))._x;
yTarget = eval("_root.drag"+(num-1))._y;也就是跟随着前一个
而对于drag0,由于没有给它定义num,它的值为空,所以对于drag0,执行的代码是:
xTarget = _root._xmouse;
yTarget = _root._ymouse;也就是跟随着鼠标
“一个跟一个”代码的另一种写法
上面的“一个跟一个”的制作,是在场景上只放置了一个影片剪辑,然后在影片剪辑上添加as代码,再通过在帧上添加as代码(plicateMovie)来复制影片剪辑。
还可以用另外一种代码方式来实现
效果
这种方式是直接在场景上放置了6个影片剪辑,依次命名为:drag0~drag5。然后在帧上添加代码如下:
_root.drag0._x = _root._xmouse+10; _root.drag0._y = _root._ymouse;i = 1;while (i<=5) { dragi = eval("/drag"+i); dragi_prev = eval("/drag"+(i-1)); dragi._x += (dragi_prev._x-dragi._x)*0.5+10; dragi._y += (dragi_prev._y-dragi._y)*0.5; i = i+1;}
该代码也是使得drag0跟随着鼠标,drag1跟随着drag0,drag2跟随着drag1,……,drag5跟随着drag4(但是每个相差10)
不过代码添加完毕,测试的时候,你会发现这些影片剪辑并不会移动。因为还需要下面一个步骤:
在时间轴的第二帧插入帧(F5),因为只有至少2帧,动画才会产生循环,上面那些代码也才会重复运行,否则如果只有1帧的话,那些代码也就只被执行了一次。
另外还有 1、你所指的效果先做一个MC,透明度从100到0的补间动画,其它效果你自己加。
2、把MC拖放到场景,在第一帧加入如下动作,//MC的实例名为mc.
_root.onLoad = function() {//主场景的load事件,只加载一次
for (var i = 1; i<=20; i++) { //for循环开始
_root.mc.plicateMovieClip("mc"+i,i);//复制
_root["mc"+i]._xscale = 100-10*i;//设置x轴缩放比
_root["mc"+i]._yscale = 100-10*i;//设置y轴缩放比
_root["mc"+i]._alpha = 100-5*i;//透明度的变化
}//for循环结束
}//初始化完毕。
_root.onEnterFrame=function(){//onenterframe事件
for(var i=1;i<=20;i++){//for循环
if(i==1){//条件判断,如果i等于1,做以下动作
startDrag(_root["mc"+i],true);//拖动(复制出来的影片剪辑)
_root.mc._alpha=0;//让原来的MC不可见,也可以用mc._visible=0;同样 }
else{//否则
_root["mc"+i]._x=_root["mc"+i]._x+(_root["mc"+(i-1)]._x-_root["mc"+i]._x)/4+(_root["mc"+(i-1)]._x-_root["mc"+i]._x)*0.08;//这里有一个公式,自己去研究,很简单。
_root["mc"+i]._y=_root["mc"+i]._y+(_root["mc"+(i-1)]._y-_root["mc"+i]._y)/4+(_root["mc"+(i-1)]._y-_root["mc"+i]._y)*0.08;
}
}
}
热心网友
时间:2023-09-28 11:11
胶卷很好做啊 LZ 在网上找个 真的胶卷图片 把里面的图片拿橡皮给擦掉 换成你的 就可以了!!!! 从右往左移动 就把 胶卷 第一真 放在最右侧 在第10真 把 胶卷放到最左侧 中间用动画控制就可以了 !! 这样 播放出来就是 循环的
鼠标跟随 ActionScript 3.0 我是做美工的 只能给你粗略的讲一下 顺便给你写一段代码 粘贴进 flash CS3 就能用了 希望能够帮助你
package { 建立包
import flash.display.MovieClip; 载入一个 MovieClip 类
import flash.display.Sprite; 载入一个 Sprite 类 不管是 MovieClip 还是 Sprite 以后你对类 了解的更深了 只用在 display 后面加个 * 就可以了 )
import flash.events.Event; 载入一个 Event 类 ( 里面是动作类 )
public class MouseFollow extends MovieClip {
private var _followSpList : Array; 声明一个 _followSpList 他的类型是 Array (组)
public function MouseFollow( ) { 初始化函数
init( );
}
private function init( ) : void {
_followSpList = new Array( ); 把刚才命名的 _followSpList 这个 在这个函数里面显示
initFollowSprite( );
this.addEventListener(Event.ENTER_FRAME, enterFrameHandler) 监听运动事件
}
private function initFollowSprite( ) : void {
_followSpList.push(getSprite( ));
_followSpList.push(getSprite( ));
}
private function getSprite( ) : Sprite {
var sp : Sprite = new Sprite( ); 用Script 建立一个 名为 sp 的圆形 ,下面来绘制出这个 sp
sp.graphics.beginFill(0);
sp.graphics.drawCircle(0,0,20);
sp.graphics.endFill(); 绘制结束
addChild(sp); 加入显示列表
return sp; 返回值
}
private function enterFrameHandler(event : Event) : void {
for(var i : int = 0; i < _followSpList.length; i++){ 循环语句
if(i == 0){
_followSpList[0].x += (mouseX - _followSpList[0].x) / 5; 加速度公式 也就是 ( 目标点- 要缓动东西的X轴 ) / 速度
_followSpList[0].y += (mouseY - _followSpList[0].y) / 5; 加速度公式
}else{
_followSpList[i].x += (_followSpList[i - 1].x - _followSpList[i].x) / 5; 加速度公式
_followSpList[i].y += (_followSpList[i - 1].y - _followSpList[i].y) / 5; 加速度公式
}
}
}
}
}