2010-04-29 6 views
2

아래 코드는 기본적으로 화면 전체에 걸쳐 객체를 애니메이션 처리합니다. 롤오버가 발생하면 애니메이션이 일시 중지되고 일부 정보가 표시됩니다. 모든 것이 정상적으로 작동하지만 일시 중지되면 현재 객체가 '맨 위에'올라가 다른 항목이 뒤따 랐습니다.플래시 AS3의 앞쪽에 객체 가져 오기

setChildIndex를 살펴 봤지만 행운이별로 없습니다.

package { 

import flash.display.MovieClip; 
import flash.display.Sprite; 
import flash.events.MouseEvent; 
import flash.geom.Point; 
import flash.events.KeyboardEvent; 
import flash.events.*; 
import caurina.transitions.Tweener; 
import fl.motion.Color; 

public class carpurchase extends Sprite { 

    public function carpurchase() { 

     var carX = 570; 


     //Set cars 
     var car1:fullCar = new fullCar(); 
     car1.info.alpha = 0; 
     //var c:Color = new Color(); 
     //c.setTint(0xff0000, 0.8); 
     //car2.car.transform.colorTransform=c; 
     car1.x = carX; 
     car1.y = 280; 
     car1.info.title.text = "test"; 
     car1.info.desc.text = "test"; 
     addChild(car1); 
     car1.addEventListener(MouseEvent.ROLL_OVER, carPause); 
     car1.addEventListener(MouseEvent.ROLL_OUT, carContinue); 
     function car1Reset():void { 
      Tweener.addTween(car1, {x:carX, time:0, onComplete:car1Tween}); 
     } 
     function car1Tween():void { 
      Tweener.addTween(car1, {x:-120, time:2, delay:3, transition:"linear", onComplete:car1Reset}); 
     } 
     car1Tween(); 


     var car2:fullCar = new fullCar(); 
     car2.info.alpha = 0; 
     var c:Color = new Color(); 
     c.setTint(0xff0000, 0.8); 
     car2.car.transform.colorTransform=c; 
     car1.x = carX; 
     car2.y = 175; 
     car2.info.title.text = "test"; 
     car2.info.desc.text = "test"; 
     addChild(car2); 
     car2.addEventListener(MouseEvent.ROLL_OVER, carPause); 
     car2.addEventListener(MouseEvent.ROLL_OUT, carContinue); 
     function car2Reset():void { 
      Tweener.addTween(car2, {x:carX, time:0, onComplete:car2Tween}); 
     } 
     function car2Tween():void { 
      Tweener.addTween(car2, {x:-120, time:3, delay:0, transition:"linear", onComplete:car2Reset}); 
     } 
     car2Tween(); 



     function carPause(e:MouseEvent):void { 
      Tweener.pauseTweens(e.target); 
      Tweener.addTween(e.target.info, {y:-150, alpha:1, time:.5, transition:"easeout"}); 
     } 
     function carContinue(e:MouseEvent):void { 
      Tweener.addTween(e.target.info, {y:10, alpha:0, time:.5, transition:"easeout"}); 
      Tweener.resumeTweens(e.target); 
     } 
    } 
} 

+0

하는 데 도움이! setChildIndex (evento.target, numChildren - 1); Scene 1, Layer 'Actions', Frame 1, Line 6 \t 1084 : 구문 오류 : 1보다 먼저 rightparen을 기대합니다. –

답변

1

당신이 addChildAt을 시도 어떤 도움을 환영?

Adobe Live Docs - addChildAt()

+0

무대에 개체를 추가 할 때만 작동합니까? 일시 중지되면 변경해야합니다. 롤오버가 발생할 때 현재 오브젝트가 최상위에 있어야합니다. – jimbo

+0

아니요, 이미 자식 인 경우에도 사용됩니다. 일반적으로 parent.addChildAt (child, n)을 수행하면 n을 위치에 추가하고 n 이상인 다른 모든 자식의 위치를 ​​하나씩 늘립니다. 사실상, 아이처럼 카드를 덱에 넣습니다. 자식이 이미 부모의 자식 인 경우이 작업을 수행하면 추가 부분을 수행하지 않는다는 점을 제외하고는 정확히 동일한 방식으로 작동합니다. 단지 위치 n으로 이동합니다. 제가 –

+0

추가 시도 : carPause 기능 (예 : 된 MouseEvent) {공극 \t \t \t \t addChildAt (e.target 6) \t \t Tweener.pauseTweens (예를 들어.목표); \t \t Tweener.addTween (e.target.info, {y : -10, 알파 : 1, 시간 : 1, 전환 : "easeout"})); \t \t \t} 하지만 오류가 있습니까? – jimbo

3
function carPause(e:MouseEvent):void { 
    setChildIndex(e.target, numChildren-1); 
    Tweener.pauseTweens(e.target); 
    Tweener.addTween(e.target.info, {y:-150, alpha:1, time:.5, transition:"easeout"}); 
} 
+0

답장을 보내 주셔서 감사합니다. 미안합니다. 다시 일하게되어서 다른 직장에 왔습니다. 줄을 추가하려고 시도했지만 오류가 발생했습니다. 1118 : 정적 유형 Object를 사용하는 값과 관련없는 유형 인 flash.display : DisplayObject의 암시 적 강제 변형. setChildIndex (e.target, this.numChildren-1); 아무 도움도 다시 환영합니다 – jimbo

8

해당 특정 인스턴스에서 addChild()를 사용하기 만하면됩니다. 그것은 '최고'의 도움말 파일에서

에 배치됩니다 :

Adds a child DisplayObject instance to this DisplayObjectContainer instance. The child is added to the front (top) of all other children in this DisplayObjectContainer instance.

그리고 네, 그 개체가 이미 DisplayList가있는 경우에도 작동합니다.

+0

가장 간단한 해결책은 종종 가장 좋습니다 – divillysausages

2

동일한 문제를 검색하여이 이전 게시물을 발견했습니다. 좋은 방법으로이 문제를 해결했으며 앞으로이 게시물을 찾을 수 있도록 사람들과 공유하고 싶습니다.

문제는 로더 개체 자체에서 childindex를 설정하려고했지만 문제가되는 것이므로 걱정할 필요가 없습니다. 이 경우 모든 차량에 액세스하려면 부모 경로가 필요합니다.

음, 긴 이야기를 짧게 : 이름으로 찾아 액세스를 은 (클래스 이름 후) 속성 채널에서 후

// [...] 
public class carpurchase extends Sprite { 
    private var _sprite:Sprite = new Sprite(); 
} 
// [...] 
// Add the cars to the sprite 
    _sprite.addChild(car1); // replace this lines 
//[...] 
    _sprite.addChild(car2); // replace this lines 
// Of course adding the sprite to your stage 
    addChild(_sprite); 

를 새로운 스프라이트를 작성하면 현재 대상을 선택하고 설정 : 이러한 변화를 시도

_mc.setChildIndex(_mc.getChildByName(e.target.name), _mc.numChildren-1); // Set on top 

위에 에 일이, 내가 어떤 도움이 많이 apreciated 것 같은 문제가 언젠가 누군가

+0

"언젠가는 도움이 될지도 모릅니다."- 그냥했습니다! 감사 ! :) –

관련 문제