从闪存中将Sprite添加到容器中

时间:2011-01-07 08:39:27

标签: actionscript-3

我目前在flashbuilder工作,我导入了一个包含评级容器的swc。 该评级容器包含5个评级,它们被标记为“Rating1”,“Rating2”,“Rating3”,“Rating4”,“Rating5”。这些被放置在舞台上。 我也有一个名为“Star”的精灵,当我点击“Rating4”时,那么从1到4的每个评分应该得到stah Star sprite添加到他们,当我再次点击评级3或者什么时候只有3个前3个应该添加明星。我尝试了以下方法:

    detailContent.RatingContainer.addEventListener(MouseEvent.CLICK, ratingClickHandler);

    private function ratingClickHandler(e:MouseEvent):void{
                rating = e.target.name;
                rating = rating.replace("Rating","");
                for (var i:uint = 1; i==uint(rating); i++){
                    star = new Rated();
                    detailContent.RatingContainer.getDefinitionByName("Rating"+e.target.name).addChild(star);
}

但这根本不起作用。有谁可以提供帮助?

2 个答案:

答案 0 :(得分:1)

看起来是一种相当复杂的方法。

一种选择可能是评级等级。评级类将有一个选定的&索引变量。选中后,将显示星号符号,否则,星形可见性将为false。

index属性将指示评级位置,并在将实例添加到舞台时设置。

在您的RatingContainer类中,您将拥有一个Vector of Rating对象,每个对象都会监听点击事件。

    private var ratings:Vector.<Rating> = new Vector.<Rating>();

    private function addRatings():void
    {
        for( var i:int ; i < 5 ; ++i )
        {
            var r:Rating = new Rating();

            r.index = i;
            r.addEventListener( MouseEvent.CLICK , ratingClickHandler );
            ratings.push( r);

            //set the rating position
            r.x = 10 * i;
            addChild( r );
        }
     }



     private function ratingClickHandler( event:MouseEvent ):void
     {
          var rating:Rating = event.currentTarget as Rating;

          for( var i:int ; i < ratings.length ; ++i )
             if( ratings[i].index <= rating.index )
                ratings[i].selected = true
              else
                ratings[i].selected = false;
     }

在您的评级课程

     private var _selected:Boolean;
     private var star:Sprite = new Star();

     public function set selected(value:Boolean ):void
     {
         star.visible = value;
         _selected = value;
     }

答案 1 :(得分:0)

首先,你真的应该键入变量,如:

var rating:String = e.target.name;

它使代码更易于阅读和理解。 其次,我不确定你在这里需要getDefinitionByName,如果Content.RatingContainer是DisplayObject,你可以像这样访问评级精灵:

Content.RatingContainer["Rating" + e.target.name]

代码的问题在于您将e.target.name连接到“Rating”,因此您实际上正在寻找名称为“RatingRating0”的精灵。 它看起来应该是:

detailContent.RatingContainer.getDefinitionByName("Rating"+rating).addChild(star);

因为rating是你在舞台上精灵名字末尾附加的id。