Вопрос спрайтовых координат - PullRequest
0 голосов
/ 15 февраля 2019

Я создал класс для типа врага, используя allegro4 и C ++;в этом классе у меня есть функция, которая делает перемещение спрайта, например:

sprite_one(x, y); 
sprite_two(x2, y2);

class enemy{
    public:
    void mov(){
            x++;
            ----
            y--;
        }
    }        
};


enemy test_one;
test_one.mov();    // this works because its coordinates are x and y

enemy test_two;
test_two.mov();    // this doesn't work, its coordinates are x2 and y2 

Проблема в том, что когда я создаю объект, первый может перемещаться в соответствии с функцией (обновление переменных x и y), других нет, потому что они по-разному называют переменные позиций.Как я могу это исправить?

1 Ответ

0 голосов
/ 15 февраля 2019

Ваш класс enemy должен иметь координаты x и y в качестве переменных-членов.Таким образом, каждый фактический враг получает свои собственные координаты отдельно от всех остальных.Следующий код должен как минимум запустить вас.Предположительно вы захотите добавить открытую функцию для печати координат или для рисования врага на экране.

class enemy
{
    int mx, my; // coordinates of this enemy
public:
    enemy(int x, int y)
        : mx(x), my(y) // initialize the coordinates
    {
        // possibly add future initialization here
    }
    void mov()
    {
        ++mx;
        --my;
    }
}

Затем вы можете создавать и перемещать двух врагов, как и раньше:

enemy test_one(x,y);
test_one.mov();

enemy test_two(x2,y2);
test_two.mov();

Обратите внимание, что x,y,x2,y2 больше не являются переменными, хранящими текущие позиции врагов, а являются константами, определяющими их начальные позиции.

...