2013-01-02 15 views
1

工作,我是一个新手,我在英语可怕的,但希望你能理解我的问题Easeljs:displayObject的ontick事件不是循环

我创建了一个简单的太空射击游戏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); 
    } 
+0

解决了,只需在onTick处理程序中使用this.y - = 10 –

回答

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> 

希望这会有所帮助。