Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9

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

17.05.2022, 20:53. Показов 1096. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2022, 20:53
Ответы с готовыми решениями:

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

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

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

16
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13183 / 6819 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
17.05.2022, 20:55
Цитата Сообщение от 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  [ТС]
Извините, а что такое стек вызовов?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13183 / 6819 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
17.05.2022, 21:05
Цитата Сообщение от GoodPyro Посмотреть сообщение
а что такое стек вызовов?
Отладочное окно в Visual Studio. В меню "Отладка" можно открыть окно "Call stack". Я не знаю, как оно назвается в русскоязычном интерфейсе. "Стек вызовов"?

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

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

И еще раз: Что было выведено в консоль? Где вывод в консоль? Почему вы его до сих пор не прислали?
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 21:14  [ТС]
Вот?
Миниатюры
Проблема с картой!  
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13183 / 6819 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
17.05.2022, 21:23
Цитата Сообщение от 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  [ТС]
Извините, код в level.h не мой поэтому я, не могу в нём нормально разобраться. Поэтому и не знаю почему.
Стек вызовов я вроде только что скинул.Вот ещё раз.
Миниатюры
Проблема с картой!  
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 21:47  [ТС]
В консоль ничего не выводится

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

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

Цитата Сообщение от GoodPyro Посмотреть сообщение
Извините, код в level.h не мой поэтому я, не могу в нём нормально разобраться.
Ах, не ваш... Ну тогда извЕните. На конкретную проблему(-мы) я вам указал: tilesetElement->FirstChildElement("image") возвращает нулевой указатель. А что делать дальше - либо разбирайтесь сами, либо обращайтесь к автору.
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 22:08  [ТС]
TheCalligrapher, спасибо , добавил проверку. Теперь программа запускается. Но карта не рисуется. Пишет что проблема в указателе image.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13183 / 6819 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
17.05.2022, 22:15
Цитата Сообщение от GoodPyro Посмотреть сообщение
Пишет что проблема в указателе image.
Так и есть. Как я сказал выше, tilesetElement->FirstChildElement("image") возвращает нулевой указатель. То есть нет там никакого элемента "image". А почему он не находится - не знаю.
0
0 / 0 / 0
Регистрация: 17.05.2022
Сообщений: 9
17.05.2022, 22:21  [ТС]
TheCalligrapher, спасибо вам огромное за то, что уделили время и помогли найти где ошибка.
0
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,075
17.05.2022, 22:31
Начинающий....
Накопипастил гавнокоду.
Молодой гений.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13183 / 6819 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
17.05.2022, 23:07
Цитата Сообщение от GoodPyro Посмотреть сообщение
Пишет что проблема в указателе image.
Подозреваю, что использованная библиотека TinyXml просто не поддерживает автоматическое раскрытие ссылок на другие XML файлы. (Это вообще некий стандарт или нет?)

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

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

Альтернативно: сливайте все в один XML файл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2022, 23:07
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru