SFML и C++ Уроки \ Разработка игр › Форумы › Логика игр › Нужно с помощью класса создать группу юнитов.
В этой теме 0 ответов, 1 участник, последнее обновление Ilya Denisyuk 7 года/лет, 11 мес. назад.
-
АвторСообщения
-
В уроке №8 (постепенный переход к ООП и не только) показали, как создать класс, а из него “штамповать” player’ов. А как сделать так, чтобы с помощью класса я мог создать юнита, а из этого юнита сделать n-ное количество player’ов. Получается, что так как их “родителем” будет считаться объект unit, то у них будут одинаковые характеристики. Я так подозреваю, что нужно поработать с массивами… Вот только у меня это плохо получается.
Так как нужно преобразовать данный класс, чтобы он смог выполнить вышеописанную задачу?
C++12345678910111213141516171819202122232425262728293031323334353637////////////////////////////////////////////////////КЛАСС ИГРОКА////////////////////////class Player { // класс Игрокаpublic:float x, y, w, h, dx, dy, speed ; //координаты игрока х и у, высота ширина, ускорение (по х и по у), сама скоростьint dir ; //направление (direction) движения игрокаString File; //файл с расширениемImage image;//сфмл изображениеTexture texture;//сфмл текстураSprite sprite;//сфмл спрайтPlayer(String F, float X, float Y, float W, float H){ //Конструктор с параметрами(формальными) для класса Player. При создании объекта класса мы будем задавать имя файла, координату Х и У, ширину и высотуdx=0;dy=0;speed=0;dir=0;File = F;//имя файла+расширениеw = W; h = H;//высота и ширинаimage.loadFromFile("images/" + File);//запихиваем в image наше изображение вместо File мы передадим то, что пропишем при создании объекта. В нашем случае "hero.png" и получится запись идентичная image.loadFromFile("images/hero/png");image.createMaskFromColor(Color(41, 33, 59));//убираем ненужный темно-синий цвет, эта тень мне показалась не красивой.texture.loadFromImage(image);//закидываем наше изображение в текстуруsprite.setTexture(texture);//заливаем спрайт текстуройx = X; y = Y;//координата появления спрайтаsprite.setTextureRect(IntRect(0, 0, w, h)); //Задаем спрайту один прямоугольник для вывода одного льва, а не кучи львов сразу. IntRect - приведение типов}void update(float time) //функция "оживления" объекта класса. update - обновление. принимает в себя время SFML , вследствие чего работает бесконечно, давая персонажу движение.{switch (dir)//реализуем поведение в зависимости от направления. (каждая цифра соответствует направлению){case 0: dx = speed; dy = 0; break;//по иксу задаем положительную скорость, по игреку зануляем. получаем, что персонаж идет только вправоcase 1: dx = -speed; dy = 0; break;//по иксу задаем отрицательную скорость, по игреку зануляем. получается, что персонаж идет только влевоcase 2: dx = 0; dy = speed; break;//по иксу задаем нулевое значение, по игреку положительное. получается, что персонаж идет только внизcase 3: dx = 0; dy = -speed; break;//по иксу задаем нулевое значение, по игреку отрицательное. получается, что персонаж идет только вверх}x += dx*time;//то движение из прошлого урока. наше ускорение на время получаем смещение координат и как следствие движениеy += dy*time;//аналогично по игрекуspeed = 0;//зануляем скорость, чтобы персонаж остановился.sprite.setPosition(x,y); //выводим спрайт в позицию x y , посередине. бесконечно выводим в этой функции, иначе бы наш спрайт стоял на месте.}}; -
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.