SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Вывод карты
В этой теме 4 ответа, 2 участника, последнее обновление Павел Букреев 7 года/лет, 5 мес. назад.
-
АвторСообщения
-
http://hdd.tomsk.ru/file/gkpjrfyn
Когда начал писать столкновения с картой, карта перестала выводится вообще. Вылетела с ошибкой, типа 1681 (выход за пределы массива). Не получилось даже вернуть все назад, продолжала вылетать. Потыкался, перестала вылетать, когда дописал в map.h вместо TileMap[visota] TileMap[visota][shirb], но в этом случае вообще выводится бред полный. В ссылке- проект, оформлен он нормально, все картинки там же. Если у кого то будет время- гляньте, ну или просто дайте совет, вдруг поможете. Спасибо.
<p style=”text-align: start;”><span style=”font-size: 16px; line-height: 1.5; text-align: center;”>Сам код</span></p>
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204map.h#include <SFML/Graphics.hpp>#include <iostream>#include <windows.h>using namespace sf;const int visota = 32;const int shirb = 32;String TileMap[visota][shirb] = {" "," "," s "," "," "," "," "," "," "," "," "," "," "," "," "," ",};vid.h //камера#include <SFML/Graphics.hpp>using namespace sf;View vid;View getPlayercoordinateForView(float x, float y) {vid.setCenter(x + 100, y);//слежкаreturn vid;// возврат- обновление камеры}main.cpp#include <SFML/Graphics.hpp>#include <iostream>#include <windows.h>#include "map.h"#include "vid.h"using namespace sf;class Player {public:float x, y, w, h, dx, dy, speed = 0;int dir = 0; //направление//bool onGround;String File;Image image;Texture texture;Sprite sprite;Player(String F, float X, float Y, float W, float H) {//onGround = false;File = F;//имя файла и расширениеw = W; h = H;//высота и ширинаimage.loadFromFile("images/" + File);texture.loadFromImage(image);sprite.setTexture(texture);x = X; y = Y; //координата появления спрайтаsprite.setTextureRect(IntRect(0, 0, w, h));}void update(float time){switch (dir){case 0: dx = speed; dy = 0; break;case 1: dx = -speed; dy = 0; break;case 2: dx = 0; dy = speed; break;case 3: dx = 0; dy = -speed; break;}x += dx*time;y += dy*time;speed = 0;sprite.setPosition(x, y);}float getPlayerCoordinataX() {return x;}float getPlayerCoordinataY() {return y;}};int main(){RenderWindow window(VideoMode(700, 500), "window");vid.reset(FloatRect(0, 0, 700, 500));Image map_image;map_image.loadFromFile("images/map.png");Texture map;map.loadFromImage(map_image);Sprite s_map;s_map.setTexture(map);float Kadr = 0;//текущий кадрClock clock;Player snow("snowman.png", 50, 25, 112, 116);while (window.isOpen()){float time = clock.getElapsedTime().asMicroseconds();clock.restart();time = time / 500;sf::Event event;while (window.pollEvent(event)){if (event.type == sf::Event::Closed)window.close();}if (Keyboard::isKeyPressed(Keyboard::Left)) {snow.dir = 1; snow.speed = 0.1;Kadr += 0.005*time;if (Kadr > 4) Kadr -= 4;snow.sprite.setTextureRect(IntRect(120 * int(Kadr), 231, 116, 116));}if (Keyboard::isKeyPressed(Keyboard::Right)) {snow.dir = 0; snow.speed = 0.1;//направление вправоKadr += 0.005*time;if (Kadr > 4) Kadr -= 4;snow.sprite.setTextureRect(IntRect(120 * int(Kadr), 118, 116, 115));}if (Keyboard::isKeyPressed(Keyboard::Up)) {snow.dir = 3; snow.speed = 0.1;//направление внизKadr += 0.005*time;if (Kadr > 4) Kadr -= 4;snow.sprite.setTextureRect(IntRect(120 * int(Kadr), 120, 116, 115));}if (Keyboard::isKeyPressed(Keyboard::Down)) {snow.dir = 2; snow.speed = 0.1;Kadr += 0.005*time;if (Kadr > 4) Kadr -= 4;snow.sprite.setTextureRect(IntRect(120 * int(Kadr), 120, 116, 115));}getPlayercoordinateForView(snow.getPlayerCoordinataX(), snow.getPlayerCoordinataY());snow.update(time);window.setView(vid);window.clear();for (int i = 0; i < visota; i++)for (int j = 0; j < shirb; j++){if ((TileMap[i][j] == ' ')) s_map.setTextureRect(IntRect(0, 0, 40, 40));if ((TileMap[i][j] == 'o')) s_map.setTextureRect(IntRect(465, 80, 270, 155));if ((TileMap[i][j] == 's')) s_map.setTextureRect(IntRect(915, 40, 1050, 167));s_map.setPosition(i * 32, j * 32);window.draw(s_map);}window.draw(snow.sprite);window.display();}return 0;}может что то появляется и сталкивается с чем то в связи с этой картой и столкновениями? либо ширина высота не соответствует количеству элементов в карте, либо забыл в других местах дописать ширина высота..
Проверял на это уже, даже пустая карта выдала ошибку. А тот код который я скинул, если убрать вообще все символы из массива, все равно выводит кучу элементов, ну это не главное. Меня интересует тот факт, что в уроках в Map.h при объявлении массива указана только высота, когда же я указываю только высоту, то она вылетает с 1681.
если убрать все символы, а выводит кучу элементов, то откуда от не оттуда карта берется..
попробуй ctrl+f поищи по проекту где ещё используются твои переменные -
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.