javascript为我的游戏OOP创建一个对象

时间:2011-02-21 01:31:34

标签: javascript oop

我正在寻找一些示例或示例代码,以便为我的游戏正确组织代码。

我有一个游戏:

var gameStructure = function () {
  this.playerLife = 100;
}

如何创建新的游戏实例(因为会有多个游戏进行?)

var gameInstance = new gameStructure();

我如何格式化游戏操作的代码?

var attackPlayer = function (damage) {
    this.playerLife = this.playerLife - damage;
}

gameInstance.attackPlayer(50);

这不是真正的代码,我确定这是完全错误的,而不是你应该如何做javascript代码。我很困惑的一件事是如何创建多个gameInstances。我不知道如何将变量设置为变量。

我的意思是我需要:

var gameInstance1
gameInstance2

等等,根据玩家的数量而定。

现在我实际上是将游戏实例存储在数组中。

所以我有:

var gameInstances = [], gameid

var createNewGame = function () {
  gameInstances.push(gameInstanceName);
  gameid = gameInstances.indexOf(gameInstanceName); 
}

然后我通过gameInstances [gameid]引用我的游戏实例对象。

可以做或者是不可取的,我应该使用OOP与new关键字进行实例化。

谢谢,请告知!

2 个答案:

答案 0 :(得分:2)

JavaScript中的OOP等效项会将attackPlayer函数附加到gameStructure的{​​{1}}:

prototype

gameStructure.prototype.attackPlayer = function (damage) { this.playerLife = this.playerLife - damage; }; 的所有实例都将继承gameStructure函数,而attackPlayer将正确引用该实例。

您的this函数只需调用createNewGame并将结果推送到数组即可。 new gameStructure()只是数组中的索引,可以从函数返回:

gameid

使用上面的代码,用法如下:

var gameInstances = [];

var createNewGame = function () {
    gameInstaces.push(new gameStructure());
    return gameInstances.length - 1;
};

答案 1 :(得分:0)

在Javascript中,您可以使用类似对象的功能:

function Vector2(x, y) // Constructor
{
    // Member variable
    this.x = x;
    this.y = y;

    Vector2.count++;

    // Member function
    this.length = function ()
    {
        return Math.sqrt(this.x*this.x + this.y*this.y);
    }
}
// Static members
Vector2.count = 0;

// Static Functions
Vector2.add = function (a, b)
{
    // Instantiation
    return new Vector2(a.x + b.x, a.y + b.y);
}


function Point(x, y)
{
    this.x = x;
    this.y = y;
}

// Single Inheritance
Point.prototype = new Vector2();

Point.distanceBetween = function (a, b)
{
    var diff = new Vector2(b.x - a.x, b.y - a.y);
    return diff.length();
}

Javascript中关于OOP的最奇怪的事情是它自身的功能是构造函数。我希望这会有所帮助。