Форум программистов, компьютерный форум CyberForum.ru

Определение столкновений в простой 2D игре - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Очередь, состоящая из точек координатной плоскости http://www.cyberforum.ru/cpp-beginners/thread681126.html
Доброго времени суток. Мне необходимо создать очередь, состоящую из пар чисел (х и у) и создать функции удаления, добавления элементов в эту очередь. Проблем с добавлением не возникло, а вот с удалением...привожу часть кода, кто может - помогите разобраться. #define QUEUE struct queue #include <alloc.h> int e_x, e_y, n; String queue = ""; QUEUE { int x;
C++ Ошибка при компилировании Помогите пожалуйста. При компиляции данной программы в Code Blocks с компилятором mingw и подключением библиотеки graphics.h выскакивают две ошибки, связанные с данной библиотекой: Помогите пожалуйста. #include <graphics.h> // заголовочный файл графического режима Borland Graphics Interface #include <cmath> // заголовочный файл для простых математических операций #include <ctime> //... http://www.cyberforum.ru/cpp-beginners/thread681053.html
Морской бой передача двумерного массива в функцию C++
Добрый день.Есть задание: Написать "Морской бой" для игры человека против компьютера. Предусмотреть за человека возможность автоматической (расстановку осуществляет кораблей компьютер случайным образом) и ручной расстановки своих кораблей. Стоимость задания существенно повышается, если компьютер при стрельбе будет обладать логикой (т. е. не производить выстрелы "рандомайзом"). Вопрос такой....
Не компилируются программы: Отсутствует обязательный файл "" C++
Не компилируются программы на MVS 2010. Создаю пустой консольный проект - не компилируется, создаю любой другой проект - тоже не компилируется. 1>------ Построение начато: проект: Ya_Defigod, Конфигурация: Debug Win32 ------ 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(707,5): error : Отсутствует обязательный файл "". ========== Построение: успешно: 0, с...
C++ C++ И рабочий стол win32 ? http://www.cyberforum.ru/cpp-beginners/thread677767.html
Здравствуйте уважаемые форумчане!! Не судите строго за вопрос, но я уже лет 7-м не писал на С++, работаю с Пыхом и ЖаваСкрипт(так уж судьба распорядилась)...А склероз - это дело веселое, каждый день приносит свежие новости))) Во общем по теме. Возникла такая идея: поскольку рабочий стол как всегда за ** серачен всякими ярлыками ссылками во общем всяким периодически необходимым мусором почему...
C++ С++, библиотека MPI Помогите с алгоритмом. Создайте программу широковещательной рассылки переменной A от 0-го процесса всем остальным. В программе требуется создать функцию, аналогичную MPI_Bcast, но построенную с использованием блокирующих функций парного обмена сообщениями (MPI_Send, MPI_Recv). Рассылку сообщения реализовать по 2-му дереву: сначала 0-й процесс отсылает сообщение 1-му, затем 0-й и 1-й... подробнее

Показать сообщение отдельно
KATbIK
 Аватар для KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
01.11.2012, 13:07     Определение столкновений в простой 2D игре
Попробую по памяти накидать:

Вот структуры(пример):
C++
1
2
3
4
struct Point {
   float x;
   float y;
};
C++
1
2
3
4
struct AABB {
    Point c;    // центр
    float r[2]; // r[0] - полуширина по x, r[1] - полуширина по y  
};
С помощью этого ты сможешь определить только наличие столкновения:
C++
1
2
3
4
5
6
bool TestAABBAABB(AABB &a, AABB &b)
{
    if (fabs (a.c[0] - b.c[0]) > (a.r[0] + b.r[0])) return false;
    if (fabs (a.c[1] - b.c[1]) > (a.r[1] + b.r[1])) return false;
    return true;
}
Для того, что бы найти велечену наложения и вектор перемещения:
// где mt вектор перемещения для a
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
bool TestAABBAABB(AABB &a, AABB &b, Point &mt)
{
   double rcx = fabs (a.c[0] - b.c[0]);
   double rx = (a.r[0] + b.r[0]);
    if (rcx > rx) return false;
   double rcy = fabs (a.c[1] - b.c[1]);
   double ry = (a.r[1] + b.r[1]);
    if (rcy > ry) return false;
   double overlap_x = rcx - rx;
   double overlap_y = rcy - ry;
   mt.x = 0;
   mt.y = 0;
   if (overlap_x < overlap_y)
  {
    mt.x = overlap_x;  
    if (a.c[0] < b.c[0])
    {
       mt.x = -mt.x;
    }
  } else {
        mt.y = overlap_y;  
        if (a.c[1] < b.c[1])
       {
          mt.y = -mt.y;
       }
    }
    return true;
}
Пишу по памяти, проверяй, может есть ошибки... (времени нет проверять)

Добавлено через 22 минуты
C++
1
2
double overlap_x = rx - rсx;
double overlap_y = ry - rсy;
Добавлено через 17 минут
вот что значит быстро печатать вместо a.c[0] => a.c.x; a.c[1] => a.c.y; для b тоже самое
 
Текущее время: 18:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru