Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash表单:展开/收缩部分-我的AS3代码正在运行。。需要建议吗_Flash_Actionscript 3_Actionscript_Flash Cs5 - Fatal编程技术网

Flash表单:展开/收缩部分-我的AS3代码正在运行。。需要建议吗

Flash表单:展开/收缩部分-我的AS3代码正在运行。。需要建议吗,flash,actionscript-3,actionscript,flash-cs5,Flash,Actionscript 3,Actionscript,Flash Cs5,这个问题涉及: CS5闪存+AS3 你好, 我只是尝试在以下链接中模拟折叠/扩展功能: 表单本身不需要具有功能性 这是我的第一个AS3项目,我相信我把事情弄得太复杂了,代码变得太疯狂了,我一直沉浸在其中。我试着为重复的东西制作某些函数,但我所有的尝试都失败了: 我能做到的是: 从数组中动态创建复选框+标签,并将它们正确放置在彼此下方 单击部分,会导致复选框出现/消失 单击第一节,自动正确重新定位第二节 我的问题, 我找不到一种可行的方法来重新定位第一节展开/折叠时第二节下方的复选框。我基本上需

这个问题涉及: CS5闪存+AS3

你好,

我只是尝试在以下链接中模拟折叠/扩展功能:

表单本身不需要具有功能性

这是我的第一个AS3项目,我相信我把事情弄得太复杂了,代码变得太疯狂了,我一直沉浸在其中。我试着为重复的东西制作某些函数,但我所有的尝试都失败了:

我能做到的是:

从数组中动态创建复选框+标签,并将它们正确放置在彼此下方

单击部分,会导致复选框出现/消失

单击第一节,自动正确重新定位第二节

我的问题,

我找不到一种可行的方法来重新定位第一节展开/折叠时第二节下方的复选框。我基本上需要这些复选框总是位于第二部分下面

这是我的密码:

stop();

import fl.controls.CheckBox;
import fl.controls.RadioButton;

//General Variables
var i:int;

// Tab1 Group 1
var tab1_gp1_main:CheckBox = new CheckBox();
addChild(tab1_gp1_main);
tab1_gp1_main.move(0, 20);
tab1_gp1_main.width = 120;
tab1_gp1_main.label = "Landscape";

// Tab1 Group 2;
var tab1_gp2_main:CheckBox = new CheckBox();
addChild(tab1_gp2_main);
this.tab1_gp2_main.move(0, 20 + tab1_gp1_main.y );
tab1_gp2_main.width = 120;
tab1_gp2_main.label = "Performance";

// Section Click Listeners
tab1_gp1_main.addEventListener(MouseEvent.CLICK, sectionHandler);
tab1_gp2_main.addEventListener(MouseEvent.CLICK, sectionHandler);

//Declare Number of Options;
var tab1_grp1_Options:int = 4;
var tab1_gp1_op_Labels:Array = ["Test1","Test2","Test3","Test4","Test5"];

var tab1_grp2_Options:int = 4;
var tab1_gp2_op_Labels:Array = ["Test1","Test2","Test3","Test4","Test5"];

