EventListener和动态添加的MovieClip。 (AS3)

时间:2015-03-29 08:46:30

标签: actionscript-3 air flash-cc

我试图创造一个小游戏(它更多的是学习如何制作一个引人注目的游戏)。它可以像这样恢复: 用户在菜单中选择建筑物并将其放置在舞台上。点击新建的建筑物时,他/她可以选择升级它。 (对于像Clash of Clans这样玩游戏的人来说,这就是我想要做的事情)。 我有我的菜单,可以毫无问题地放置建筑物,但我无法点击它们。 这是我的代码的开头:

var build:int=0; //variable that defines which building to place on stage

menuBuilding.house.addEventListener(MouseEvent.CLICK, fnChooseHouse); //when click on House in Building Menu
function fnChooseHouse (e:Event):void{
    build = 1; //building to place is a House.
}

city.addEventListener(MouseEvent.CLICK, mouseClickEvent);

function mouseClickEvent(e: MouseEvent): void {
    if (build == 0) { //if building not chosen, do nothing
        return
    } else if (build == 1) { // if building is a house
        var house1: house = new house();
        addChild(house1); //add instance of the house
        house1.x = stage.mouseX;
        house1.y = stage.mouseY; // place the house where I clicked
        build = 0; //reset the variable.
        house1.mouseChildren=true; //allow instance of house to be clicked.
    }
};

我的问题是会有很多房屋(和其他建筑物)。我试图将它们命名并将它们推入一个数组中(因此我可以使用每个......循环访问它们),但它不起作用。

有人有想法吗? (顺便说一下,我还在学习AS3,所以我还没有使用外部.as文件,仍在时间轴上)。 在此先感谢:)

2 个答案:

答案 0 :(得分:0)

您的新房屋实例上没有点击事件监听器,这就是您“无法”点击它的原因。通过将“mouseChildren”设置为true可能不会执行任何操作,因为默认情况下此变量可能已经为真。

将来,您将拥有多少栋房屋/建筑物?如果它很多,我不确定这条路可能是最有效率的。

答案 1 :(得分:0)

要使用数组放置房屋,请查看此示例:

city.addEventListener(MouseEvent.CLICK, mouseClickEvent);
function mouseClickEvent(e: MouseEvent): void {

    // it's better to use switch than many if
    switch (build){

        case 0 : 

            return;
            break;

        case 1 :    // create a new house

            build = 0;

            // it's better for class name to be capitalized
            var house:House = new House();  
                house.x = stage.mouseX;
                house.y = stage.mouseY;
            addChild(house); 

            // DisplayObjectContainer.mouseChildren : 
            // is used to enable mouse or user input device for the children of the object and It's enabled by default, so you don't need it
            //house.mouseChildren = true;

            // add your house to the houses array
            houses.push(house);

            break;
    }

}

do_some_actions_with_houses();

function do_some_actions_with_houses():void {
    for(var i:int = 0; i < houses.length; i++){
        var house:House = houses[i];
            // add a name to your house
            house.name = 'house_' + i;
            // add an mouce click event listener
            house.addEventListener(
                MouseEvent.CLICK, 
                function(e:MouseEvent):void {
                    trace(e.currentTarget.name);    // gives : house_0, house_1, ...
                }
            )
    }
}

我尝试使用此代码向您展示如何使用数组放置对象然后使用它执行某些操作,这是一个简单的示例,您必须改进并适应您的项目。

希望可以提供帮助。