Easeljs:Displayobject ontick事件在for循环中不起作用

时间:2013-01-02 08:18:05

标签: easeljs

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

我创建了一个简单的空间射击游戏with easeljs,当我试图创建多个子弹并为每个子弹分配一个onTick手柄时,我只重新放出一个子弹。这是代码:

//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);
    }

1 个答案:

答案 0 :(得分:0)

您还可以尝试使用中央自动收报机并循环浏览每个子弹元素并以此方式更新其位置。这是一个快速演示,将说明我的观点。

<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>

希望这有帮助。