SFML и C++ Уроки \ Разработка игр › Форумы › Домашние задания › Урок 25 ДЗ(1-3)
В этой теме 7 ответов, 3 участника, последнее обновление Павел Букреев 7 года/лет, 9 мес. назад.
-
АвторСообщения
-
1)
C++1234567891011121314151617181920212223242526Time DxTime;for (it = entities.begin(); it != entities.end(); it++){if ((*it)->timeDx <= 0.0f){(*it)->timeDx = (rand() % 10) *1000;}else{(*it)->timeDx -= time;}if ((*it)->timeDx <= 0){(*it)->dx *= -1;(*it)->timeDx = 0;(*it)->sprite.scale(-1, 1);}if ((*it)->dx == 0){(*it)->dx = -0.1;}window.draw((*it)->sprite);}Такая вот каша в конце)). Также добавил что если dx врага = 0 то пусть dx = -0.1. Чтобы ехал в другую сторону.
Не понял всё же как работает
C++1(*it)->timeDx -= time;Подбирал вручную. Насколько смог увидеть за такт у меня примерно time = 25. То есть TimeDx уменьшается каждый такт на 25 пока не станет равным 0. Тогда Dx врага меняется.
Но как мне поставить так чтобы привязать к секундам? Через Clock?Там его рестартит. Доделаю и изменю чуть решение.
C++123456789101112float timer_sec = 0;float time = 0;while(window.isOpen()){time = clock.getElapsedTime().asMicroseconds() / 1000.f, clock.restart();timer_sec += time;if(timer_sec >= 1000){//Секунда прошлаtimer_sec = 0;}}Heisenberg, а можно глянуть твой проект где у тебя что то с рыбой связано?. Название подключаемых модулей fish как то так…
Ура 100 Репы!
можно Я ТУТТам есть возможность только подписаться на тебя)))
vk.com/sinsinmin
Мой вк
2)
C++12345678910111213141516171819202122232425float dist = 0;for (it = entities.begin(); it != entities.end(); it++){dist = p.x - (*it)->x;if (dist < 0) dist *= -1;if ((dist < 200) && (p.y - (*it)->y < 200)) {if (p.x < (*it)->dx) {(*it)->dx = 0.2;text.setString("AAAAAAH!!");text.setPosition((*it)->x+30, 720);}else{(*it)->dx = -0.2;text.setString("AAAAAAH!!");text.setPosition((*it)->x+30, 720);}}if ((dist >= 200) && (p.y - (*it)->y < 200)){text.setPosition(p.x, 720);cout << "dist:" << dist << "\n";cout << "p.y - it.y:" << p.y - (*it)->y << "\n";}}Сделал для одного врага который у меня на том же уровне по x что и игрок.
3) Как то не осилю. Дело в том что код данный на уроках он работает слишком плохо со столкновениями. Переделывать его, это менять много кода)) для меня как новичка. А потом опять менять назад чтобы продолжить уроки.
Тут лучше бы делать Задания домашние такие чтобы либо менять мало кода. Либо так чтобы остальная часть кода уже работала.
То есть делать некую надстройку.
К примеру у нас есть некие блоки кода А для вывода спрайтов, Б для столкновений и в домашнем задании должна фигурировать некая третья часть С. Которая не будет менять код А и Б. )))))))
“задание 3:
при столкновении игрока с врагом толкнуть в сторону игрока, нанести ему урон. особое внимание уделить выталкиванию игрока рядом со стеной, т.к его может телепортировать немного не туда. враг при этом не должен останавливаться.”в теории вижу небольшое реш-е: игрока толкнуть можно попробовать с помощью dx+- или x+-. сделать переменную isCollisionWithEnemy = true в момент контакта с врагом , и потом когда проверяешь коллизию со стеной и при этом эта переменная ==true, то проверить будет ли коллизия со стеной, если игрока толкнуть на какое то расстояние (задав искусственно небольшое смещение по Х в сторону толчка), и если такая коллизия будет, то (полет фантазии):
получается игрок умрёт , т.к на него полностью наедут, а не оттолкнут, при это не отталкивать его вовсе.
ещё можно оттолкнуть попробовать , дав резко ускорение игроку как когда он ходит влево вправо (тоже ускорения имеет), только побыстрее. может засчёт этой плавности проверка сработает на стену лучше.
как на практике там в коде я уже и не помню, но думаю можно сделать. просто мысли в голове
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.