//Section Click Functions;
function sectionHandler(event:MouseEvent):void
{
    switch (event.currentTarget)
    {
        case tab1_gp1_main :
            switch (tab1_gp1_main.selected)
            {
                case true :
                    for (i=0; i<=tab1_grp1_Options; i++)
                    {
                        //Option Creation Loop
                        var tab1_gp1_op:CheckBox = new CheckBox();
                        tab1_gp1_op.name = "tab1_gp1_op" + i;
                        addChild(tab1_gp1_op);

                        //Add Properties for Options
                        tab1_gp1_op.label = tab1_gp1_op_Labels[i];
                        tab1_gp1_op.width = 120;

                        //Position 1st Option Below Main
                        if (tab1_gp1_op.name == "tab1_gp1_op0")
                        {
                            tab1_gp1_op.move(20, 20 + this.tab1_gp1_main.y);
                        }
                        else
                        {
                            //Position Options > 1st below it
                            var prevOptionNum:int = i - 1;
                            var prevOption:CheckBox = getChildByName("tab1_gp1_op" + prevOptionNum) as CheckBox;
                            tab1_gp1_op.move(20, 20 + prevOption.y);
                        }
                        //Testing
                        trace(tab1_gp1_op.name);
                        trace(tab1_gp1_op.label);
                        trace(tab1_gp1_op.y);

                    }
                    ExpandCollapse("tab1_gp1_main_selected");
                    break;
                default :
                    //Remove all options for a section
                    for (i=0; i<=tab1_grp1_Options; i++)
                    {
                        var RemoveOption:CheckBox = getChildByName("tab1_gp1_op" + i) as CheckBox;
                        trace("unselected"+RemoveOption);
                        removeChild(RemoveOption);
                    }
                    ExpandCollapse("tab1_gp1_main_unselected");
            }
            break;
        case tab1_gp2_main :
            switch (tab1_gp2_main.selected)
            {
                case true :
                    for (i=0; i<tab1_grp2_Options; i++)
                    {
                        //Option Creation Loop
                        var tab1_gp2_op:CheckBox = new CheckBox();
                        tab1_gp2_op.name = "tab1_gp2_op" + i;
                        addChild(tab1_gp2_op);

                        //Add Properties for Options
                        tab1_gp2_op.label = tab1_gp2_op_Labels[i];
                        tab1_gp2_op.width = 120;

                        //Position 1st Option Below Main
                        if (tab1_gp2_op.name == "tab1_gp2_op0")
                        {
                            tab1_gp2_op.move(20, 20 + tab1_gp2_main.y);
                        }
                        else
                        {
                            //Position Options > 1st below it
                            var tab1_gp2_op_prevnum:int = i - 1;
                            var tab1_gp2_op_prevopt:CheckBox = getChildByName("tab1_gp2_op" + tab1_gp2_op_prevnum) as CheckBox;
                            tab1_gp2_op.move(20, 20 + tab1_gp2_op_prevopt.y);
                        }
                        //Testing
                        trace(tab1_gp2_op.name);
                        trace(tab1_gp2_op.label);
                        trace(tab1_gp2_op.y);
                    }
                    break;
                default :
                    //Remove all options for a section
                    for (i=0; i<tab1_grp2_Options; i++)
                    {
                        var tab1_gp2_op_remove:CheckBox = getChildByName("tab1_gp2_op" + i) as CheckBox;
                        trace("unselected"+tab1_gp2_op_remove);
                        removeChild(tab1_gp2_op_remove);
                    }
            }
            break;
    }
}


function ExpandCollapse(SectionClicked:String):void
{
    switch (SectionClicked)
    {
        case "tab1_gp1_main_selected" :
            var lastOption:CheckBox = getChildByName("tab1_gp1_op" + tab1_grp1_Options) as CheckBox;
            tab1_gp2_main.move(0, 20 + lastOption.y);
            break;
        case "tab1_gp1_main_unselected" :
            tab1_gp2_main.move(0, 20 + tab1_gp1_main.y);
            break;
        default :
    }
}

提前谢谢。

我认为这将有助于您将此问题视为一个列表,该列表可以是“无限”项,并且具有“无限”嵌套级别。现在,这里有很多硬编码的数字和文本,你的间距设置非常严格。要从无限列表的角度考虑这一点,您可以从应用于每一级展开和折叠的规则开始

每个项目在前一组项目下方显示Y像素。 每个子组显示在父组右侧的X处。 当组折叠时,其中的子对象将隐藏。 父项包含其所有子项。 从这里,您可以想象列表中的每个项目也是一组项目,该组中的项目是项目组,该组中的项目。。。。这就是我们所知道的。如果要为行项目创建一种包含子项的方式,可能需要将每个行项目设置为具有子显示对象的精灵,则可以轻松地将组的高度展开或折叠,并将其视为单个单元。当组展开时,子对象将使用addChild添加到组中,当组折叠时,子对象将从removeChild中删除

通过创建一个表示清单行的新类,它将帮助您将这些项目封装在更小的、更易于使用的包中,这样您就不会到处移动标签和复选框,而只是一个单行项目/组。该组可以包含行项目对象的列表,而行项目对象又可以包含更多列表。无论有多深,功能都或多或少保持不变

我意识到这一切更多的是对面向对象编程的介绍,而不是一个直接的答案,但是学习这些东西将获得巨大的回报。总而言之,您发布的代码试图根据具体情况将这些对象强制放到特定位置,我认为答案是尝试根据您设置的规则创建能够适应情况的对象