我正在寻找一些示例或示例代码,以便为我的游戏正确组织代码。
我有一个游戏:
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关键字进行实例化。
谢谢,请告知!
答案 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的最奇怪的事情是它自身的功能是构造函数。我希望这会有所帮助。