【问题标题】:Bring object to the front, in Flash AS3在 Flash AS3 中将对象置于前面
【发布时间】:2010-04-29 11:07:08
【问题描述】:

我有下面的代码,它基本上是在屏幕上为对象设置动画,当发生翻转时,它会暂停动画,并显示一些信息。一切正常,但是当它暂停时,我希望当前对象位于“顶部”,以便其他项目落后。

我查看了 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); 
        }
    }
}

欢迎任何帮助

【问题讨论】:

  • 我有同样的问题,任何帮助将不胜感激! setChildIndex(evento.target,numChildren - 1);这不起作用,它标记了这个错误:场景 1,图层“动作”,第 1 帧,第 6 行 1084:语法错误:在 1 之前期望右括号。

标签: flash actionscript-3


【解决方案1】:

只需在该特定实例上使用 addChild() 即可。它将被放置到“顶部”

来自帮助文件:

将子 DisplayObject 实例添加到此 DisplayObjectContainer 实例。在此 DisplayObjectContainer 实例中,该子项被添加到所有其他子项的前面(顶部)

是的,即使对象已经在显示列表中,它也可以工作。

【讨论】:

  • 最简单的解决方案往往是最好的
【解决方案2】:

你试过setChildIndex吗?

【讨论】:

    【解决方案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"});
    } 
    

    【讨论】:

    • 感谢您的回复,很抱歉,我花了这么长时间才回复您,我已经换了一份工作。我尝试添加该行,但出现错误:1118:将静态类型 Object 的值隐式强制转换为可能不相关的类型 flash.display:DisplayObject。 setChildIndex(e.target, this.numChildren-1);再次欢迎任何帮助
    【解决方案4】:

    我搜索了同样的问题,发现了这个旧帖子。 我以一种很好的方式解决了这个问题,只是想分享给人们,以便将来找到这篇文章。

    问题是,您尝试从加载器对象本身设置子索引,但这是设置它的磨损位置。在这种情况下,您需要父路径才能访问您的所有汽车。

    好吧,长话短说: 尝试以下更改: 在属性通道中创建一个新的 Sprite(在类名之后)

    // [...]
    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
    

    愿它,有一天它会帮助某人

    【讨论】:

    • “愿它,它总有一天会帮助到某人”——它确实做到了!谢谢 ! :)
    【解决方案5】:

    你试过addChildAt吗?

    Adobe Live Docs - addChildAt()

    【讨论】:

    • 这仅在将对象添加到舞台时才有效吗?我需要它们在暂停时进行更改,即。发生翻转时,当前对象必须位于顶部
    • 不,它也适用于已经是孩子的东西。通常,如果您执行 parent.addChildAt(child, n),您会将孩子添加到位置 n,并将位于 n 或以上的所有其他孩子的位置增加一。实际上,您将孩子像卡片一样放入甲板。如果你在 child 已经是 parent 的孩子时这样做,它的工作方式完全相同,除了它不做添加部分,它只是将它移动到位置 n。
    • 我试过添加:function carPause(e:MouseEvent):void { addChildAt(e.target, 6) Tweener.pauseTweens(e.target); Tweener.addTween(e.target.info, {y:-10, alpha:1, time:1, transition:"easeout"});但是给出错误,有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多