找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1912|回复: 8

[AS1&2] 问题解决,HOHO做缓冲动画出问题

[复制链接]
发表于 2008-6-13 23:04:42 | 显示全部楼层 |阅读模式
做了个类似缓冲菜单的动画,但出了点问题(具体看我的动画地址,显示不正常),望指教。
不知道是出了什么鬼问题,代码多,但思路清晰,有意者帮忙仔细读下,感谢!!!!
第一个/////以上的部分不需要看,浪费时间,请直接看/////下面的部分
附件过大,我传在别处
地址:http://ps2007.128.tofor.com/11.swf
//tween
import mx.transitions.Tween;
import mx.transitions.easing.*;
function imgtweenx(target:MovieClip, xstart:Number, xend:Number) {
        var myTween:Tween = new Tween(target, "_x", Strong.easeOut, xstart, xend, 1, true);
}
function imgtweeny(target:MovieClip, ystart:Number, yend:Number) {
        var myTween:Tween = new Tween(target, "_y", Strong.easeOut, ystart, yend, 1, true);
}
//模糊滤镜
import flash.filters.*;
function imgfilters() {
        var tempNum:Number = 60;
        onEnterFrame = function () {
                if (tempNum != 0) {
                        tempNum -= 5;
                        mymc.filters = [new BlurFilter(tempNum, 0, 3)];
                } else {
                        delete onEnterFrame;
                }
        };
}
//////////////////////////////////////////////////////////////////////
xmin=mymc._x-mymc._width+478+83
xmax=mymc._x
trace(xmax)
btn2.onPress=function(){
        var x1=mymc._x
        var x2=(x1<=xmin)?x1:x1-478+70
        trace(x2)
        imgtweenx(mymc,x1,x2)
        imgfilters()
}
btn1.onPress=function(){
        var x1=mymc._x
        var x2=(x1>=xmax)?x1:x1+408
        imgtweenx(mymc,x1,x2)
        imgfilters()
}
///////////////////////////////////////////////////////////////////////
for(i=1;i<=20;i++){
        var mc=mymc["menuMc"+i]
        mc.bianhao=i
        trace(mc.bianhao)
        }
function mouseover(){
        for(i=1;i<=20;i++){
        var mc=mymc["menuMc"+i]
        if(mc.hitTest(_xmouse,_ymouse,true)){
                cbianhao=mc.bianhao
                imgtweeny(mc,mc._y,-50)
        }else if(Math.abs(mc.bianhao-cbianhao)==1){
                imgtweeny(mc,mc._y,-10)
        }else if(Math.abs(mc.bianhao-cbianhao)==2){
                imgtweeny(mc,mc._y,30)
        }else{
                imgtweeny(mc,mc._y,150)
        }
}
}
onEnterFrame=function(){
        for(var i=1;i<=20;i++){
                var mc=mymc["menuMc"+i]
                mc.onRollOver=mouseover
                mc.onRollOut=function(){
                        imgtweeny(mc,mc._y,100)
                }
        }
       
}

[[i] 本帖最后由 SUNXINZHE 于 2008-6-14 17:15 编辑 ]
发表于 2008-6-13 23:15:18 | 显示全部楼层
imgfilters() 中的onEnterFrame事件与代码最后的onEnterFrame事件冲突。
并且最后那一段没有必要用onEnterFrame
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-14 01:40:42 | 显示全部楼层
for(i=1;i<=20;i++){
        var mc=mymc["menuMc"+i]
        mc.bianhao=i
        mc.onRollOver=mouseover
        mc.onRollOut= mouseout
        }

function mouseout(){
        for(i=1;i<=20;i++){
                var mc=mymc["menuMc"+i]
                imgtweeny(mc,mc._y,122.05)
        }
}
function mouseover(){
       
        for(i=1;i<=20;i++){
        var mc=mymc["menuMc"+i]
        if(mc.hitTest(_xmouse,_ymouse,true)){
                cbianhao=mc.bianhao
                imgtweeny(mc,mc._y,-50)
        }else if(Math.abs(mc.bianhao-cbianhao)==1){
                imgtweeny(mc,mc._y,-10)
        }else if(Math.abs(mc.bianhao-cbianhao)==2){
                imgtweeny(mc,mc._y,30)
        }else{
                imgtweeny(mc,mc._y,122.05)
        }
       
}
}

