0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
1

Проблема с картой!

17.05.2022, 20:53. Показов 674. Ответов 16

При компиляции выдает "Исключение не обработано.Вызвано необработанное исключение:нарушение доступа для чтение (this было 0x50)" в tinyxml.cpp.
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<SFML/Graphics.hpp>
#include "game.h"
 
 
int main() {
    srand(unsigned int(time(NULL)));
    Game game;
    game.run();
    
}

game.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef GAME_H
#define GAME_H
 
class Game {
private:
    sf::RenderWindow window;
    sf::Event event;
    sf::Clock time;
public:
    Game();
    void run();
};
 
#endif
game.cpp
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
#include<SFML/Graphics.hpp>
#include<vector>
#include "game.h"
#include "mainMenu.h"
#include"level.h"
 
 
Game::Game()
:window(sf::VideoMode(1920, 1080), "TD",sf::Style::Fullscreen)
{
}
 
void Game::run() {
    //////////////////////////////////ИНИЦИАЛИЗАЦАИЯ//////////////////////////////////
    Menu menu;
    Level level;
    level.LoadFromFile("Images/Map/map.tmx");
    //////////////////////////////////ОСНОВНОЙ ЦИКЛ//////////////////////////////////
    while (window.isOpen()) {
        
        while (menu.getIsMenu() == 1)
        {
            while (window.pollEvent(event)) {
                if (event.type == sf::Event::Closed) {
                    window.close();
                }
 
            }
            if (sf::IntRect(20, 20, 514, 100).contains(sf::Mouse::getPosition(window))) {
                menu.pressButton1();
                if (menu.pressButton1() == true && sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
                    window.clear();
                    menu.setIsMenu(0);
                }
            }
            else {
                menu.notpressButton1();
            }
            if (sf::IntRect(20, 400, 514, 100).contains(sf::Mouse::getPosition(window))) {
                menu.pressButton2();
                if (menu.pressButton2() == true && sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
                    window.close();
                }
            }
            else {
                menu.notpressButton2();
            }
            window.clear();
            window.draw(menu.getMenuBackground());
            window.draw(menu.getMenuFlag());
            window.draw(menu.getMenuButton1());
            window.draw(menu.getMenuButton2());
            window.display();
        }
 
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed) {
                window.close();
            }
 
        }
        window.display();
        level.Draw(window);
 
    }
}
mainMenu.h
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
#ifndef MAINMENU_H
#define MAINMENU_H
 
class Menu {
private:
    sf::Texture menuTextureBackground, menuTextureFlag, menuTextureButton1, menuTextureButton2;
    sf::Sprite menuBackground, menuFlag, menuButton1, menuButton2;
    int isMenu;
public:
    Menu();
    ~Menu();
    bool pressButton1();
    void notpressButton1();
 
    bool pressButton2();
    void notpressButton2();
 
    sf::Sprite getMenuBackground();
    sf::Sprite getMenuButton1();
    sf::Sprite getMenuButton2();
    sf::Sprite getMenuFlag();
    int getIsMenu();
    void setIsMenu(int _isMenu);
};
#endif
mainMenu.cpp
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
#include<SFML/Graphics.hpp>
#include "mainMenu.h"
 
Menu::Menu()
{
    isMenu = 1;
    menuTextureBackground.loadFromFile("Images/Menu/menu.jpg");
    menuTextureFlag.loadFromFile("Images/Menu/flag.jpg");
    menuTextureButton1.loadFromFile("Images/Menu/button1.jpg");
    menuTextureButton2.loadFromFile("Images/Menu/button2.jpg");
    menuBackground.setTexture(menuTextureBackground);
    menuFlag.setTexture(menuTextureFlag);
    menuButton1.setTexture(menuTextureButton1);
    menuButton2.setTexture(menuTextureButton2);
    menuFlag.setPosition(0, -150);
    menuButton1.setPosition(20, 20);
    menuButton2.setPosition(20, 400);
}
Menu::~Menu() {
 
}
 
