1

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

我用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);
    }
4

1 回答 1

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>

希望这可以帮助。

于 2013-01-20T20:00:30.780 回答