2010-02-02 3 views
6

Мне удалось найти много информации о реальной разработке логики для игр. Мне бы очень хотелось сделать карточную игру, но я просто не понимаю, как на основе позиции мыши можно выбрать объект (или, по крайней мере, правильный путь). Сначала я думал о проверке ограничивающей рамки, но не все мои растровые изображения являются прямоугольниками. Затем я думал, что я создаю скрытый буфер, каждый из которых имеет другой цвет, но кажется смешным делать это таким образом. Мне интересно, как это делается. Например, как Adobe Flash знает объект под мышью?Способ создания простой игровой GUI

Благодаря

+0

Вы говорите о чисто 2D-приложениях? – Andres

ответ

6

Ваш вопрос, как сказать, если мышь находится над непрямоугольным растровым изображением. Я предполагаю, что все ваши растровые изображения действительно прямоугольные, но они имеют прозрачные области. Вы уже должны как-то определить, какая часть вашего (прямоугольного) растрового изображения прозрачна, в зависимости от используемой вами схемы (например, если вы обозначаете цвет как прозрачный или используете битовую маску). Вы также узнаете z-порядок (расслоение) растровых изображений на вашем холсте. Затем, когда вы обнаруживаете щелчок в позиции (x, y), вам нужно найти список прямоугольных растровых изображений, которые охватывают этот пиксель. Сортируйте их по z-порядку и для каждого проверяйте, прозрачен ли пиксель или нет. Если да, переходите к следующему растровому изображению. Если нет, то это выбранное растровое изображение.

1

Или вы можете использовать геометрическое решение. Вы должны хранить/управлять геометрией карты/предмета. Например, список фигур, таких как круги, прямоугольники.

Возможно, треугольники или эллипсы, если у вас есть много времени. Говорить, что треугольник имеет точку или нет, является математическим вопросом и может быть численно неустойчивым, если треугольник очень тонкий (алгоритм имеет разделение).. Исправление: How to determine if a point is in a 2D triangle?

Я голосовал за abc.

+1

Числовая нестабильность не является проблемой. Растровые изображения (например, экран) являются дискретными, поэтому вы используете целочисленные математические данные. Вы не вычисляете значения наклона - вы вычисляете средневзвешенные значения конечных точек. Если строка проходит от (x1, y1) до (x2, y2) для точки с xa, вы получаете ya = y1 + (((y2-y1) * (xa-x1))/(x2-x1)). Вы должны убедиться, что у вас есть достаточное количество бит в ваших целых числах для промежуточных результатов, но есть только одно подразделение, а делитель довольно ручный. – Steve314

+0

Тем не менее стоит upvote, правда. – Steve314

Смежные вопросы