如何制作具有特定长度的按钮?

时间:2016-09-30 05:06:31

标签: arrays actionscript-3 object flashdevelop

我在使用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类,在initialize()函数下

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个按钮发生错误(因为我在第6行中只指定了22个按钮,但我在CustomMenuListRenderer类上声明了4个按钮)。

我的问题是如何解决此问题?

1 个答案:

答案 0 :(得分: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++;
}
相关问题