-
Notifications
You must be signed in to change notification settings - Fork 1
Объекты
Как сохранить получаемые обьекты
Получение данных из итераторов
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 основных типа обьектов:
- Rect_ML - Прямоугольник
- Polygon_ML - Полигон
- Shape_ML - Круг (элипс)
- Polyline_ML - Линия образующая полигон
Как создавать обьекты разных форм в SFML вы можете прочитать тут
Все обьекты наследованы от структуры Objects_ML которая содержит в себе:
string sObjectGroupName; - Имя группы обьектов
string sName; - Имя обьекта задаваемое в редакторе
string sType; - Тип обьекта задаваемый в редакторе
int iID; - ID обьекта, устанавливается автоматически редактором
void* vData; - Сюда вы можете записать любые свои данные
Обьект Rect_ML наследуется от Objects и дополнительно содержит в себе следующие поля:
FloatRect fRect; - Прямоугольник обьекта
Texture* tTexture; - Текстура (nullptr)
Sprite* sSprite; - Спрайт (nullptr)
Это поле содержит в себе: 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 );
// Ваш код ...
Обьект Shape_ML наследуется от Objects и дополнительно содержит в себе следующие поля:
FloatRect fRect; - Хранит координаты и радиусы по ширине и высоте
Texture* tTexture;
left - Координата Х
top - Координата Y
width - Радиус по ширине
height - Радиус по высоте
Как создавать элипс написано здесь
Обьект Polygon_ML наследуется от Objects и дополнительно содержит в себе следующие поля:
Vector2f vPosition; - Координаты фигуры
ConvexShape cShape; - Многоугольная фигура
list<Vector2f> lShapePoints; - Содержит координаты точек фигуры
int iCountShapePoints; - Колличество точек
Создание многогранных фигур описано здесь
Обьект 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 так и остается таковой.