【问题标题】:JS - Shooting - mouseJS - 射击 - 鼠标
【发布时间】:2013-07-02 15:55:08
【问题描述】:

我遇到了问题。我将不胜感激。

我正在尝试从玩家位置射击到鼠标点击位置。代码没有给我任何错误,根据我的逻辑,它应该可以工作,但它没有

它创建了子弹对象,仅此而已。

//Bullets
   function bullet(id, color, size, speed, x, y, eX, eY) {
          this.id = id;           
          this.color = color;
          this.size = size;
          this.x = x;
          this.y = y;
          this.eX = eX;
          this.eY = eY;
          this.velocityX;
          this.velocityY;
          this.speed = speed;
      }

      var bulletList = []; 

      function addBullet(color, bsize, bspeed, x, y, eX, eY) {
          bulletList[bulletId] = new bullet(bulletId, color, bsize, bspeed, x, y, eX, eY);
          bulletId += 1;
      }

      function updateBullet(bullet, player)
      {
          var dx = (bullet.eX - player.x);
          var dy = (bullet.eY - player.y);
          var mag = Math.sqrt(dx * dx + dy * dy);              
          bullet.velocityX = (dx / mag) * speed;
          bullet.velocityY = (dy / mag) * speed;
          bullet.x += bullet.velocityX;
          bullet.y += bullet.velocityY;
      }

      // Add event listener for `click` events.
      canvas.onmousedown = function(e) {
          addBullet("black", 10, 2, playerList[0].x, playerList[0].y, e.x, e.y);
      }  
    //draw bullets (taken from drawFrame function)
                  $.each(bulletList, function (index, bullet) {  
                     updateBullet(bullet, playerList[0]);
                     ctx.fillStyle = bullet.color;
                     ctx.fillRect(bullet.x, bullet.y, bullet.size, bullet.size);
                  });  

【问题讨论】:

  • 您能否在 jsfiddle.com 上提供该问题的演示?
  • 这里是完整的代码:jsfiddle.net/LyUmZ,但由于某种原因,它没有画任何东西。
  • 为我工作。你用的是什么浏览器?
  • 试过 ff 和 chrome,没有为我画任何东西(jsfidle),你看到那里画的子弹了吗?

标签: javascript jquery mouse-cursor


【解决方案1】:

既然你已经在使用 jQuery,那就换行

canvas.onmousedown = function(e) {
    addBullet("black", 10, 2, playerList[0].x, playerList[0].y, e.x, e.y);
}  

$(canvas).mousedown(function (e) {
    addBullet("black", 10, 2, playerList[0].x, playerList[0].y, e.clientX, e.clientY);
});

并考虑将所有这些输入移动到一个参数对象中。

另外:永远不要在'if'中定义你的程序,而是取消'if not'!

工作版本:http://jsfiddle.net/LyUmZ/4/

编辑:如果 jsfiddle 不起作用,您可能遇到了浏览器/noscripts xss 防护,使用 xss->unsafe reload(在 firefox noscript 中)它应该可以工作。

【讨论】:

  • 谢谢,但为什么它不适用于 js 事件?但适用于 jquery 的
  • 实际上它使用相同的属性(clientX/Y),jQuery 解决方案只是更优雅、更安全和跨浏览器规范化。另一方面:如果您不确定对象的内容,请执行 console.log(my_object) 并使用 chrome dev 控制台或 firebug 来查看结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多