Actionscript 3 AS3如何在不复制和粘贴代码的情况下向stage添加多个child
每次运行程序时,我都会在舞台上添加一个牛仔。我希望在我主持节目时,舞台上有5个牛仔。我知道我可以复制和粘贴代码4次,但我想知道是否有一个更短更快的方法来做到这一点 这是我的密码Actionscript 3 AS3如何在不复制和粘贴代码的情况下向stage添加多个child,actionscript-3,Actionscript 3,每次运行程序时,我都会在舞台上添加一个牛仔。我希望在我主持节目时,舞台上有5个牛仔。我知道我可以复制和粘贴代码4次,但我想知道是否有一个更短更快的方法来做到这一点 这是我的密码 package { import flash.display.Sprite; import flash.events.Event; import flash.display.Bitmap; import flash.ui.Mouse; import flash.events.Mo
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.display.Bitmap;
import flash.ui.Mouse;
import flash.events.MouseEvent;
/**
* ...
* @author Callum Singh
*/
public class Main extends Sprite
{
public var gun:crosshair;
public var cowboy:enemy;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
gun = new crosshair();
stage.addChild (gun);
addEventListener(Event.ENTER_FRAME, moveCrosshair);
cowboy = new enemy();
cowboy.x = Math.random() * 600;
cowboy.y = Math.random() * 400;
stage.addChild(cowboy);
cowboy.addEventListener(MouseEvent.CLICK, handleShoot);
}
private function moveCrosshair(e:Event):void
{
gun.x = mouseX -120;
gun.y = mouseY -115;
Mouse.hide();
}
private function handleShoot(e:MouseEvent):void
{
if (e.target == cowboy)
{
cowboy.visible = false;
}
}
}
}
基本for循环应该可以做到这一点
for(var i:uint = 0; i < 5; ++i) {
cowboy = new enemy();
cowboy.x = Math.random() * 600;
cowboy.y = Math.random() * 400;
stage.addChild(cowboy);
cowboy.addEventListener(MouseEvent.CLICK, handleShoot);
}
for(变量i:uint=0;i<5;++i){
牛仔=新的敌人();
cowboy.x=Math.random()*600;
cowboy.y=Math.random()*400;
舞台:阿迪奇尔德(牛仔);
cowboy.addEventListener(MouseEvent.CLICK,handleShoot);
}
虽然Iggy是正确的,但它不会像您根据代码的其余部分所期望的那样工作。如果单独使用,它仍然会得到5个牛仔,但只创建1个牛仔引用cowboy
是一个类变量,执行他的代码只会在每次循环中覆盖cowboy变量
您需要保存每个牛仔实例。基本方法是将它们存储到数组或向量中。您也可以通过名称引用它们(如果您正在设置它的话)。从上面的代码来看,这里只是考虑了这两个选项的调整
public class Main extends Sprite
{
public var gun:crosshair;
public var cowboys:Array; // Array to hold all your cowboys
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
gun = new crosshair();
stage.addChild (gun);
addEventListener(Event.ENTER_FRAME, moveCrosshair);
cowboys = new Array();
for(var i:uint = 0; i < 5; ++i) {
var cowboy:enemy = new enemy();
cowboy.x = Math.random() * 600;
cowboy.y = Math.random() * 400;
cowboy.name = "cowboy" + i; // assuming that your enemy class extends DisplayObject types
stage.addChild(cowboy);
cowboy.addEventListener(MouseEvent.CLICK, handleShoot);
cowboys.push(cowboy);
}
}
public类主扩展Sprite
{
公共var枪:十字线;
public var cowboys:Array;//用于容纳所有牛仔的数组
私有函数init(e:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);
枪=新十字线();
stage.addChild(枪);
addEventListener(Event.ENTER_FRAME,moveCrosshair);
牛仔=新阵列();
对于(变量i:uint=0;i<5;++i){
var牛仔:敌人=新敌人();
cowboy.x=Math.random()*600;
cowboy.y=Math.random()*400;
cowboy.name=“cowboy”+i;//假设您的敌人类扩展了DisplayObject类型
舞台:阿迪奇尔德(牛仔);
cowboy.addEventListener(MouseEvent.CLICK,handleShoot);
牛仔。推(牛仔);
}
}
你考虑过使用循环吗?谢谢你的帖子!调整后屏幕上出现了5个牛仔,但现在我遇到了麻烦,当你点击他们时,他们不会消失。你能解释一下原因吗?私有函数handleShoot(e:MouseEvent):void{e.target.visible=false;}谢谢你的帮助,我很感激!因为牛仔已经不存在了。你现在有一个牛仔数组。在任何情况下,e
返回一个事件对象,允许你访问点击事件的目标(牛仔点击),你只需要设置它的可见性。