bool Menu::pressButton1() {
    menuButton1.setColor(sf::Color::Green);
    return true;
}
void Menu::notpressButton1() {
    menuButton1.setColor(sf::Color::White);
}
bool Menu::pressButton2() {
    menuButton2.setColor(sf::Color::Green);
    return true;
}
void Menu::notpressButton2() {
        menuButton2.setColor(sf::Color::White);
}
 
sf::Sprite Menu::getMenuBackground() {
    return menuBackground;
}
sf::Sprite Menu::getMenuFlag() {
    return menuFlag;
}
sf::Sprite Menu::getMenuButton1() {
    return menuButton1;
}
sf::Sprite Menu::getMenuButton2() {
    return menuButton2;
}
 
int Menu::getIsMenu() {
    return isMenu;
}
void Menu::setIsMenu(int _isMenu) {
    _isMenu = 0;
    isMenu = _isMenu;
}
level.h
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
#ifndef LEVEL_H
#define LEVEL_H
#include <string>
#include <vector>
#include <map>
#include <SFML/Graphics.hpp>
#include <iostream>
#include "TinyXml/tinyxml.h"
struct Object
{
    int GetPropertyInt(std::string name);//номер свойства объекта в нашем списке
    float GetPropertyFloat(std::string name);
    std::string GetPropertyString(std::string name);
    std::string name;//объявили переменную name типа string
    std::string type;//а здесь переменную type типа string
    sf::Rect<float> rect;//тип Rect с нецелыми значениями
    std::map<std::string, std::string> properties;//создаём ассоциатиный массив. ключ - строковый тип, значение - строковый
    sf::Sprite sprite;//объявили спрайт
};
struct Layer//слои
{
    int opacity;//непрозрачность слоя
    std::vector<sf::Sprite> tiles;//закидываем в вектор тайлы
};
class Level//главный класс - уровень
{
public:
    bool LoadFromFile(std::string filename);//возвращает false если не получилось загрузить
    Object GetObject(std::string name);
    std::vector<Object> GetObjects(std::string name);//выдаем объект в наш уровень
    std::vector<Object> GetAllObjects();//выдаем все объекты в наш уровень
    void Draw(sf::RenderWindow& window);//рисуем в окно
    sf::Vector2i GetTileSize();//получаем размер тайла
private:
    int width, height, tileWidth, tileHeight;//в tmx файле width height в начале,затем размер тайла
    int firstTileID;//получаем айди первого тайла
    sf::Rect<float> drawingBounds;//размер части карты которую рисуем
    sf::Texture tilesetImage;//текстура карты
    std::vector<Object> objects;//массив типа Объекты, который мы создали
    std::vector<Layer> layers;
};
///////////////////////////////////////
int Object::GetPropertyInt(std::string name)//возвращаем номер свойства в нашем списке
{
    return atoi(properties[name].c_str());
}
float Object::GetPropertyFloat(std::string name)
{
    return strtod(properties[name].c_str(), NULL);
}
std::string Object::GetPropertyString(std::string name)//получить имя в виде строки.вроде понятно
{
    return properties[name];
}
bool Level::LoadFromFile(std::string filename)//двоеточия-обращение к методам класса вне класса 
{
    TiXmlDocument levelFile(filename.c_str());//загружаем файл в TiXmlDocument
    // загружаем XML-карту
    if (!levelFile.LoadFile())//если не удалось загрузить карту
    {
        std::cout << "Loading level \"" << filename << "\" failed." << std::endl;//выдаем ошибку
        return false;
    }
    // работаем с контейнером map
    TiXmlElement* map;
    map = levelFile.FirstChildElement("map");
    // пример карты: <map version="1.0" orientation="orthogonal"
    // width="10" height="10" tilewidth="34" tileheight="34">
    width = atoi(map->Attribute("width"));//извлекаем из нашей карты ее свойства
    height = atoi(map->Attribute("height"));//те свойства, которые задавали при работе в 
    tileWidth = atoi(map->Attribute("tilewidth"));//тайлмап редакторе
    tileHeight = atoi(map->Attribute("tileheight"));
    // Берем описание тайлсета и идентификатор первого тайла
    TiXmlElement* tilesetElement;
    tilesetElement = map->FirstChildElement("tileset");
    firstTileID = atoi(tilesetElement->Attribute("firstgid"));
    // source - путь до картинки в контейнере image
    TiXmlElement* image;
    image = tilesetElement->FirstChildElement("image");
    std::string imagepath = image->Attribute("source");
    // пытаемся загрузить тайлсет
    sf::Image img;
    if (!img.loadFromFile(imagepath))
    {
        std::cout << "Failed to load tile sheet." << std::endl;//если не удалось загрузить тайлсет-выводим ошибку в консоль
        return false;
    }
    img.createMaskFromColor(sf::Color(255, 255, 255));//для маски цвета.сейчас нет маски
    tilesetImage.loadFromImage(img);
    tilesetImage.setSmooth(false);//сглаживание
    // получаем количество столбцов и строк тайлсета
    int columns = tilesetImage.getSize().x / tileWidth;
    int rows = tilesetImage.getSize().y / tileHeight;
    // вектор из прямоугольников изображений (TextureRect)
    std::vector<sf::Rect<int>> subRects;
    for (int y = 0; y < rows; y++)
        for (int x = 0; x < columns; x++)
        {
            sf::Rect<int> rect;
            rect.top = y * tileHeight;
            rect.height = tileHeight;
            rect.left = x * tileWidth;
            rect.width = tileWidth;
            subRects.push_back(rect);
        }
    // работа со слоями
    TiXmlElement* layerElement;
    layerElement = map->FirstChildElement("layer");
    while (layerElement)
    {
        Layer layer;
        // если присутствует opacity, то задаем прозрачность слоя, иначе он полностью непрозрачен
        if (layerElement->Attribute("opacity") != NULL)
        {
            float opacity = strtod(layerElement->Attribute("opacity"), NULL);
            layer.opacity = 255 * opacity;
        }
        else
        {
            layer.opacity = 255;
        }
        //  контейнер <data> 
        TiXmlElement* layerDataElement;
        layerDataElement = layerElement->FirstChildElement("data");
        if (layerDataElement == NULL)
        {
            std::cout << "Bad map. No layer information found." << std::endl;
        }
        //  контейнер <tile> - описание тайлов каждого слоя
        TiXmlElement* tileElement;
        tileElement = layerDataElement->FirstChildElement("tile");
        if (tileElement == NULL)
        {
            std::cout << "Bad map. No tile information found." << std::endl;
            return false;
        }
        int x = 0;
        int y = 0;
        while (tileElement)
        {
            int tileGID = atoi(tileElement->Attribute("gid"));
            int subRectToUse = tileGID - firstTileID;
            // Устанавливаем TextureRect каждого тайла
            if (subRectToUse >= 0)
            {
                sf::Sprite sprite;
                sprite.setTexture(tilesetImage);
                sprite.setTextureRect(subRects[subRectToUse]);
                sprite.setPosition(x * tileWidth, y * tileHeight);
                sprite.setColor(sf::Color(255, 255, 255, layer.opacity));
                layer.tiles.push_back(sprite);//закидываем в слой спрайты тайлов
            }
            tileElement = tileElement->NextSiblingElement("tile");
            x++;
            if (x >= width)
            {
                x = 0;
                y++;
                if (y >= height)
                    y = 0;
            }
        }
        layers.push_back(layer);
        layerElement = layerElement->NextSiblingElement("layer");
    }
    // работа с объектами
    TiXmlElement* objectGroupElement;
    // если есть слои объектов
    if (map->FirstChildElement("objectgroup") != NULL)
    {
        objectGroupElement = map->FirstChildElement("objectgroup");
        while (objectGroupElement)
        {
            //  контейнер <object>
            TiXmlElement* objectElement;
            objectElement = objectGroupElement->FirstChildElement("object");
            while (objectElement)
            {
                // получаем все данные - тип, имя, позиция, и тд
                std::string objectType;
                if (objectElement->Attribute("type") != NULL)
                {
                    objectType = objectElement->Attribute("type");
                }
                std::string objectName;
                if (objectElement->Attribute("name") != NULL)
                {
                    objectName = objectElement->Attribute("name");
                }
                int x = atoi(objectElement->Attribute("x"));
                int y = atoi(objectElement->Attribute("y"));
                int width, height;
                sf::Sprite sprite;
                sprite.setTexture(tilesetImage);
                sprite.setTextureRect(sf::Rect<int>(0, 0, 0, 0));
                sprite.setPosition(x, y);
                if (objectElement->Attribute("width") != NULL)
                {
                    width = atoi(objectElement->Attribute("width"));
                    height = atoi(objectElement->Attribute("height"));
                }
                else
                {
                    width = subRects[atoi(objectElement->Attribute("gid")) - firstTileID].width;
                    height = subRects[atoi(objectElement->Attribute("gid")) - firstTileID].height;
                    sprite.setTextureRect(subRects[atoi(objectElement->Attribute("gid")) - firstTileID]);
                }
                // экземпляр объекта
                Object object;
                object.name = objectName;
                object.type = objectType;
                object.sprite = sprite;
                sf::Rect <float> objectRect;
                objectRect.top = y;
                objectRect.left = x;
                objectRect.height = height;
                objectRect.width = width;
                object.rect = objectRect;
                // "переменные" объекта
                TiXmlElement* properties;
                properties = objectElement->FirstChildElement("properties");
                if (properties != NULL)
                {
                    TiXmlElement* prop;
                    prop = properties->FirstChildElement("property");
                    if (prop != NULL)
                    {
                        while (prop)
                        {
                            std::string propertyName = prop->Attribute("name");
                            std::string propertyValue = prop->Attribute("value");
                            object.properties[propertyName] = propertyValue;
                            prop = prop->NextSiblingElement("property");
                        }
                    }
                }
                objects.push_back(object);
                objectElement = objectElement->NextSiblingElement("object");
            }
            objectGroupElement = objectGroupElement->NextSiblingElement("objectgroup");
        }
    }
    else
    {
        std::cout << "No object layers found..." << std::endl;
    }
    return true;
}
Object Level::GetObject(std::string name)
{
    // только первый объект с заданным именем
    for (int i = 0; i < objects.size(); i++)
        if (objects[i].name == name)
            return objects[i];
}
std::vector<Object> Level::GetObjects(std::string name)
{
    // все объекты с заданным именем
    std::vector<Object> vec;
    for (int i = 0; i < objects.size(); i++)
        if (objects[i].name == name)
            vec.push_back(objects[i]);
    return vec;
}
std::vector<Object> Level::GetAllObjects()
{
    return objects;
};
sf::Vector2i Level::GetTileSize()
{
    return sf::Vector2i(tileWidth, tileHeight);
}
void Level::Draw(sf::RenderWindow& window)
{
    // рисуем все тайлы (объекты не рисуем!)
    for (int layer = 0; layer < layers.size(); layer++)
        for (int tile = 0; tile < layers[layer].tiles.size(); tile++)
            window.draw(layers[layer].tiles[tile]);
}
#endif
Миниатюры
Проблема с картой!   Проблема с картой!  
Вложения
Тип файла: rar TD.rar (5.48 Мб, 6 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2022, 20:53
Ответы с готовыми решениями:

Проблема с картой в Mario
Делаю копию Марио на C++ SFML!!! Но когда добавляю в Map.h новую строку, чтобы увеличить высоту...

Проблема со звуковой картой
Купил себе звуковую карту Creative Sound Blaster Z, установил, но проблема в том, что нету звука,...

Проблема с картой памяти
Ребята привет.У меня проблема : купил фотик,некоторое время пользовался без проблем,потом хотел...

Проблема с картой памяти
Здравствуйте, форумчане. Возникла такая проблема: карта памяти перестала открываться телефоном, при...

16
С чаем беда...
Эксперт CЭксперт С++
10011 / 5357 / 1467
Регистрация: 18.10.2014
Сообщений: 12,918
17.05.2022, 20:55 2
Цитата Сообщение от GoodPyro Посмотреть сообщение
"Исключение не обработано.Вызвано необработанное исключение:нарушение доступа для чтение (this было 0x50)" в tinyxml.cpp
Вызов метода через нулевой указатель. Не пытайтесь вызывать методы через нулевой указатель.

Почему в вопросе не приведен стек вызовов?

Что было выведено на консоль?

Цитата Сообщение от GoodPyro Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
        if (layerDataElement == NULL)
        {
            std::cout << "Bad map. No layer information found." << std::endl;
        }
        //  контейнер <tile> - описание тайлов каждого слоя
        TiXmlElement* tileElement;
        tileElement = layerDataElement->FirstChildElement("tile");
        if (tileElement == NULL)
        {
            std::cout << "Bad map. No tile information found." << std::endl;
            return false;
        }
Почему во втором if делается return false;, а в первом никакого return нет вообще. Какой смысл продолжапть выполнение, если layerDataElement == NULL?
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 21:00  [ТС] 3
Извините, а что такое стек вызовов?
0
С чаем беда...
Эксперт CЭксперт С++
10011 / 5357 / 1467
Регистрация: 18.10.2014
Сообщений: 12,918
17.05.2022, 21:05 4
Цитата Сообщение от GoodPyro Посмотреть сообщение
а что такое стек вызовов?
Отладочное окно в Visual Studio. В меню "Отладка" можно открыть окно "Call stack". Я не знаю, как оно назвается в русскоязычном интерфейсе. "Стек вызовов"?

Добавлено через 3 минуты
И зачем вы прислали в форум архив, в котрый завернуты тонны мусора от последней компиляции? Вместо 150 килобайт 5 мегабайт? Зачем?
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 21:06  [ТС] 5
Файл level.h я брал с сайта где смотрю обучение по sfml. Поэтому я в нём не до конца разобрался.Вот вроде стек вызовов.
Миниатюры
Проблема с картой!  
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 21:07  [ТС] 6
Извините не знал, как под другому отправить.
0
С чаем беда...
Эксперт CЭксперт С++
10011 / 5357 / 1467
Регистрация: 18.10.2014
Сообщений: 12,918
17.05.2022, 21:11 7
Цитата Сообщение от GoodPyro Посмотреть сообщение
Вот вроде стек вызовов.
???

Где? "Стек вызвов" - неактивная владка у вас снизу справа. Как мы на этом скриншоте увидим стек вызовов, если вкладка неактивна?

И еще раз: Что было выведено в консоль? Где вывод в консоль? Почему вы его до сих пор не прислали?
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 21:14  [ТС] 8
Вот?
Миниатюры
Проблема с картой!  
0
С чаем беда...
Эксперт CЭксперт С++
10011 / 5357 / 1467
Регистрация: 18.10.2014
Сообщений: 12,918
17.05.2022, 21:23 9
Цитата Сообщение от GoodPyro Посмотреть сообщение
Вот?
Ну так все понятно: в сообщении номер 2 я дал вам исчерпывающий ответ на вопрос. Очевидно image является нулевым указателем.

Дайте подробные ответы на следующие вопросы:

1. Почему указатели layerDataElement и tileElement проверяются на NULL, а остальные, такие как map, image, tilesetElement - не проверяются?
2. Вопрос из второй части сообщения номер 2.
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 21:30  [ТС] 10
Извините, код в level.h не мой поэтому я, не могу в нём нормально разобраться. Поэтому и не знаю почему.
Стек вызовов я вроде только что скинул.Вот ещё раз.
Миниатюры
Проблема с картой!  
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 21:47  [ТС] 11
В консоль ничего не выводится

Добавлено через 12 минут
TheCalligrapher,
0
С чаем беда...
Эксперт CЭксперт С++
10011 / 5357 / 1467
Регистрация: 18.10.2014
Сообщений: 12,918
17.05.2022, 22:01 12
Цитата Сообщение от GoodPyro Посмотреть сообщение
В консоль ничего не выводится
Так я же написал выше: у вас падение происходит рано, еще в том коде, который ничего не проверяет и ничего в консоль не выводит. Потому ничего и не выводится.

Потому я и задаю вопрос: почему в одних местах Level::LoadFromFile проверки есть с выводом диагностики в консоль, а в других точно таких же местах никаких проверок нет? Где логика?

Цитата Сообщение от GoodPyro Посмотреть сообщение
Извините, код в level.h не мой поэтому я, не могу в нём нормально разобраться.
Ах, не ваш... Ну тогда извЕните. На конкретную проблему(-мы) я вам указал: tilesetElement->FirstChildElement("image") возвращает нулевой указатель. А что делать дальше - либо разбирайтесь сами, либо обращайтесь к автору.
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 22:08  [ТС] 13
TheCalligrapher, спасибо , добавил проверку. Теперь программа запускается. Но карта не рисуется. Пишет что проблема в указателе image.
0
С чаем беда...
Эксперт CЭксперт С++
10011 / 5357 / 1467
Регистрация: 18.10.2014
Сообщений: 12,918
17.05.2022, 22:15 14
Цитата Сообщение от GoodPyro Посмотреть сообщение
Пишет что проблема в указателе image.
Так и есть. Как я сказал выше, tilesetElement->FirstChildElement("image") возвращает нулевой указатель. То есть нет там никакого элемента "image". А почему он не находится - не знаю.
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 22:21  [ТС] 15
TheCalligrapher, спасибо вам огромное за то, что уделили время и помогли найти где ошибка.
0
140 / 119 / 44
Регистрация: 09.03.2016
Сообщений: 1,030
17.05.2022, 22:31 16
Начинающий....
Накопипастил гавнокоду.
Молодой гений.
0
С чаем беда...
Эксперт CЭксперт С++
10011 / 5357 / 1467
Регистрация: 18.10.2014
Сообщений: 12,918
17.05.2022, 23:07 17
Цитата Сообщение от GoodPyro Посмотреть сообщение
Пишет что проблема в указателе image.
Подозреваю, что использованная библиотека TinyXml просто не поддерживает автоматическое раскрытие ссылок на другие XML файлы. (Это вообще некий стандарт или нет?)

То есть вот так нельзя:

Код
<tileset firstgid="1" source="tilemap.tsx"/>
Или, другими словами, так можно, но в результате вы получите просто атрибут "source". Читать и анализировать эти файлы, на которые ссылается "source", вам придется самостоятельно ручками. Ничего подобного в коде не сделано.

Альтернативно: сливайте все в один XML файл.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2022, 23:07
Помогаю со студенческими работами здесь

Проблема со звуковой картой
Здравствуйте. Подскажите, пожалуйста, появилась проблема. Купил звуковую карту Creative X-Fi...

Проблема со звуковой картой
Добрый день подскажите пожалуйста, ноутбук Ноутбук HP Pavilion 15-n051sr проблема со звуковой...

Возможная проблема с сетевой картой
Помогите пожалуйста,бывают просадки интернета,с кабелем LAN все хорошо,проверял на ноутбуке,...

Проблема с картой памяти microSdHc
В телефоне стоит карта памяти microSDHC 4Гига, комп карту вообще не видит. В Администрировании,...

Проблема с картой gtx 1050 ri
Подскажите пожалуста что делать в такой ситуации?

Проблема с встроенной звуковой картой
Подавал в микрофонный вход сигнал с выхода комбо-усилителя (проще говоря, колонка для...

Проблема с картой памяти Micro SD
Добрый день! Я произвела форматирование карты памяти Micro SD 2 Gb на телефоне. Потом пыталась...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru