2017-02-17 81 views
1

我最近开始在ActionScript 3中编写代码,并且在试图缩放MovieClip时遇到了问题。Actionscript 3缩放

{ 
    private var valGrandX:Number; 
    private var valGrandY:Number; 
    public function Bonhomme_Fil() 
    { 
     valGrandX = this.scaleX; 
     valGrandY = this.scaleY; 

     this.addEventListener(MouseEvent.ROLL_OVER, big); 
     this.addEventListener(MouseEvent.ROLL_OUT, small); 
    } 
    private function big(event:MouseEvent):void 
    { 
     this.scaleX *= 1.5; 
     this.scaleY *= 1.5; 
    } 
    private function small(event:MouseEvent):void 
    { 
     this.scaleX = valGrandX; 
     this.scaleY = valGrandY; 
    } 
} 

我的目标是让剪辑变得更大,当用户将鼠标悬停它,并返回到正常大小,当他徘徊在它之外。最终发生的事情是,当它扩大到更大的尺寸时,它会向底部和右侧移动,并最终来回闪烁。

回答

1

当您设计MovieClip时,其中心标有小(+)。此点是MovieClip本身的(0,0)和MovieClip在其父坐标中的(x,y)。当您使用AS3命令缩放/旋转此MovieClip时,它会缩放/旋转此点。您需要重新设计MovieClip的内容,以便将其平均放置在其(0,0)周围,然后您将获得“放大”效果。

如果您的影片剪辑出现“漏洞”或鼠标内容不一致,您可能会想要添加一个透明按钮(仅限于第4帧 - 它是其命中区域)。

1

尝试使用MouseEvent.MOUSE_OVERMouseEvent.MOUSE_OUT

检查what is the difference between roll over and mouse over?

或者设置这样的代码:

private var valGrandX:Number; 
private var valGrandY:Number; 
public function Bonhomme_Fil() 
{ 
    valGrandX = this.scaleX; 
    valGrandY = this.scaleY; 

    addEventListener(MouseEvent.ROLL_OVER, big); 
} 
private function big(event:MouseEvent):void 
{ 
    //this.scaleX *= 1.5; 
    //this.scaleY *= 1.5; 
    this.scaleX = 1.5; 
    this.scaleY = 1.5; 

    removeEventListener(MouseEvent.ROLL_OVER, big); 
    addEventListener(MouseEvent.ROLL_OUT, small); 
} 
private function small(event:MouseEvent):void 
{ 
    this.scaleX = valGrandX; 
    this.scaleY = valGrandY; 

    addEventListener(MouseEvent.ROLL_OVER, big); 
    removeEventListener(MouseEvent.ROLL_OUT, small); 
} 
+0

嗨,我是已经尝试过,并没有奏效。似乎由于某种原因,x和y坐标除了从左上角开始的比例之外还在变化。 – tomtom123456

+0

查看编辑答案。那么你的问题是'this.scaleY * = 1.5'删除乘数字符。 – Nemi

1

我想原因是,X,Y值没有变化,请尽量参考this post

+0

嗨,我已经尝试过,但似乎由于某些原因,x和y的值即使不在AS脚本中也会更改... – tomtom123456