Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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
Actionscript 3 AS3如何在不复制和粘贴代码的情况下向stage添加多个child_Actionscript 3 - Fatal编程技术网

Actionscript 3 AS3如何在不复制和粘贴代码的情况下向stage添加多个child

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

每次运行程序时,我都会在舞台上添加一个牛仔。我希望在我主持节目时,舞台上有5个牛仔。我知道我可以复制和粘贴代码4次,但我想知道是否有一个更短更快的方法来做到这一点

这是我的密码

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
返回一个事件对象,允许你访问点击事件的目标(牛仔点击),你只需要设置它的可见性。