使用easyljs和box2d,我创建了多个相互碰撞的对象。 使用以下代码,我在屏幕上创建一个框:

var b = new Box(400,0); // pass xPos and yPos
stage.addChild(b.view);

在脚本中的某个点处,框与一个圆碰撞,并且发生这种情况时,三角形必须向该框补间。 所以我需要盒子的位置! 在我的Box.js我具有以下功能:

function getX(){
    var xPos = this.body.GetPosition().x * SCALE;
    return xPos;
}

我已将相同的功能替换为以下功能:

function getX(){
    return this.x;
}

当我使用console.log(b.getX);到浏览器控制台时,这两个函数返回相同的值console.log(b.getX); ,这是未定义的。 我需要使用返回函数传递参数还是函数的结构不正确?

===============>>#1 票数:4 已采纳

您说的是console.log(b.getX),

首先,您不执行该功能,而是记录其内容。 其次,该函数不是var b的属性。

// create the function.
b.getX = function()
{
 this.x;
};

// runs the command.
b.getX();

编辑:

Jsfiddle解释了您做错了什么: http : //jsfiddle.net/kychan/zsWpN/

编辑2:

首先,我将解释什么是“财产”。 属性是某个对象拥有的“事物”。 让我们定义一个var并实例化它:

var x = {}; // this makes an object.

我们还可以添加属性:

var y = {myProp1:'Hello', myProp2:'World'};

这将创建一个具有两个属性(myProp1和myProp2)的对象(y)。

现在,在您的代码(jsfiddle)中,您具有(全局)函数getX。 这不是设置为属性,因此必须将其称为全局语句:

getX(b); // should return this.x;

摆弄更详尽的解释: http : //jsfiddle.net/kychan/WwxC9/

//    METHOD 1 (Your method); works, but you can do it more directly, see METHOD 2.
//    define the var, with 'var'.
//    let it hold a (global) function.
var getX = function(object){
    return object.x;
};

//    we make a test variable holding an object with property x:
var foo = {x:4};
console.log(getX(foo)); // this should return 4.

//    METHOD 2:
//    we will make a normal function (which has the same execution as METHOD 1).
function getX2(o)
{
    return o.x;
}

//    create a test variable.
var bar = {x:4};
console.log(getX2(bar)); // should print 4 as well.

//   METHOD 3:
//    now we create a CLASS which has a default property named getX:
function myObject()
{
    this.x     = 4;

    //    here, this is called a method (because it is a property owned by a class/object).
    this.getX  = function()
    {
        return this.x;
    };
}

//    we create a test variable holding the object from the class myObject.
var baz = new myObject();
console.log(baz.getX()); // now it ALSO should print 4!

===============>>#2 票数:1

连同Kai的例子,我终于使它起作用了! 所以,谢谢凯! 我使用了他在最终编辑中显示的第3种方法,并通过在box函数的tick函数中添加变量进行了一些改动。 这是我所做的:

Box.js我使用box2d创建了b2_staticBody,并为其提供了一个getX函数,该函数返回box的x位置。

this.getX = function(){
    return boxX;
}

我的tick函数(使用easyljs创建)更新了盒子的位置,因此在这里我将box.x保存到一个名为boxX的变量中。

function tick(e){
    boX = this.body.GetPosition().x * SCALE;

    this.x = this.body.GetPosition().x * SCALE;
    this.y = this.body.GetPosition().y * SCALE;
    this.rotation = this.body.GetAngle() * (180/Math.PI);
}

现在,我可以调用b.getX(); 创建盒子后起作用。

b = new Box(350,450); // x and y position
stage.addChild(b.view);
var targetX = b.getX();
console.log(targetX);

再次感谢Kai帮助我了解如何解决我的问题以及了解如何使用属性等。

  ask by Tomjesch translate from so

未解决问题?本站智能推荐:

1回复

Box2dWeb自定义形状交互

我有一个带有自定义形状主体的Box2DWeb模拟,但它根本不与其他主体交互。 调试图显示已检测到冲突,但无效。 阅读自定义形状后,我没有找到任何设置来启用碰撞,我也不知道哪里出了问题。 自定义形状主体是这样创建的,我还在此处发布了示例:
1回复

对象碰撞时的Box2dWeb调用函数

我对javascript和box2d相当陌生,我想知道是否有人知道当两个对象碰撞时如何调用自定义函数。 我尝试使用一些使用b2ContactListener而不成功的示例。 我已经将一个对象放置在另一个对象之上,然后让标准的Box2d物理学完成了它。 我收到两个控制台输出,第一个为nu
2回复

在JavaScript函数中返回未定义的值

我有以下代码: js负载: js函数: 返回函数undefined window.get_location命令也不起作用。
2回复

返回未定义的javascript函数[重复]

这个问题已经在这里有了答案: 如何从异步调用返回响应? 36个答案 我确定我做错了各种各样的事情,但是我有下面的函数在控制台中返回“ undefined”,即使它可以console.log()从函数中相同位置处获得所需的值,如代码中所注释。 另一个奇怪的事
1回复

为什么此javascript函数不断返回未定义的数组?

我有这个简单的函数“ decode”,它接受2个数组作为输入,其中第二个数组用于解码第一个数组。 起始输入(不是函数递归时)必须始终采用以下格式: 第一个数组的长度为1 第二个数组的长度是2的幂减去1(1、3、7、15,...) 输入示例: ([4],[0,2,6
1回复

角组件返回未定义

我有一个服务文件,该文件返回带有API和数组数据的两个函数。 在构造函数的组件内部,我启动一个服务,并尝试在该组件中的onInit上检索数据,第一个API函数返回并console.log数据没有问题,但是第二个函数getRatings()返回console.log中未定义的数据。 为什么?
2回复

javascript style.left返回未定义?

我已经将我的CSS左选择器设置为20%的值,但未定义 ? 我的代码: http://codepen.io/vincentccw/pen/ouhtk
1回复

从JavaScript中的回调返回是否未定义?

我有以下代码: 但是由于某种原因, test是不确定的。 我的AJAX确实可以工作,并且它返回一个对象。 有什么问题?
1回复

用于构建未定义的新JSON的函数

我有三个JSON文件。 我的目标是通过以某种方式组合来自它们的数据来创建一个新的。 充其量我认为我有正确的逻辑和语法可以合并数据(如果有误,请更正我),但是: 我不确切知道该函数return什么(如果有的话)。 即使功能正确且完整,我也不知道如何最终写入新文件。
1回复

Node.js request.post返回未定义

我正在尝试在node.js中返回另一个站点的发布请求的正文,但是下面的函数不返回任何内容 另一个站点正在接收发帖请求,当我使用console.log时,我也得到了正确的正文,但返回结果不起作用。 我究竟做错了什么?