2011-03-18 75 views
0

我正在为Blackberry Playbook开发ActionScript 3.0应用程序。等待,直到两个图像之间的转换完成

我有12个加载了Loader类的图像。我用Event.ENTER_FRAME褪色的方法,使用此事件处理淡出图片:

private function onEnterFrame(event:Event):void 
{ 
    imageToFront.alpha += 0.1; // slow fade 
    imageToBack.alpha -= 0.1; 

    if(imageToFront.alpha >= 1.0) 
    { 
     imageToFront.alpha = 1.0; 

     // hide the first image 
     imageToBack.alpha = 0.0; 
     imageToBack.visible = false; 

     // remove the enter frame event listener 
     stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame); 
    } 
} 

当图像的用户点击它抛出以下click处理程序:我有以下问题

private function onImageClicked(event:MouseEvent):void 
{ 
    switch((event.currentTarget as Loader).name) 
    { 
     case imageCell11Back.name: 
      imageToFront = imageCell11Front; 
      imageToBack = imageCell11Back; 
      break; 
     case imageCell11Front.name: 
      imageToFront = imageCell11Back; 
      imageToBack = imageCell11Front; 
      break; 
     case imageCell12Back.name: 
      imageToFront = imageCell12Front; 
      imageToBack = imageCell12Back; 
      break; 
     case imageCell12Front.name: 
      imageToFront = imageCell12Back; 
      imageToBack = imageCell12Front; 
      break; 
     case imageCell13Back.name: 
      imageToFront = imageCell13Front; 
      imageToBack = imageCell13Back; 
      break; 
     case imageCell13Front.name: 
      imageToFront = imageCell13Back; 
      imageToBack = imageCell13Front; 
      break; 
     case imageCell21Back.name: 
      imageToFront = imageCell21Front; 
      imageToBack = imageCell21Back; 
      break; 
     case imageCell21Front.name: 
      imageToFront = imageCell21Back; 
      imageToBack = imageCell21Front; 
      break; 
     case imageCell22Back.name: 
      imageToFront = imageCell22Front; 
      imageToBack = imageCell22Back; 
      break; 
     case imageCell22Front.name: 
      imageToFront = imageCell22Back; 
      imageToBack = imageCell22Front; 
      break; 
     case imageCell23Back.name: 
      imageToFront = imageCell23Front; 
      imageToBack = imageCell23Back; 
      break; 
     case imageCell23Front.name: 
      imageToFront = imageCell23Back; 
      imageToBack = imageCell23Front; 
      break; 
    } 
    stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); 
    imageToFront.visible = true; 
} 

如果用户在上一张图片尚未达到alpha = 1.0之前点击另一张图片,则该图片的alpha值会小于1.0。

换句话说,我不得不让onEnterFrame功能设置alpha为1.0。

任何想法?我试过stage.hasEventListener(Event.ENTER_FRAME)但它不起作用。

回答

0

我的解决办法:

private function onEnterFrame(event:Event):void 
{ 
    imageToFront.alpha += 0.1; // slow fade 
    imageToBack.alpha -= 0.1; 

    if(imageToFront.alpha >= 1.0) 
    { 
     imageToFront.alpha = 1.0; 

     // hide the first image 
     imageToBack.alpha = 0.0; 
     imageToBack.visible = false; 

     // remove the enter frame event listener 
     stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame); 
     faddingCard = false; 
    } 
} 

当图像的用户点击它抛出以下点击处理程序:

private function onImageClicked(event:MouseEvent):void 
{ 
    if (faddingCard) return; 

    switch((event.currentTarget as Loader).name) 
    { 
     case imageCell11Back.name: 
      imageToFront = imageCell11Front; 
      imageToBack = imageCell11Back; 
      break; 
     case imageCell11Front.name: 
      imageToFront = imageCell11Back; 
      imageToBack = imageCell11Front; 
      break; 
     case imageCell12Back.name: 
      imageToFront = imageCell12Front; 
      imageToBack = imageCell12Back; 
      break; 
     case imageCell12Front.name: 
      imageToFront = imageCell12Back; 
      imageToBack = imageCell12Front; 
      break; 
     case imageCell13Back.name: 
      imageToFront = imageCell13Front; 
      imageToBack = imageCell13Back; 
      break; 
     case imageCell13Front.name: 
      imageToFront = imageCell13Back; 
      imageToBack = imageCell13Front; 
      break; 
     case imageCell21Back.name: 
      imageToFront = imageCell21Front; 
      imageToBack = imageCell21Back; 
      break; 
     case imageCell21Front.name: 
      imageToFront = imageCell21Back; 
      imageToBack = imageCell21Front; 
      break; 
     case imageCell22Back.name: 
      imageToFront = imageCell22Front; 
      imageToBack = imageCell22Back; 
      break; 
     case imageCell22Front.name: 
      imageToFront = imageCell22Back; 
      imageToBack = imageCell22Front; 
      break; 
     case imageCell23Back.name: 
      imageToFront = imageCell23Front; 
      imageToBack = imageCell23Back; 
      break; 
     case imageCell23Front.name: 
      imageToFront = imageCell23Back; 
      imageToBack = imageCell23Front; 
      break; 
    } 
    faddingCard = true; 
    stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); 
    imageToFront.visible = true; 
} 

我添加了一个faddingCard Boolean类变量时onImageClick被抛出来控制。

0

尝试设置事件侦听器的imageToFront也是一个在imageToBack这样的:


imageToFront.removeEventListener(Event.ENTER_FRAME, fadeIn); 
imageToFront.addEventListener(Event.ENTER_FRAME, fadeIn); 

imageToBack.removeEventListener(Event.ENTER_FRAME, fadeOut); 
imageToBack.addEventListener(Event.ENTER_FRAME, fadeOut); 

淡入淡出功能应该像到:


private function fadeIn(event : Event) : void { 
    var currentLoader : Loader = event.target as Loader; 
    currentLoader.alpha += .1; 

    if(currentLoader.alpha >= 1) { 
     currentLoader.removeEventListener(Event.ENTER_FRAME, fadeIn); 
    } 
} 

private function fadeOut(event : Event) : void { 
    var currentLoader : Loader = event.target as Loader; 
    currentLoader.alpha -= .1; 

    if(currentLoader.alpha (inf)= 0) { 
     currentLoader.visible = false; 
     currentLoader.removeEventListener(Event.ENTER_FRAME, fadeOut); 
    } 
} 

**代替(INF)由< **我不知道为什么它被截断,如果我设置它...

对于补间值,你应该看看不同的补间引擎,如​​。

+0

我有同样的问题,如果我点击一个图像使淡出,然后我点击另一个图像,使其淡出。 – VansFannel 2011-03-18 16:20:28