1

私は初心者で、英語が苦手ですが、私の問題を理解していただければ幸いです

複数の弾丸を作成し、それぞれに onTick ハンドルを割り当てようとすると、1 つの弾丸だけが発射されます。コードは次のとおりです。

//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 に答える