Созданные ответы форума
-
АвторСообщения
-
Хм, думаю надо сделать класс для шарика и для сетки. В классе для шарика сделать такие функции как выделение и перемешение, и этот класс опираясь ещё на класс сетки совершал данные действия. Ещё в классе сетки методы сделать для проверки условий. Либо вообще один класс сетки. Я честно говоря для себя редко пишу в ООП, не всегда понимаю его целесообразности. Но если надо то в принципе могу, только не факт что это будет правильно и по всем канонам.
Я когда то писал клон игры Lines, если хочешь могу тебе сорцы скинуть. Там правда нет ООП, но думаю будет не сложно внедрить, там всего лишь 300 строчек. На счёт Vector2 i ты не прав, это аналог одномерного массива из 2х чисел типа int. На счёт того что не отображается спрайт, перепроверь, правильны ли пути.
Закрывайте вопрос, жёстко тупанул.
Хотя интересно почему не даёт мне поставить void.Хотел бы уточнить. Ты запускал её прямо из папки debug? Если она оттуда запускается а при её переносе в другое место то это да, странно. А если ты запускал из под IDE то ничего странного, ибо относительно её пути правильные.
Ну у класса sf::RenderTexture есть недостаток, например максимальный размер в 8192×8192
А как конкретно? Чтобы был виден луч (как от фонарика)или чтобы текстуры вокруг источника света становились светлее?
Почему не можешь, в чём конкретно проблема?
Что то у меня не компилируется, вот выхлоп терминала
Shell12345678910111213141516171819202122232425262728293031In file included from main.cpp:4:0:tile.h:20:1: warning: ‘typedef’ was ignored in this declaration};^/tmp/ccgphFSs.o: In function `main':main.cpp:(.text+0x8b0): undefined reference to `update_coords(int, int, Coords*)'main.cpp:(.text+0x978): undefined reference to `update_coords(int, int, Coords*)'/tmp/ccgphFSs.o: In function `is_tile_type(int, int, int)':main.cpp:(.text+0x11fe): undefined reference to `get_tile(int, int)'main.cpp:(.text+0x1208): undefined reference to `get_tile_type(int)'/tmp/ccgphFSs.o: In function `get_my_y(int, int, int)':main.cpp:(.text+0x1240): undefined reference to `get_tile(int, int)'main.cpp:(.text+0x124a): undefined reference to `get_left_level(int)'main.cpp:(.text+0x1256): undefined reference to `get_tile_y_global(int)'main.cpp:(.text+0x1273): undefined reference to `get_tile(int, int)'main.cpp:(.text+0x127d): undefined reference to `get_right_level(int)'main.cpp:(.text+0x1289): undefined reference to `get_tile_y_global(int)'main.cpp:(.text+0x12a6): undefined reference to `get_tile(int, int)'main.cpp:(.text+0x12b3): undefined reference to `get_x_in_tile(int)'main.cpp:(.text+0x12bc): undefined reference to `get_y_level(int, int)'main.cpp:(.text+0x12c8): undefined reference to `get_tile_y_global(int)'/tmp/ccgphFSs.o: In function `modify_xy(int, int, int, int)':main.cpp:(.text+0x133e): undefined reference to `update_coords(int, int, Coords*)'/tmp/ccgphFSs.o: In function `calculate_y(int, int)':main.cpp:(.text+0x1373): undefined reference to `tile_place(int, int)'main.cpp:(.text+0x13c4): undefined reference to `tile_place(int, int)'main.cpp:(.text+0x1418): undefined reference to `tile_place(int, int)'main.cpp:(.text+0x1434): undefined reference to `tile_place(int, int)'main.cpp:(.text+0x1450): undefined reference to `tile_place(int, int)'/tmp/ccgphFSs.o:main.cpp:(.text+0x147d): more undefined references to `tile_place(int, int)' followcollect2: error: ld returned 1 exit statusВ общем я решил склеить, алгоритм такой
C++1234567891011121314151617181920212223sf::Image imgMap;imgMap.create(255*16,156*16, sf::Color(100,100,100,100));for (int i = 0; i < 156; ++i){for (int x = 0; x < 255; ++x){if (field[i][x].G == 216){for (int q = 0; q < 16; ++q){for (int w = 0; w < 16; ++w){imgMap.setPixel(x*16+q, i*16+w, image.getPixel(16+w, 0+q));}}}if (field[i][x].G == 148) {for (int q = 0; q < 16; ++q){for (int w = 0; w < 16; ++w){imgMap.setPixel(x*16+q, i*16+w, image.getPixel(0+w, 0+q));}}}if (field[i][x].G == 255) {for (int q = 0; q < 16; ++q){for (int w = 0; w < 16; ++w){imgMap.setPixel(x*16+q, i*16+w, image.getPixel(32+w, 0+q));}}}if (field[i][x].G == 0) {for (int q = 0; q < 16; ++q){for (int w = 0; w < 16; ++w){imgMap.setPixel(x*16+q, i*16+w, image.getPixel(48+w, 0+q));}}}}}стало намного быстрее, но сама склейка идёт долго, так что скорее всего подойдёт только для статических карт, и для меня в перспективе не подходит, хочется туман войны и чтобы водичка плескалась.
У меня не знает что такое to_string
Есть у меня подобная проблема. Отрисовываются 21к спрайтов размером 16Х16. Вроде производительность нормальная, но когда пытаюсь рисовать 21к rectangleShape начинаются лаги, как исправить?
Смотри, xSize и ySize поменяй местами, расширять такой массив можно только в одну сторону, а в примере выше только по y координате, а вам как я понял надо по x;
Вот пример кода, тут полоска генерируется динамически.C++12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include <SFML/Graphics.hpp>#include <ctime>using namespace sf;using namespace std;void draw(){srand(time(NULL));int x = 70, y = 30, shapeSize = 8;RenderWindow window(sf::VideoMode(700+shapeSize*x, shapeSize*y), "Writed by Gleb Stegalin aka barbar");int **field;int c = 1;field = new int*[y];for(int i=0;i<y;i++)field[i] = new int[x];for(int i=0;i<y;i++){for (int z=0;z<x;z++){field[i][z] = rand()%3;}}RectangleShape shape;shape.setSize(Vector2f(shapeSize, shapeSize));while (window.isOpen()){Event event;while (window.pollEvent(event)){if (event.type == Event::Closed)window.close();}sf::Vector2i pixelPos = sf::Mouse::getPosition(window);sf::Vector2f pos = window.mapPixelToCoords(pixelPos);window.clear(sf::Color(240,240,200));for(int i=0;i<y;i++){for (int z=0;z<x;z++){if (field[i][z] == 1)shape.setFillColor(Color(0,0,0));elseshape.setFillColor(Color(250,250,250));shape.setPosition(z*shapeSize, i*shapeSize);window.draw(shape);}}x++;window.display();}}int main(){draw();return 0;}Храним уровень в динамическом массиве. Его можно объявить так:
C++1234567int **level; // массив уровня// созданиеlevel = new int * [xSize];for (int i = 0; i < xSize; i++) {level[i] = new int [ySize];}обращаемся к массиву как к обычному двумерному массиву. Когда игрок приближается к концу, расширяем массив по иксу и грузим чанк.
Раздел глухой как я посмотрю. Ну ничего. Вот что я реализовал: Теперь окно можно маштабировать, стабилизировал вообще поведение окна (раньше оно как то скакало при перетаскивании), хотя и сейчас оно не идеально, но вполне сносно. Добавил поверхность в окно, раньше только рамка была. Добавил методы для получения координат относительно окна. Прилагаю ссылку на короткий видос где я показываю работу окна. ссылка на ютуб
Обновил алгоритм, теперь вроде как в оригинале себя ведут тайлы, но сделал очень костыльно, может кто найдёт нормальный способ. Проект обновленный лежит как и надо в папке с моим ником. Добавил файл README там написал некоторые подробности.
-
АвторСообщения