easeljs:displayObject ontick事件不适用于循环



我是一个新手,我的英语很糟糕,但希望您能理解我的问题

我使用Easeljs创建了一个简单的太空射击游戏,当我尝试创建多个子弹并为每个子弹分配一个手柄时,我只能放出一个子弹射击。这是代码:

//handle fire(shooting)
    if(fire && cd === 0){
        for(var i=0; i<5; i++){
                    //codartjs.Bullet is a class extend createjs.Bitmap
        var b = new codartjs.Bullet(bullet_img);
        b.x = 200;
        b.y = 200;
        stage.addChild(b);
        b.onTick = function(){
                            //this event handler work for only first instance
            b.y -= 10;
        };
        }
        cd = 100;
        setTimeout(function(){
            cd = 0;
        },100);
    }

您还可以尝试将中央股票程序和循环通过每个子弹元素,然后以这种方式更新其位置。这是快速演示,可以说明我的观点。

<script>
    var canvas, stage;
    var bullets;
    var speed;
    function init() {
        stage = new createjs.Stage("test");
        bullets = [];
        var bg = new createjs.Shape();
        bg.graphics.beginFill("#FFFFFF").drawRect(0, 0, stage.canvas.width, stage.canvas.height).endFill();
        bg.cache(0, 0, stage.canvas.width, stage.canvas.height);
        speed = 15;
        stage.onClick = handleClick;
        stage.mouseEnabled = true;
        stage.enableMouseOver(10);
        createjs.Ticker.setFPS(24);
        stage.addChild(bg);
        createjs.Ticker.addListener(window);
    }
    function getSprite() {
        var s = new createjs.Shape();
        s.graphics.beginFill("#000000").drawCircle(0, 0, 10).endFill();
        return s;
    }
    function tick() {
        for(var i=0;i<bullets.length;i++) {
            var s =  bullets[i];
            s.x += speed;
        }
        stage.update();
    }
    function handleClick(event) {
        var s = getSprite();
        s.x = event.stageX;
        s.y = event.stageY;
        bullets.push(s);
        stage.addChild(s);
    }
</script>

希望这会有所帮助。

最新更新