Форум программистов, компьютерный форум, киберфорум
SFML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2

Как подключить карту из Tiny Map Editor в код?

21.08.2021, 00:08. Показов 3510. Ответов 13

Студворк — интернет-сервис помощи студентам
Я спокойно проходил туториал по SFML, но на уроке с созданием карты для игры я застрял. Все библиотеки TinyXML, что там были, 2016 года. Я установил и подключил последнюю версию tinyxml2, но level.h, который был в туториале естественно не подошел, да и просто подключить его к своему проекту и пользоваться, это ни о чем. Вот простейший код для начала:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <SFML/Graphics.hpp>
 
using namespace sf;
 
int main()
{
    
    RenderWindow game(VideoMode(640, 480), "Game");
    
    while (game.isOpen())
    {
        Event event;
        while (game.pollEvent(event)) { if (event.type == Event::Closed) game.close(); }
        
        game.clear();
        game.draw();
        game.display();
        
    }
    return 0;
Я бы хотел узнать, как мне главное вывести саму карту (map.tmx) на экран, ну и как дальше пользоваться возможностями tinyxml2, взаимодействовать с тайлами карты, создавать коллизию для персонажа для объектов из map.tmx и т.д. Подкиньте пожалуйста вывод карты на экран, и где мне прочитать на простом языке о функциях tinyxml2, чтобы понимать коды программ с tinyxml2 и уметь ими пользоваться.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.08.2021, 00:08
Ответы с готовыми решениями:

Как загрузить карту, сделанную в Tiled Map Editor (в формате XML), в проект Visual Studio?
Здравствуйте, я разрабатываю игру, для нее сделал карту в Tiled Map Editor в формате XML, мне сказали скачать библиотеку TinyXML и...

Кто-то когда-нибудь работал с tiny bootstrap editor?
Всем привет, дорогие друзья. Кто-нибудь когда-нибудь работал с вот таким редактором текстов от бутстрапа:...

Как читать повернутые тайлы Tiled Map Editor?
Например имеется таил с ID: 2, если я его поверну вправо он записывается как ID: 1610612738, каким образом это получается? НА офф сайте...

13
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
23.08.2021, 20:41
Цитата Сообщение от SlideeeX Посмотреть сообщение
Я бы хотел узнать, как мне главное вывести саму карту (map.tmx) на экран
покажите этот файл.
0
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2
23.08.2021, 21:07  [ТС]
Вот файл. Я примерно выучил, как работают команды TinyXML2, но все еще не понимаю, как их выводить. Вот я эксперементирую:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "tinyxml2.h"
#include <iostream>
 
using namespace tinyxml2;
 
int main()
 
{
    XMLDocument doc;
    doc.LoadFile("map.xml"); // подключил документ
    
    XMLElement*element = doc.FirstChildElement("?xml");
    element = element->FirstChildElement("map");
    element = element->FirstChildElement("tileset");
    element = element->FirstChildElement("layer");
    element = element->FirstChildElement("data");
    element = element->FirstChildElement("tile"); // пошагово вел к тайлу
    
    while (element != NULL) //пока элемент не равен ничему, выполнять цикл 
    {
        std::cout << "boom" << std::endl; // вывести слово
        
        element = element->NextSiblingElement("tile"); // следующий тайлик
    }
    
    
    return 0;
}
Я привел элемент element к строке tile, но он все равно не перебирает, а точнее std::cout просто не выполняется. Что я упустил?
Вложения
Тип файла: rar map.rar (829 байт, 8 просмотров)
0
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
23.08.2021, 22:13
Лучший ответ Сообщение было отмечено SlideeeX как решение

Решение

Цитата Сообщение от SlideeeX Посмотреть сообщение
map.rar
ну для такого можно и ещё меньше, чем тини:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/// C++17
/// На коленке - без дизайнокода ...
/// Читаем данные из map.tmx в вектор ...
#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
#include <fstream>
 
#define  l(v) std::cout << std::setw(8) << #v << " = "\
                        << std::setw(5) << (v) << ",  ";
 
struct Rect{ int left, top, width, height;};
 
#include <windows.h>
std::wstring get_wstr(std::string& str)
{   size_t len = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, 0, 0);
    std::wstring unicode_text(len, ' ');
    MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, &unicode_text[0], len);
    return unicode_text;
}
 
int main()
{   setlocale(0,"");
 
    std::wstring s;
    {   std::ifstream ifs("map.tmx");
        if(!ifs)  std::cout << "ERROR: File open...\n";
        std::string ss; std::getline(ifs, ss, '\f');
        s = get_wstr(ss);
    }
 
    std::vector<Rect> m;
    {
        auto p = s.find(L"Слой объектов 1");
        auto e = s.find(L"</objectgroup>", p);
 
        for(; (p = s.find(L"x=", p)) < e;)
        {   Rect rect;
            p = s.find_first_not_of(L"\" ", p+2);
            rect.left = std::stoi(s.data()+p);
 
            l(rect.left)
 
            p = s.find(L"y=", p);
            p = s.find_first_not_of(L"\" ", p+2);
            rect.top = std::stoi(s.data()+p);
 
            l(rect.top)
 
            p = s.find(L"width=", p);
            p = s.find(L"\""    , p);
            p = s.find_first_not_of(L"\" ", p+1);
            rect.width = std::stoi(s.data()+p);
 
            l(rect.width)
 
            p = s.find(L"height=", p);
            p = s.find(L"\""     , p);
            p = s.find_first_not_of(L"\" ", p+1);
            rect.height = std::stoi(s.data()+p);
 
            l(rect.height)
 
            m.push_back(rect);
            std::cout << '\n';
        }
    }
 
    std::wcout << L"\nСлой объектов 1:\n";
    for(const auto& e : m)
    {   std::cout << std::setw(7) << e.left
                  << std::setw(7) << e.top
                  << std::setw(7) << e.width
                  << std::setw(7) << e.height << '\n';
    }
 
    return 0;
}
1
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2
23.08.2021, 23:22  [ТС]
У меня с этими вещами небольшие проблемы, компилятор ругается

(Я просто вставил код, я пока не знаю, как работать с этими функциями)




C:\Users\Kisud\Desktop\Game\read.cpp In function 'int main()':
35 14 C:\Users\Kisud\Desktop\Game\read.cpp [Error] 'p' does not name a type
36 14 C:\Users\Kisud\Desktop\Game\read.cpp [Error] 'e' does not name a type
38 16 C:\Users\Kisud\Desktop\Game\read.cpp [Error] 'p' was not declared in this scope
38 40 C:\Users\Kisud\Desktop\Game\read.cpp [Error] 'e' was not declared in this scope
41 25 C:\Users\Kisud\Desktop\Game\read.cpp [Error] 'stoi' is not a member of 'std'
47 24 C:\Users\Kisud\Desktop\Game\read.cpp [Error] 'stoi' is not a member of 'std'
54 26 C:\Users\Kisud\Desktop\Game\read.cpp [Error] 'stoi' is not a member of 'std'
61 27 C:\Users\Kisud\Desktop\Game\read.cpp [Error] 'stoi' is not a member of 'std'
71 25 C:\Users\Kisud\Desktop\Game\read.cpp [Error] range-based 'for' loops are not allowed in C++98 mode
72 40 C:\Users\Kisud\Desktop\Game\read.cpp [Error] request for member 'left' in 'e', which is of non-class type 'const int'
73 40 C:\Users\Kisud\Desktop\Game\read.cpp [Error] request for member 'top' in 'e', which is of non-class type 'const int'
74 40 C:\Users\Kisud\Desktop\Game\read.cpp [Error] request for member 'width' in 'e', which is of non-class type 'const int'
75 40 C:\Users\Kisud\Desktop\Game\read.cpp [Error] request for member 'height' in 'e', which is of non-class type 'const int'
0
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
23.08.2021, 23:28
Цитата Сообщение от SlideeeX Посмотреть сообщение
компилятор ругается
какая у вас версия компилятора???
0
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2
23.08.2021, 23:30  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
какая у вас версия компилятора???
В самом Dev у меня пишет TDM-GCC 4.7.1
0
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
23.08.2021, 23:35
Цитата Сообщение от SlideeeX Посмотреть сообщение
В самом Dev у меня пишет TDM-GCC 4.7.1
ох, ...

почему до сих пор нет?
https://www.cyberforum.ru/post15672063.html

обычно люди не знают и поэтому страдают,
а вот когда знают и всё равно страдают, то это необычно ...
0
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2
23.08.2021, 23:41  [ТС]
Я скачивал по ссылке, не знаю, что не так. Может я не настроил?
Миниатюры
Как подключить карту из Tiny Map Editor в код?  
Изображения
 
0
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2
23.08.2021, 23:49  [ТС]
Цитата Сообщение от SlideeeX Посмотреть сообщение
Может я не настроил?
Да, ошибочка вышла, теперь стоит 4.9.2, но ошибки те же
0
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
24.08.2021, 00:06
===
0
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
24.08.2021, 00:07
SlideeeX,
сделайте:
раз:

два:
-finput-charset=CP1251
1
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2
24.08.2021, 00:12  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
сделайте:
Работает, спасибо

Подскажите пожалуйста, мне tinyxml2 продолжить изучать или этих функций хватит для 2D игры?
1
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
24.08.2021, 00:22
Лучший ответ Сообщение было отмечено SlideeeX как решение

Решение

Цитата Сообщение от SlideeeX Посмотреть сообщение
Подскажите пожалуйста, мне tinyxml2 продолжить изучать или этих функций хватит для 2D игры?
если данные по сети передавать не будете, то ТОЧНО хватит.
а если будете, то тоже хватит.

xml хорош для передачи данных между разношёрстными системами,
а если данные будут крутиться внутри одной и той же программы, то он не нужен.

в вашем случае есть интерес - связка левого редактора с вашей игрой.
а почему бы и нет? не разобраться с тем же tinyxml2?

как говорится это дело вкуса ...

Цитата Сообщение от XLAT Посмотреть сообщение
или этих функций
фишка в том, что вы всегда вольны добавить то(любые функции), что вам не хватает в текущий момент ...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2021, 00:22
Помогаю со студенческими работами здесь

Как или где подключить Sprite Editor?
Нужно разрезать спрайт на тайлы, а спрайт эдитора нигде нет в инспекторе. Посмотрел в файлах - его там нет. Все перегуглил, инфы, где его...

Как приблизить карту Google Map в заданной точке?
Использую карту. Показывает карту мира. Хочу чтобы он показал например наш регион. (То есть сблизил карту на наш регион) как это делать ? ...

SFML+Tiled Map Editor
Здравствуйте Опишу ситуацию: Пытаюсь на курсач написать игру на С++ с использованием SFML, TinyXML и Tiled Map Editor по урокам...

Как получить адрес при нажатии на карту Yandex map во flutter?
Не могу найти решение по обратному кодированию координат в адрес в яндекс картах. И как можно при клике на Placemark сменить его значок ?

Как отсортировать карту( Map<String, Long> ) сначала по значениям, а потом по ключу
Добрый вечер. Интересует вопрос как отсортировать карту(Map&lt;String, Long&gt;) сначала по значениям, а потом по ключу. Я пробовал сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru