Суббота, 23 Ноября 2024, 13:20

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как сделать обход препятствий в С++ Builder???
RazuvaiДата: Четверг, 11 Ноября 2021, 13:04 | Сообщение # 1
уже был
Сейчас нет на сайте
Как сделать обход препятствий в С++ Builder???
Движение игрока по клику мыши уже готово.
Вот мой код:
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)
{
x=X;
y=Y;
Timer1->Enabled=true;
}

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (Image1->Top>y) Image1->Top=Image1->Top-1;
if (Image1->Top<y) Image1->Top=Image1->Top+1;
if (Image1->Left>x) Image1->Left=Image1->Left-1;
if (Image1->Left<x) Image1->Left=Image1->Left+1;
if (Image1->Top==y && Image1->Left==x) Timer1->Enabled=false;
}
TLTДата: Четверг, 11 Ноября 2021, 15:50 | Сообщение # 2
Сейчас нет на сайте
Можно подключить готовые решения для поиска пути, типа PathEngine.



а можно самому написать алгоритм, прочтя несколько статей, которые доступны в сети.

Например, Алгоритм поиска пути Jump Point Search.



Никто не знает, что у тебя за проект, какие задачи и т.д. Это 2D, пошаговая система, плавное перемещение или дискретное... Я бы также рекомендовал подсмотреть из шаблонов некоторые моменты ИИ, чтобы применить в своём проекте.


Дао, выраженное словами, не есть истинное Дао.
Fire_PhoenixДата: Четверг, 11 Ноября 2021, 23:34 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата Razuvai ()
Как сделать обход препятствий в С++ Builder???


Ваш фрагмент кода демонстрирует лишь только то, что Вы используете (как я понимаю) компонент Image для отображения спрайта "игрока", ни о каких препятствиях в нем даже и намека нет...

Цитата TLT ()
Никто не знает, что у тебя за проект, какие задачи и т.д. Это 2D, пошаговая система, плавное перемещение или дискретное...


Цитата Razuvai ()
Код
if (Image1->Top>y) Image1->Top=Image1->Top-1;


Ну из ходя из этого, можно сделать вывод, что перемещение на 1 px за один отсчет таймера.

Однако TLT абсолютно прав, кроме способа перемещения, и понимания того, как выводится спрайт "игрока", мы ничего не знаем ;)

Но, боюсь, что там все (фон, юниты, объекты) реализовано на Image, и это плохо :(

Нужно понимать, что Image - это просто визуальный компонент, и использовать его для игр, а тем более создавать целый набор Image для вывода спрайтов избыточно!

Что же делать? Я не буду предлагать Вам использовать какое-либо API (OpenGL) или движки для создания игры... Почему? Потому что, к этому Вам нужно придти самостоятельно! :)

Если Вы выбрали в текущий момент делать игру на С++ Builder, то давайте попробуем ее сделать!

Итак, первое, что я Вам предлагаю, это отказаться от Image. Для игры Вам предпочтительней будет использовать Canvas самой формы, с одним НО, будет нужна двойная буферизация, для того, что бы выводить Ваш уровень без мерцаний. Для ее реализации, будет достаточно использовать для начала TBitmap, поскольку с ним будет проще и быстрее разобраться, в дальнейшем можно перейти на массив пикселей, который посредством одной функции, уже переносить на Canvas формы.

И да, про использование таймера - для начала думаю, его тоже можно оставить, когда Вы больше погрузитесь в разработку, сможете перейти на счетчик кадров для плавной анимации...

В общем, если Вам это интересно, пишите в этой темы свои мысли и вопросы. Буду рад ответить на то, что знаю :)

P. S. Было бы очень хорошо, если бы Вы написали жанр игры, которую хотите создать, или хотя бы привели примеры похожих игр. Это позволит получить более точное представление о реализации нужных классов, и их взаимодействии :)




Сообщение отредактировал Fire_Phoenix - Пятница, 12 Ноября 2021, 00:11
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг