SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Столкновение (спрайта) и его местоположение в масиве
Помечено: sfml
В этой теме 2 ответа, 3 участника, последнее обновление BunDem 7 года/лет, 10 мес. назад.
-
АвторСообщения
-
Всем привет, столкнулся с проблемой как сделать столкновение для определеных TailMap[i][j].
И чтобы еще не создовать одну тему не могу сделать Гравитацию.
Есть у кого какие соображение по этому поводу.
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102#include <iostream>#include <SFML/Graphics.hpp>using namespace sf;class objBlock{public:String File;Image image;Texture texture;Sprite sprite;objBlock(String F){File = F;image.loadFromFile("images/"+ File);texture.loadFromImage(image);//закидываем наше изображение в текстуруsprite.setTexture(texture);//заливаем спрайт текстурой}};class objNpc{public:float x, y, w, h, dx, dy, speed ; //координаты,высота ширина, ускорение,скоростьint dir ; //направление (direction) движения игрокаString File;Image image;Texture texture;Sprite sprite;objNpc(String F){File = F;image.loadFromFile("images/"+ File);texture.loadFromImage(image);sprite.setTexture(texture);}};void update(float time){std::cout<<"WAIT";};int main(){RenderWindow window(sf::VideoMode(960, 702), "Game Test");//__________МАСИВ-КАРТЫ____________constexpr int H_MAP = 22;constexpr int W_MAP = 30;char TaileMap [H_MAP][W_MAP];for (int i=0;i<H_MAP;++i)for (int j=0;j<W_MAP;j++){if (i>10) TaileMap[i][j]={'0'};else TaileMap[i][j]={' '};}objBlock gras_map("tmap.png");objBlock sky_map("tmap.png");objNpc players("apple.png"); //Players Покачто ))Clock clock;while (window.isOpen()){float time = clock.getElapsedTime().asMicroseconds(); //дать прошедшее время в микросекундахclock.restart(); //перезагружает времяtime = time/800;Event event;while (window.pollEvent(event)){if (event.type == sf::Event::Closed)window.close();}if ((Keyboard::isKeyPressed(Keyboard::Left) || (Keyboard::isKeyPressed(Keyboard::A)))){players.sprite.move(-0.1*time, 0);players.sprite.setTextureRect(IntRect(0, 0, 32, 32));} //-0,1 это скорость, умножаем её на наше время и получаем пройденное расстояниеif ((Keyboard::isKeyPressed(Keyboard::Right) || (Keyboard::isKeyPressed(Keyboard::D)))) { players.sprite.move(0.1*time, 0); players.sprite.setTextureRect(IntRect(0, 0, 32, 32)); } // см коммент вышеif ((Keyboard::isKeyPressed(Keyboard::Up) || (Keyboard::isKeyPressed(Keyboard::W)))) { players.sprite.move(0, -0.1*time); players.sprite.setTextureRect(IntRect(0, 0, 32, 32)); }// см вышеif ((Keyboard::isKeyPressed(Keyboard::Down) || (Keyboard::isKeyPressed(Keyboard::S)))) { players.sprite.move(0, 0.1*time); players.sprite.setTextureRect(IntRect(0, 0, 32, 32)); }// см вышеwindow.clear();for (int i = 0; i < H_MAP; i++)for (int j = 0; j < W_MAP; j++){if (TaileMap[i][j] == '0'){gras_map.sprite.setTextureRect(IntRect(0, 0, 32, 32)); //земляgras_map.sprite.setPosition(j * 32, i * 32); //Устанавливает позицию (координаты)window.draw(gras_map.sprite);//рисуем квадратики на экран}if (TaileMap[i][j] == ' '){sky_map.sprite.setTextureRect(IntRect(32, 0, 64, 32)); //Небоsky_map.sprite.setPosition(j * 32, i * 32); //Устанавливает позицию (координаты)window.draw(sky_map.sprite);//рисуем квадратики на экран}}players.sprite.setTexture(players.texture);//players.sprite.setPosition(64,64);window.draw(players.sprite);window.display();}return 0;}“столкновение для определенных TailMap[i][j].” то есть игрока с элементами карты?для создания гравитации есть урок 20, но лучше все уроки перед ним изучить ,не перескакивать, тогда будет понятнее
Не делается столкновение с отдельными элементами карты, а создаются объекты на карте, как было в уроках, там и про коллизии рассказывалось, все аналогии с solid объектами( урок 22)
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.