Перезапуск игры и восстановление объектов - PullRequest
4 голосов
/ 05 апреля 2011

Введение

Я создаю небольшую игру на C ++ и хотел бы создать функцию для перезапуска игры.

Сначала я создаю объект player.Затем у меня есть оператор if, чтобы определить, когда нажимается определенная клавиша для вызова метода New().

Моя цель

В этом методе я хотел бы восстановить объект класса Player, чтобы все переменные были сброшены.

Мой код:

Player player;

//New game method
Game::New()
{
    player = new Player();
}

//Game loop
Game::Loop()
{
    if(keyispressed(key))
    {
        Game.New();
    }
}

Есть предложения?

1 Ответ

4 голосов
/ 05 апреля 2011

Вы путаете переменные указателя и не указателя. new Player() возвращает адрес динамически размещенного объекта Player. Вы не можете присвоить этот адрес переменной без указателя player; вам нужно объявить player в качестве указателя:

Player* player = new Player();

Вы также должны помнить, чтобы освободить память, ранее выделенную с соответствующим delete:

// player starts out pointing to nothing
Player* player = 0;

//New game method
Game::New()
{
    // If player already points to something, release that memory
    if (player)
        delete player;

    player = new Player();
}

Теперь, когда player является указателем, вам придется обновить любой другой написанный вами код, использующий плеер, чтобы использовать -> оператор доступа к элементу . Например, player.name() станет player->name()

...