Skip to content

Объекты

eSkry edited this page Dec 11, 2016 · 24 revisions

Использование обьектов


Методы для получения обьектов

Object Rect_ML

Object Shape_ML

Object Polygon_ML

Object Polyline_ML

Как сохранить получаемые обьекты

Получение данных из итераторов


Методы для получения обьектов

list<Rect_ML*>      getRectsWithObjectGroup(string objGroup);
list<Rect_ML*>&     getRectsAll();
list<Rect_ML*>      getRectsWithType(string type);
list<Rect_ML*>      getRectsWithName(string name);
list<Rect_ML*>      getRectsWithID(int ID);

list<Polygon_ML*>   getPolygonsWithObjectGroup(string objGroup);
list<Polygon_ML*>&  getPolygonsAll();
list<Polygon_ML*>   getPolygonsWithType(string type);
list<Polygon_ML*>   getPolygonsWithName(string name);
list<Polygon_ML*>   getPolygonsWithID(int ID);

list<Shape_ML*>     getShapesWithObjectGroup(string objGroup);
list<Shape_ML*>&    getShapesAll();
list<Shape_ML*>     getShapesWithType(string type);
list<Shape_ML*>     getShapesWithName(string name);
list<Shape_ML*>     getShapesWithID(int ID);

list<Polyline_ML*>  getPolylineWithObjectGroup(string objGroup);
list<Polyline_ML*>& getPolylineAll();
list<Polyline_ML*>  getPolylineWithType(string type);
list<Polyline_ML*>  getPolylineWithName(string name);
list<Polyline_ML*>  getPolylineWithID(int ID);

В загрузчике имеется 4 основных типа обьектов:

  1. Rect_ML - Прямоугольник
  2. Polygon_ML - Полигон
  3. Shape_ML - Круг (элипс)
  4. Polyline_ML - Линия образующая полигон

Как создавать обьекты разных форм в SFML вы можете прочитать тут

Все обьекты наследованы от структуры Objects_ML которая содержит в себе:

string              sObjectGroupName; - Имя группы обьектов
string              sName;            - Имя обьекта задаваемое в редакторе
string              sType;            - Тип обьекта задаваемый в редакторе
int                 iID;              - ID обьекта, устанавливается автоматически редактором
void*               vData;            - Сюда вы можете записать любые свои данные

Object Rect_ML

Обьект Rect_ML наследуется от Objects и дополнительно содержит в себе следующие поля:

FloatRect           fRect;            - Прямоугольник обьекта
Texture*            tTexture;         - Текстура (nullptr)
Sprite*             sSprite;          - Спрайт (nullptr)

Поле fRect

Это поле содержит в себе: 4 переменных типа float: top, left, width, height

top - хранит положение обьекта по координате Y, left - по координате X, width и height соответственно ширина и высота обьекта.

Чтобы установить текстуру данного размера, вам понадобится только width и height, для текстур переменные top и left указываются вами, в соответствии нужного места в текстуре.

Пример использования:

// Ваш код ...
list<Rect_ML*> playerObj = level.getRectsWithType("player");
Rect_ML* player = (*playerObj.begin());

player->tTexture = new Texture;
player->sSprite = new Sprite;

FloatRect forTextue;
forTexture.left = 0; // Устанавливаем место в текстуре
forTexture.top = 0;  // Устанавливаем место в текстуре
forTexture.width = player->fRect.width;
forTexture.height = player->fRect.height;

player->tTexture->loadFromFile(" file texture ");
player->sSprite->setTexture( *player->tTexture );
player->setTextureRect(forTexture);
player->setPosition( player->fRect.left, player->fRect.top );
// Ваш код ...

Object Shape_ML

Обьект Shape_ML наследуется от Objects и дополнительно содержит в себе следующие поля:

FloatRect           fRect;      - Хранит координаты и радиусы по ширине и высоте
Texture*            tTexture;

Поле fRect

left - Координата Х
top - Координата Y
width - Радиус по ширине
height - Радиус по высоте

Как создавать элипс написано здесь


Object Polygon_ML

Обьект Polygon_ML наследуется от Objects и дополнительно содержит в себе следующие поля:

Vector2f            vPosition;            - Координаты фигуры
ConvexShape         cShape;               - Многоугольная фигура
list<Vector2f>      lShapePoints;         - Содержит координаты точек фигуры
int                 iCountShapePoints;    - Колличество точек

Создание многогранных фигур описано здесь


Object Polyline_ML

Обьект Polyline_ML своей структурой ничем не отличается от обьекта Polygon_ML.


Как сохранить получаемые обьекты

Если хотите сохранить получаемые обьекты то вам просто нужно будет создать контейнер list с нужным типом, нпример для хранения полигонов вам необходимо создать вот такую переменую:

list<Polygon_ML*> _name;

Для удобства имеется такие typedef:

typedef list<Objects_ML*>  LObjects;
typedef list<Rect_ML*>     LRect;
typedef list<Shape_ML*>    LElipse;
typedef list<Polygon_ML*>  LPolygon;
typedef list<Polyline_ML*> LPolyline;

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

LPolygon _name;

Получение данных из итераторов

 LPolygon polygons = level.getPolygonsAll();
 for (auto it = polygons.begin(); it != polygons.end(); it++){
     cout << (*it)->sName << ' ';
 }

Сперва разыменовываем итератор - (*it) и так как данные нашего контейнера указатели на сами обьекты то обращаемя к ним так же как бы мы обращались по указателю '->' т.е (*it)->тут_данные - которые есть в данном обьекте.


Если у вас что-то не работает то вероятнее всего у вас устаревшая версия. Некотоыре баги и недочеты исправляются, но версия как была например V6 так и остается таковой.