Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用object.width在JavaScript中返回NaN_Javascript_Arrays_Width_Collision_Createjs - Fatal编程技术网

调用object.width在JavaScript中返回NaN

调用object.width在JavaScript中返回NaN,javascript,arrays,width,collision,createjs,Javascript,Arrays,Width,Collision,Createjs,我目前正在做一个游戏,游戏中有一艘火箭飞船在移动,物体(圆圈)从顶部掉落。这个游戏的目标是当物体从屏幕上落下时不要击中它们。我在编写碰撞算法时遇到了问题 function checkCollision() { for (i = 0; i < projectiles.length; i++) { var p = projectiles[i]; if((p.x + p.width) < ship.x) {

我目前正在做一个游戏,游戏中有一艘火箭飞船在移动,物体(圆圈)从顶部掉落。这个游戏的目标是当物体从屏幕上落下时不要击中它们。我在编写碰撞算法时遇到了问题

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);
        }
我已经声明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);
        }
函数checkCollision()
{
对于(i=0;i(ship.x+ship.width))
{
命中=错误;
}
否则如果(p.y>(船舶y+船舶高度))
{
命中=错误;
}
否则,如果((p.y+p.H)<船舶y)
{
命中=错误;
}
否则{
控制台日志(ship.x+ship.width);
}

的文档中不存在
.width
.height
的属性。相反,请访问已定义宽度和高度属性的属性:
ship.image.width
ship.image.height

文档中不存在
.width
的属性
.height
。取而代之的是访问其定义了宽度和高度属性的属性:
ship.image.width
ship.image.height
如果对象是EaselJS位图,则可以使用
getBounds()
检索物理大小。此方法适用于某些EaselJS显示对象(即,不是形状,精度随文本而变化)

注:

  • 每@斯宾塞的消息,你可以访问<代码>图像,并获得宽度/高度,但它将是图像的原始大小,因此,如果您转换位图实例或父容器中的任何一个,则该值将是错误的。<代码> GETBILLATION/CODE >将考虑缩放变换(如果存在)
  • 如果项目旋转,则值可能不正确
  • 边界基于注册点,因此x/y可能不是零
  • 如果尚未加载图像,则宽度/高度将为0
对于投射物,如果它是形状,边界将始终为空,但如果您知道边界,可以手动设置边界,并将正确计算/转换边界:

var p = new createjs.Shape();
p.graphics.beginFill("red").drawCircle(0,0,20);
p.setBounds(new createjs.Rectangle(-20,-20,40,40));

这里有一些关于为什么没有
.width
.height
的信息:

如果对象是EaselJS位图,可以使用
getBounds()
检索物理大小。此方法适用于某些EaselJS显示对象(即,不是形状,精度随文本而异)

注:

  • 每@斯宾塞的消息,你可以访问<代码>图像,并获得宽度/高度,但它将是图像的原始大小,因此,如果您转换位图实例或父容器中的任何一个,则该值将是错误的。<代码> GETBILLATION/CODE >将考虑缩放变换(如果存在)
  • 如果项目旋转,则值可能不正确
  • 边界基于注册点,因此x/y可能不是零
  • 如果尚未加载图像,则宽度/高度将为0
对于投射物,如果它是形状,边界将始终为空,但如果您知道边界,可以手动设置边界,并将正确计算/转换边界:

var p = new createjs.Shape();
p.graphics.beginFill("red").drawCircle(0,0,20);
p.setBounds(new createjs.Rectangle(-20,-20,40,40));

这里有一些关于为什么没有
.width
.height
的信息:

什么是
ship
??我认为问题出在
.x
.y
而不是
.width
.height
!ship
的值是什么?它是如何定义的?它不仅仅是“图像”,它是一个JavaScript对象。请提供更多详细信息。如果我只使用console.log(ship.x)或console.log(p.x),它将显示正确的x值,正如它们在consolequeue=new createjs.LoadQueue(false);queue.addEventListener(“complete”,init);queue.loadManifest([{id:“ship”,src:“ship.png”})中应该显示的那样)什么是
ship
?我认为问题出在
.x
.y
而不是
宽度
高度
!ship
的值是什么?它是如何定义的?它不仅仅是一个“图像”,而是一个JavaScript对象。提供更多细节。如果我只是使用console.log(ship.x)或console.log(p.x)它将在控制台equeue=new createjs.LoadQueue(false);queue.addEventListener(“complete”,init);queue.loadManifest([{id:“ship”,src:“ship.png”}]中显示正确的x值;我在获取射弹值方面仍然存在问题。在调用p.x时,它每次返回0,p.width返回NaNAre
p
ship
的类型相同?如果是这样,还可以使用
p.image.width
,至于
p.x
为什么为零,可能需要单独提问,因为没有提供任何信息关于更新射弹阵列。对于新问题,请在SO上添加新帖子,而不是取消接受我的回答…我在获取射弹值方面仍然存在问题。调用p.x时,它每次返回0,p.width返回NaNAre
p
ship
相同的类型。如果是,请在ter中使用
p.image.width
为什么
p.x
为零的ms可能需要单独提问,因为没有提供任何关于更新项目的信息