2016-09-30 13 views
0

我有困难使用customlistrenderer类和主屏幕类。你如何制作具有特定长度的按钮?

这是我的Homescreen类,其中包含函数generateData(),该函数应该显示22个按钮的滚动条。

private function generateData(): void{ 

     var list: List = new List(); 
     list.width = 235; 
     list.height = 380; 
     list.name = "HomeScreenList"; 
     this.addChild(list); 

     var rows:int = 6; 
     var iterator:int = 0; 
     var num:int = 22; 
     var counter:int = 0; 
     var obj:Object; 
     var heroName:Array = ["ana", "bastion", "d.va", "genji", "hanzo", "junkrat", "lucio", 
     "mccree", "mei", "mercy", "pharah", "reaper", "reinhardt", "roadhog", "soldier76", "symmetra", 
     "torbjorn", "tracer", "widowmaker", "winston", "zarya", "zenyatta"]; 
     var temp:Array = [] 

     obj = new Object(); 
     while(iterator < rows){ 

     obj.name1 = heroName[counter]; 
     obj.image1 = myResource.getImage(heroName[counter]); 
     obj.name2 = heroName[counter+1]; 
     obj.image2 = myResource.getImage(heroName[counter+1]); 
     obj.name3 = heroName[counter+2]; 
     obj.image3 = myResource.getImage(heroName[counter+2]); 
     obj.name4 = heroName[counter+3]; 
     obj.image4 = myResource.getImage(heroName[counter+3]); 
     temp.push(obj); 
     counter+4; 
     iterator++; 
     } 

     var collection:ListCollection = new ListCollection(temp); 

     //assign the renderer 
     list.itemRendererType = CustomMenuListRenderer; 
     list.dataProvider = collection; 
     list.addEventListener(Event.CHANGE, onChange); 

     this.addChild(list); 
     list.validate(); 


    } 

和CustomMenuListRenderer类,初始化()函数下

super.initialize(); 
     firstButton = new Button(); 
     this.addChild(firstButton); 
     firstButton.x = 20; 
     firstButton.y = 100; 
     firstButton.scale = 0.60; 
     secondButton = new Button(); 
     secondButton.x = 92; 
     secondButton.y = 100; 
     secondButton.scale = 0.60; 
     thirdButton = new Button(); 
     thirdButton.x = 163; 
     thirdButton.y = 100; 
     thirdButton.scale = 0.60; 
     fourthButton = new Button(); 
     fourthButton.x = 235; 
     fourthButton.y = 100; 
     fourthButton.scale = 0.60; 

     firstButton.addEventListener(Event.TRIGGERED, onTrigger); 
     secondButton.addEventListener(Event.TRIGGERED, onTrigger); 
     thirdButton.addEventListener(Event.TRIGGERED, onTrigger); 
     fourthButton.addEventListener(Event.TRIGGERED, onTrigger); 

问题是由于循环显示4个按钮的每个循环,在第23届按钮出现错误(因为我仅指定22个按钮,但我在CustomMenuListRenderer类中声明了4个按钮)。

我的问题是我该如何解决这个问题?

回答

0

第一个问题,为什么手动定义num而不使用heroName.lenght?更安全

var heroName:Array = ["ana", "bastion", "d.va", "genji", "hanzo", "junkrat", "lucio", 
    "mccree", "mei", "mercy", "pharah", "reaper", "reinhardt", "roadhog", "soldier76", "symmetra", 
    "torbjorn", "tracer", "widowmaker", "winston", "zarya", "zenyatta"]; 
var num:int = heroName.lenght; 

要解决您的错误,您必须检查是否存在heroName索引,才能获取它。

喜欢的东西:

obj = new Object(); 
while(iterator < rows){ 
    var objCounter:int = 1; 
    while(objCounter <= 4) 
    { 
     if(counter < heroName.lenght) 
     { 
      obj["name"+objCounter] = heroName[counter]; 
      obj["image"+objCounter] = myResource.getImage(heroName[counter]); 

     } 
     objCounter++; 
     counter++; 
    } 
    temp.push(obj); 
    iterator++; 
} 
相关问题