Путь заполнения Delphi

Итак, сначала немного предыстории. Я разрабатываю действительно простую 2D-игру в Delphi 10.3, FMX, которая внизу экрана рисует случайный ландшафт для каждого уровня игры. В любом случае, ландшафт — это просто несколько случайных чисел, которые используются в Tpathdata, а затем я использую fillpath для рисования этого 2D-«рельефа». Я хочу проверить, когда "падающий" объект, например, трасса, пересекается с этой местностью. Моя идея состояла в том, чтобы получить все точки tpathdata, каждую позицию Y каждой позиции X ширины экрана. Таким образом, я мог легко проверить, когда объект пересекается с местностью. Я просто не могу понять, как это сделать, или если у кого-то есть другое решение. Я очень ценю любую помощь. Спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле это не проблема Delphi, а математическая задача.

У вас должно быть математическое представление вашей местности. Многоугольник, представляющий границу местности. Затем вам нужно использовать математику, чтобы узнать, находится ли точка внутри многоугольника. См. Википедию.

Вы также можете реализовать это чисто графически, используя растровое изображение B / W с тем же разрешением экрана. Вы устанавливаете все растровое изображение белым и рисуете ландшафт внизу белым цветом. Затем, проверив цвет пикселя в этом растровом изображении, вы узнаете, находится ли он за пределами местности (черный) или внутри местности (белый).

Спасибо за ответ, хотя это не совсем то, что я ожидал. Думал, есть ли какие-нибудь функции, которые могли бы мне помочь. У меня уже есть растровое изображение фона, на котором я рисую ландшафт... но движущийся объект на данный момент - это просто еще одно простое изображение, поэтому, насколько я знаю, я не могу использовать getpixel или что-то подобное, за исключением случаев, когда есть способ, например, получить цвет пикселя в фоновом режиме. если вы понимаете о чем я. Падающий объект это космический корабль, представьте себе игру что-то вроде Lunar Lander, так вот на этом тайме есть битмап с изображением космического корабля, остальное прозрачно

thor43 26.12.2020 01:54

Что я предложил, так это иметь дополнительное растровое изображение (достаточно черно-белого, но вы можете использовать цвета, если хотите), на котором нарисовано все, что вы хотите проверить на столкновение (по крайней мере, Terrain). Конечно не фон игры. Вы можете избежать этого дополнительного растрового изображения, если у вас есть что-то в цветах космического корабля, чего никогда не бывает на местности. Это серьезно ограничило бы цветовые возможности. Чтобы ускорить проверку растровых изображений, вам, вероятно, следует не использовать GetPixel, а напрямую обращаться к битам и байтам в памяти с помощью TBitmap.ScanLine. Нужна дополнительная помощь? Откройте новый вопрос, потому что StackOverflow — это не чат.

fpiette 26.12.2020 15:14

Другие вопросы по теме