javascript создание объекта для моей игры ООП - PullRequest
1 голос
/ 21 февраля 2011

Я ищу несколько примеров или примеров кода для правильной организации кода для моей игры.

У меня есть игра:

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

Как создать новые игровые экземпляры (так как будет запущено несколько игр?)

var gameInstance = new gameStructure();

А как мне отформатировать код для игровых действий?

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

gameInstance.attackPlayer(50);

Это не настоящий код, я уверен, что все это неправильно, а не то, как вы вообще должны делать код JavaScript. Одна вещь, в которой я запутался, это то, как создать несколько игровых экземпляров. Я не знаю, как установить переменные в качестве переменных.

Я имею в виду, мне нужно:

var gameInstance1
gameInstance2

и т. Д., В зависимости от количества игроков.

Сейчас я на самом деле храню игровые экземпляры в массиве.

Итак, у меня есть:

var gameInstances = [], gameid

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

и затем я ссылаюсь на объект моего игрового экземпляра с помощью gameInstances [gameid].

Можно ли это делать или это нецелесообразно, и я должен использовать ООП с созданием экземпляра с новым ключевым словом.

Спасибо и, пожалуйста, посоветовали!

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Эквивалентом ООП в JavaScript будет функция attackPlayer для gameStructure 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;
};

С приведенным выше кодом, использование выглядит следующим образом:

var gameId = createNewGame();
gameInstances[gameId].attackPlayer(100);
0 голосов
/ 21 февраля 2011

В 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 - это то, что сама функция является конструктором. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...