EventListener 和动态添加的 MovieClips。 (AS3)
EventListener and Dynamically added MovieClips. (AS3)
我正在尝试制作一款小游戏(更多的是学习如何制作一款引人入胜的游戏)。它可以像这样恢复:
用户在菜单中选择一个建筑物并将其放置在舞台上。点击新建建筑时,s/he可以选择升级。 (对于那些玩 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.
}
};
我的问题是会有很多房子(和其他建筑物)。我试图命名它们并将它们放入一个数组中(这样我就可以使用 for each...in 循环访问它们),但它不起作用。
有人有想法吗? (顺便说一句,我还在学习 AS3,所以我还没有使用外部 .as 文件,仍在时间轴上)。
提前致谢:)
您的新房屋实例没有点击事件侦听器,这就是您 "can't" 点击它的原因。将 "mouseChildren" 设置为 true 可能不会执行任何操作,因为默认情况下此变量可能已经为 true。
以后,你会有多少个houses/buildings?如果它很多,我不确定这条路可能是最有效的。
要使用数组放置您的房屋,请查看此示例:
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, ...
}
)
}
}
我尝试使用这段代码来向您展示如何使用数组来放置您的对象,然后对其执行一些操作,这是一个您必须改进并适应您的项目的简单示例。
希望能帮到你。
我正在尝试制作一款小游戏(更多的是学习如何制作一款引人入胜的游戏)。它可以像这样恢复: 用户在菜单中选择一个建筑物并将其放置在舞台上。点击新建建筑时,s/he可以选择升级。 (对于那些玩 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.
}
};
我的问题是会有很多房子(和其他建筑物)。我试图命名它们并将它们放入一个数组中(这样我就可以使用 for each...in 循环访问它们),但它不起作用。
有人有想法吗? (顺便说一句,我还在学习 AS3,所以我还没有使用外部 .as 文件,仍在时间轴上)。 提前致谢:)
您的新房屋实例没有点击事件侦听器,这就是您 "can't" 点击它的原因。将 "mouseChildren" 设置为 true 可能不会执行任何操作,因为默认情况下此变量可能已经为 true。
以后,你会有多少个houses/buildings?如果它很多,我不确定这条路可能是最有效的。
要使用数组放置您的房屋,请查看此示例:
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, ...
}
)
}
}
我尝试使用这段代码来向您展示如何使用数组来放置您的对象,然后对其执行一些操作,这是一个您必须改进并适应您的项目的简单示例。
希望能帮到你。