1

我正在尝试使用 OOP 和 html5 画布在 JavaScript 中制作游戏。我无法继续游戏,因为我被困在一个地方。我的问题是如何更改从函数返回值的方法 xPosition 的值。您可以在下面找到一些代码。

var myObject = {
    //placing object in start position 
    xPosition : function(){
         return Canvas.width / 2;
    },
    //if keycode pressed move myObject to the left
    move : function(){
         xPosition -= 10; //I know this wont work
    }
};
4

2 回答 2

2

您不能在不更改(即覆盖)xPosition方法本身的情况下更改返回值。

但是,您可以轻松获得一个值,然后更改它:

… move: function(){
     var xval = this.xPosition();
     xval -= 10; // this works, reassigning to the "xval" variable (xval=xval-10)

     // or in one step:
     var xval = this.xPosition() - 10;
}

或者您更改函数的输入值。让它根据画布大小和存储在变量(或更简单:在属性中)中的相对位置计算当前位置,然后仅从move函数中更改该变量/属性:

var myObject = {
    // placing object in start position
    xPos: 0,
    getXPosition: function() { // compute value from canvas and position
         return Canvas.width / 2 + this.xPos; // or something similar
    },
    move : function() {
         // change relative position
         this.xPos -= 10;
    }
};
于 2013-02-05T09:47:00.723 回答
1

您需要引用对象的正确范围。this 关键字将引用 myObject 范围。

您还调用了一个函数,因此需要添加括号。

您的另一个问题是您正在调用一个函数并尝试更新该值。您要么需要将 xPosition 分配为变量,要么传入新值。

    move : function(){
         this.xPosition(-10); 
    }

看看这些关于构建 javascript 的文章

  1. 第1部分
  2. 第2部分
  3. 第 3 部分
  4. 第 4 部分

如果您正在处理 x,y 位置并且正如您所说您正在制作游戏,我会使用向量来管理您的游戏对象。vecotr 库将为您处理所有数学运算。加法、减法、乘法等。

那里有很多矢量库,或者您可以构建自己的。 矢量数学

于 2013-02-05T09:26:11.403 回答