SFML и C++ Уроки \ Разработка игр › Форумы › Логика игр › Создание функции столкновения любого объекта с любым › Ответ в теме: Создание функции столкновения любого объекта с любым
Судя по активности в данной теме чувствую, что здесь буду писать ответы самому себе.
Ответ ниже. Но появился новый вопрос нереальной для меня (сейчас) сложности.
Надеюсь на тебя, будущий я)
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 |
class Personage :public FisObj { ///....//// Personage(int P, float X, float Y) { ///....//// } void GoPers(float &time, Vector2f &pos, float SPEEDX, float SPEEDY) { if (Go) { ////Реализовал передвижение по заданному отрезку из урока 18////// tempX = pos.x; tempY = pos.y; speedX = SPEEDX; speedY = SPEEDY; dX = tempX - x; dY = tempY - y; distance = sqrt(dX * dX + dY * dY); if (distance > 2) { x += (speedX * time * dX / distance); y += (speedY * time * dY / distance); } else Go = false; sprt.setPosition(x, y); } } int main() { list<Personage*> Pers; list<Personage*>::iterator itPers; vector<Lets*> let; //Класс Lets хранит Прямоугольники коллизий на карте. vector<Lets*>::iterator itlet; let.push_back(&B1); let.push_back(&BMain); let.push_back(&B2); let.push_back(&Water); while (window.isOpen()) { //......// for (itPers = Pers.begin(); itPers != Pers.end(); itPers++) { for (itlet = let.begin(); itlet != let.end(); itlet++) { if ((*itPers)->sprt.getGlobalBounds().intersects((*itlet)->Zone.getGlobalBounds())) { if ((int)(*itlet)->UpGrn == (int)(*itPers)->UpGrn || (int)(*itlet)->UpGrn == (int)(*itPers)->LeftGrn || (int)(*itlet)->UpGrn == (int)(*itPers)->RightGrn) //////////Если Верхняя грань коллизии пересекается с какой-либо из граней игрока//// { cout << "Up" << endl; //В консоль он сообщает, что препятствие именно сверху. Ниже аналогичные условия для "Down","Left","Right"//// /////////////////////////////////////////////////////////////////////////////////////////// //Сама соль в том, как реализовать отключение скорости по оси, на которой стоит коллизия,//// //в данном случае Y, но сделать это так, чтобы эта скорость включалась именно при отсутствии//// //пересечения конкретно данного объекта с данной коллизией. И я устал ломать голову над этим//// } } } |