使用easeljs和box2d,我创建了几个相互碰撞的对象。使用以下代码我在屏幕上创建一个框:
var b = new Box(400,0); // pass xPos and yPos
stage.addChild(b.view);
在我的脚本中的某个位置,该框与圆圈碰撞,当发生这种情况时,三角形必须向框中填充Tween。所以我需要盒子的位置!在我的Box.js
中,我有以下功能:
function getX(){
var xPos = this.body.GetPosition().x * SCALE;
return xPos;
}
我已为以下功能替换了相同的功能:
function getX(){
return this.x;
}
两个函数在使用console.log(b.getX);
的浏览器控制台时返回相同的值,这是未定义的。我需要使用return函数传递参数,还是我的函数结构不正确?
答案 0 :(得分: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/
首先,我将解释一下'属性'是。物业是一件事'由某个对象拥有。让我们定义一个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!
答案 1 :(得分:1)
与Kai的例子一起,我终于开始工作了!所以,谢谢凯!我使用他在最后编辑中显示的第三种方法,通过在我的框函数的tick函数中添加一个变量来进行一个小的工作。这是我做的:
在我的Box.js
我用box2d创建了一个b2_staticBody,我给它一个getX函数,它返回框的x位置。
this.getX = function(){
return boxX;
}
我的tick功能(用easeljs创建)更新了盒子的位置,所以在这里我将box.x保存到名为boxX的var中。
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帮助我了解如何解决我的问题并理解使用属性等。