调用object.width在JavaScript中返回NaN

时间:2017-03-01 19:27:06

标签: javascript arrays width collision createjs

我目前正在研究一种与火箭船四处移动并且物体(圆圈)从顶部落下的游戏。这个游戏的目标是在物体落入屏幕时不会碰到物体。我在编写碰撞算法时遇到了问题。

我声明var hit = false;在我的代码顶部 我还将所有圆圈放入一个叫做射弹的阵列中。

我相信我的逻辑是正确的,但我发现在调用p.width或ship.width时它会返回NaN。我尝试过使用offsetWidth,但也没有用。我想知道如何获得对象的宽度

底部的else语句只是检查.width是否返回正确的数字。一旦我开始工作,它将被移除并替换为碰撞算法的最后部分。

function checkCollision()
{

    for (i = 0; i < projectiles.length; i++) {
        var p = projectiles[i];
        if((p.x + p.width) < ship.x)
        {
            hit = false;
        }
        else if(p.x > (ship.x + ship.width))
        {
            hit = false;
        }
        else if(p.y > (ship.y + ship.height))
        {
            hit = false;
        }
        else if((p.y + p.height) < ship.y)
        {
            hit = false;
        }
        else {
            console.log(ship.x + ship.width);
        }

2 个答案:

答案 0 :(得分:0)

createjs.Bitmap的文档中,.width.height不存在属性。而是访问已定义宽度和高度属性的.image (HTMLImageElement)属性:ship.image.widthship.image.height

答案 1 :(得分:0)

如果您的对象是EaselJS位图,则可以使用var bounds = ship.getBounds(); var w = bounds.width; 检索物理大小。此方法适用于某些 EaselJS显示对象(即,不是形状,精度因文本而异)。

.image

注意:

  • per @ Spencer的消息,您可以访问getBounds,并获取宽度/高度,但它将是图像的原始大小,因此如果您转换位图实例,或任何对于父容器,值将是错误的。 var p = new createjs.Shape(); p.graphics.beginFill("red").drawCircle(0,0,20); p.setBounds(new createjs.Rectangle(-20,-20,40,40)); 将考虑规模转换(如果存在)
  • 如果项目已旋转,则
  • 值可能不正确。
  • 边界基于注册点,因此x / y可能不为零。
  • 如果图像尚未加载,您的宽度/高度将为0

对于你的射弹,如果它是一个形状,边界将始终为空,但你可以手动设置它们,如果你知道它们,它们将被正确计算/转换:

.width

以下是有关没有.heightjson_encode()的原因的一些信息:http://blog.createjs.com/update-width-height-in-easeljs/