又忘了冲突,我去掉了最后一段代码,改写成如上形式,但我下面在改变Y坐标函数中原本就还没用到imgfilters(),所以出现问题的原因还是没找到,我要的效果就是“以鼠标经过按钮为中心,两边的两个MC的Y坐标和他呈梯形状”。而现在的效果是接触鼠标的MC显示正常 ,其他的总是有一个MC的间隔,“段梯”。
经过反复测试,要是把function mouseover(){for....}改为function mouseover(){mymc.onEnterFrame=function(){for....}}能达到效果,但内存为100%,没用,是不是因为这一句if....else if....else if....else当if满足了,后面的else if里面的语句就不执行了,那加了onEnterFrame也应该老是执行第一句啊,为什么又显示正常了呢,纳闷!!!!

[[i] 本帖最后由 SUNXINZHE 于 2008-6-14 03:58 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-14 11:23:59 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-14 17:02:36 | 显示全部楼层
人还得靠自己
地址http://ps2007.128.tofor.com/shensuo.swf
摸索了好半天,到这时候早饭都没吃(今天电脑租期到,得抓紧时间,可能写完帖子他就来了)
效果实现了AS控制 “渐变+模糊+鼠标滑过规律伸缩”的效果,还写了个模糊通用自定义函数,FLASH自带的没多大通用性,索性自己写个,包含三个参数,“目标MC+X模糊+Y模糊”,代码如下:
import flash.filters.*;
function imgfilters(target,blurx:Number,blury:Number) {
        target.onEnterFrame = function () {
                if (blurx != 0){
                        trace("1"+blurx)
                        blurx -= 5;
                        }else if(blury!=0){
                                trace("2")
                        blury -= 5
                }else {
                        delete this.onEnterFrame;
                }
                target.filters = [new BlurFilter(blurx,blury, 3)];
        };
}
imgfilters(mymc,60,0)
imgfilters(mymc2,0,60)


自己写的通用模糊效果类.swf (381 Bytes, 下载次数: 188)
回复 支持 反对

使用道具 举报

发表于 2008-6-14 17:08:03 | 显示全部楼层
我奇怪的只是你干嘛不用Tween
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-14 17:13:00 | 显示全部楼层
用TWEEN能达到模糊吗?
我一般都是用他做缓冲
回复 支持 反对

使用道具 举报

发表于 2008-6-14 17:36:43 | 显示全部楼层

  1. import flash.filters.BlurFilter;
  2. import mx.transitions.Tween;
  3. import mx.transitions.easing.Strong;
  4. MovieClip.prototype.imgfilters = function(blurx, blury, quality, spd) {
  5.         if (!this.ori_blurx) {
  6.                 this.ori_blurx = this.ori_blury = 0;
  7.         } else {
  8.                 this.t1.stop();
  9.                 this.t2.stop();
  10.         }
  11.         var t = this;
  12.         this.t1 = new Tween(this, "xpos", Strong.easeOut, this.ori_blurx, blurx, spd, true);
  13.         this.t2 = new Tween(this, "ypos", Strong.easeOut, this.ori_blury, blury, spd, true);
  14.         this.t1.onMotionChanged = function() {
  15.                 t.ori_blurx = this.position;
  16.                 t.filters = [new BlurFilter(t.xpos, t.ypos, quality)];
  17.         };
  18.         this.t2.onMotionChanged = function() {
  19.                 t.ori_blury = this.position;
  20.         };
  21. };
  22. //blurx, blury, quality, spd
  23. mc.imgfilters(60,0,1,5);
  24. mc.onRelease = function() {
  25.         this.imgfilters(random(100),random(100),random(5) + 1,2);
  26. };
复制代码


改了下,加了点东西

[[i] 本帖最后由 蓝色月光 于 2008-6-14 17:49 编辑 ]

example.fla

44.5 KB, 下载次数: 187

example.swf

2.58 KB, 下载次数: 178

回复 支持 反对

使用道具 举报

发表于 2008-6-16 09:45:53 | 显示全部楼层
东西不错。。学习了。我上次做运动缓冲用了很笨的办法。。郁闷中。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )

GMT+8, 2021-3-8 11:50 , Processed in 0.069661 second(s), 12 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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