打印

[编程] 问题解决,HOHO做缓冲动画出问题

做了个类似缓冲菜单的动画,但出了点问题(具体看我的动画地址,显示不正常),望指教。
不知道是出了什么鬼问题,代码多,但思路清晰,有意者帮忙仔细读下,感谢!!!!
第一个/////以上的部分不需要看,浪费时间,请直接看/////下面的部分
附件过大,我传在别处
地址: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)
              }
       }
       
}
[ 本帖最后由 SUNXINZHE 于 2008-6-14 17:15 编辑 ]
imgfilters() 中的onEnterFrame事件与代码最后的onEnterFrame事件冲突。
并且最后那一段没有必要用onEnterFrame
http://www.flash023.cn 终极讨厌
引用:
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也应该老是执行第一句啊,为什么又显示正常了呢,纳闷!!!!

[ 本帖最后由 SUNXINZHE 于 2008-6-14 03:58 编辑 ]

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
人还得靠自己
地址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)
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

我奇怪的只是你干嘛不用Tween
珍惜生命,远离IT

TOP

用TWEEN能达到模糊吗?
我一般都是用他做缓冲

TOP

复制内容到剪贴板
代码:
import flash.filters.BlurFilter;
import mx.transitions.Tween;
import mx.transitions.easing.Strong;
MovieClip.prototype.imgfilters = function(blurx, blury, quality, spd) {
    if (!this.ori_blurx) {
        this.ori_blurx = this.ori_blury = 0;
    } else {
        this.t1.stop();
        this.t2.stop();
    }
    var t = this;
    this.t1 = new Tween(this, "xpos", Strong.easeOut, this.ori_blurx, blurx, spd, true);
    this.t2 = new Tween(this, "ypos", Strong.easeOut, this.ori_blury, blury, spd, true);
    this.t1.onMotionChanged = function() {
        t.ori_blurx = this.position;
        t.filters = [new BlurFilter(t.xpos, t.ypos, quality)];
    };
    this.t2.onMotionChanged = function() {
        t.ori_blury = this.position;
    };
};
//blurx, blury, quality, spd
mc.imgfilters(60,0,1,5);
mc.onRelease = function() {
    this.imgfilters(random(100),random(100),random(5) + 1,2);
};
改了下,加了点东西

[ 本帖最后由 蓝色月光 于 2008-6-14 17:49 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
珍惜生命,远离IT

TOP

东西不错。。学习了。我上次做运动缓冲用了很笨的办法。。郁闷中。

TOP