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 |
|
| |