0

小さなゲームを作成しようとしています (魅力的なゲームを作成するというよりも、方法を学ぶことが重要です)。次のように再開できます: ユーザーはメニューで建物を選択し、ステージに配置します。新しく作成された建物をクリックすると、アップグレードを選択できます。(クラッシュ・オブ・クランのようなゲームをプレイする人のために、それは私がやろうとしていることです)。メニューがあり、問題なく建物を配置できますが、クリックできません。これが私のコードの始まりです:

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.
    }
};

私の問題は、たくさんの家 (および他の建物) があることです。私はそれらに名前を付けて配列にプッシュしようとしましたが (for each...in ループでそれらにアクセスできるように)、うまくいきません。

誰かがアイデアを持っていますか?(ちなみに、私はまだAS3を学んでいるので、まだタイムラインにある外部の.asファイルをまだ使用していません)。前もって感謝します :)

4

2 に答える 2

0

家の新しいインスタンスにはクリック イベント リスナーがありません。これが、クリックできない理由です。この変数はデフォルトですでに true になっている可能性があるため、「mouseChildren」を true に設定しても何も起こらない可能性があります。

将来、あなたは何軒の家/建物を建てる予定ですか? 数が多い場合、このパスが今後最も効率的であるかどうかはわかりません。

于 2015-03-29T09:37:08.660 に答える
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, ...
                }
            )
    }
}

このコードを使用して、配列を使用してオブジェクトを配置し、それを使用していくつかのアクションを実行する方法を示してみました。これは、改善してプロジェクトに適応させる必要がある簡単な例です。

それが役立つことを願っています。

于 2015-03-29T13:53:30.657 に答える