Ответить в теме: Бильярд – удар по шару

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics Бильярд – удар по шару Ответить в теме: Бильярд – удар по шару

#854
+2
JonAdmin
JonAdmin
Участник
Сообщений:11

Зарегистрирован:
23.05.2015

Репутация:9

Я знаю как. Читай внимательно:

У нас есть шар, который мы бьем (как правило, белый), бить мы будем мышкой.

Начнем с кия. Создай спрайт кия, текстуру сам найди. Чтобы кий крутился правильно, нужно указать току вращения спрайта кия. Точкой вращения будет шар, по которому мы будем бить (красная точка на скриншоте). Тоесть точка вращения кия будет за пределами спрайта кия. Это сделать можно так:
sprite.setOrigin(-10, sprite.getTextureRect().height / 2)
Разберем: “-10″ – отступ от шара, “sprite.getTextureRect().height / 2″ – центр кия по высоте.

Окей, а как же заставить его крутиться за мышкой?
Создадим вначале программы 2 вектора:
Vector2i pixelPos; 
Vector2f pos;
Еще создадим доп. переменные, которые будут хранить координаты векторов:
float vecX;
float vecY;
Последняя переменная, которая хранит угол поворота:
float rotation;
В главном цикле программы (while (window.isOpen()) {…})  будем ловить координаты мыши:
pixelPos = Mouse::getPosition(window); //забираем координаты курсора
pos = window.mapPixelToCoords(pixelPos); //переводим их в игровые
Потом считаем векторы (от кия до мыши) по школьной формуле (от начала вектора отнимаем конец):
vecX= pos.x – спрайт_шара.getPosition().x;
vecY= pos.y – спрайт_шара.getPosition().y;
Находим угол поворота по школьной формуле и переводим его в градусы:
rotation = (atan2(gunX, gunY)) * 180 / 3.14159265;
Осталось только повернуть спрайт кия:
sprite.setRotation(rotation);
Там может быть нужно будет отобразить угол (не уверен):
sprite.setRotation(90 – rotation);

Ура теперь кий смотрит в сторону шарика. В след. посте напишу как бить шар (мне нужно отойти на час)

Вложения:
You must be logged in to view attached files.