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

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

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

Author24 — интернет-сервис помощи студентам
Я спокойно проходил туториал по 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2021, 00:08
Ответы с готовыми решениями:

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

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

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

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

13
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
23.08.2021, 20:41 2
Цитата Сообщение от SlideeeX Посмотреть сообщение
Я бы хотел узнать, как мне главное вывести саму карту (map.tmx) на экран
покажите этот файл.
0
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2
23.08.2021, 21:07  [ТС] 3
Вот файл. Я примерно выучил, как работают команды 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!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
23.08.2021, 22:13 4
Лучший ответ Сообщение было отмечено 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;
}
Как подключить карту из Tiny Map Editor в код?
1
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2
23.08.2021, 23:22  [ТС] 5
У меня с этими вещами небольшие проблемы, компилятор ругается

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




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!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
23.08.2021, 23:28 6
Цитата Сообщение от SlideeeX Посмотреть сообщение
компилятор ругается
какая у вас версия компилятора???
0
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2
23.08.2021, 23:30  [ТС] 7
Цитата Сообщение от XLAT Посмотреть сообщение
какая у вас версия компилятора???
В самом Dev у меня пишет TDM-GCC 4.7.1
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
23.08.2021, 23:35 8
Цитата Сообщение от 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  [ТС] 9
Я скачивал по ссылке, не знаю, что не так. Может я не настроил?
Миниатюры
Как подключить карту из Tiny Map Editor в код?  
Изображения
 
0
4 / 3 / 1
Регистрация: 19.08.2021
Сообщений: 40
Записей в блоге: 2
23.08.2021, 23:49  [ТС] 10
Цитата Сообщение от SlideeeX Посмотреть сообщение
Может я не настроил?
Да, ошибочка вышла, теперь стоит 4.9.2, но ошибки те же
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
24.08.2021, 00:06 11
===
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
24.08.2021, 00:07 12
SlideeeX,
сделайте:
раз:
Как подключить карту из Tiny Map Editor в код?

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

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

Решение

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

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

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

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

Цитата Сообщение от XLAT Посмотреть сообщение
или этих функций
фишка в том, что вы всегда вольны добавить то(любые функции), что вам не хватает в текущий момент ...
1
24.08.2021, 00:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2021, 00:22
Помогаю со студенческими работами здесь

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

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

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

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

SFML + Tiled Map Editor + tinysml2 (трабл с версиями)
Здравствуйте, я сейчас разбираю уроки по SFML...

Map Editor -пробная версия ( jQuery, HTML, CSS)
Вот сделал вчера часов за 5 под влиянием вдохновения &quot;такую рисовалку карт&quot; 8-) Для:...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru