我目前在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);
}
但这根本不起作用。有谁可以提供帮助?
答案 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。