Итак, сначала немного предыстории. Я разрабатываю действительно простую 2D-игру в Delphi 10.3, FMX, которая внизу экрана рисует случайный ландшафт для каждого уровня игры. В любом случае, ландшафт — это просто несколько случайных чисел, которые используются в Tpathdata, а затем я использую fillpath для рисования этого 2D-«рельефа». Я хочу проверить, когда "падающий" объект, например, трасса, пересекается с этой местностью. Моя идея состояла в том, чтобы получить все точки tpathdata, каждую позицию Y каждой позиции X ширины экрана. Таким образом, я мог легко проверить, когда объект пересекается с местностью. Я просто не могу понять, как это сделать, или если у кого-то есть другое решение. Я очень ценю любую помощь. Спасибо
На самом деле это не проблема Delphi, а математическая задача.
У вас должно быть математическое представление вашей местности. Многоугольник, представляющий границу местности. Затем вам нужно использовать математику, чтобы узнать, находится ли точка внутри многоугольника. См. Википедию.
Вы также можете реализовать это чисто графически, используя растровое изображение B / W с тем же разрешением экрана. Вы устанавливаете все растровое изображение белым и рисуете ландшафт внизу белым цветом. Затем, проверив цвет пикселя в этом растровом изображении, вы узнаете, находится ли он за пределами местности (черный) или внутри местности (белый).
Что я предложил, так это иметь дополнительное растровое изображение (достаточно черно-белого, но вы можете использовать цвета, если хотите), на котором нарисовано все, что вы хотите проверить на столкновение (по крайней мере, Terrain). Конечно не фон игры. Вы можете избежать этого дополнительного растрового изображения, если у вас есть что-то в цветах космического корабля, чего никогда не бывает на местности. Это серьезно ограничило бы цветовые возможности. Чтобы ускорить проверку растровых изображений, вам, вероятно, следует не использовать GetPixel, а напрямую обращаться к битам и байтам в памяти с помощью TBitmap.ScanLine. Нужна дополнительная помощь? Откройте новый вопрос, потому что StackOverflow — это не чат.
Спасибо за ответ, хотя это не совсем то, что я ожидал. Думал, есть ли какие-нибудь функции, которые могли бы мне помочь. У меня уже есть растровое изображение фона, на котором я рисую ландшафт... но движущийся объект на данный момент - это просто еще одно простое изображение, поэтому, насколько я знаю, я не могу использовать getpixel или что-то подобное, за исключением случаев, когда есть способ, например, получить цвет пикселя в фоновом режиме. если вы понимаете о чем я. Падающий объект это космический корабль, представьте себе игру что-то вроде Lunar Lander, так вот на этом тайме есть битмап с изображением космического корабля, остальное прозрачно