Изометрическая сетка HTML / JS / CSS с полупрозрачными плитками при переходе по клику

Я пытаюсь создать веб-приложение / игру, в которой используется боковой «изометрический» вид и прозрачные плитки. Я могу отобразить их нормально (но не отлично), используя формулу PHP, которая просто устанавливает каждый div (каждую плитку) как position: absolute и устанавливает параметры top и left. Проблема в том, как поймать щелчки на плитке и позволить плиткам с прозрачными фрагментами перейти к плитке под ней.

Пример моей проблемы находится на http://stuff.adammw.homeip.net/other/fv/farmville_2.html


person Adam M-W    schedule 14.02.2010    source источник


Ответы (3)


Вы не сможете сделать это с самими элементами плитки, так как они всегда прямоугольные. Вам нужно будет отслеживать положение мыши в родительском элементе, содержащем все плитки, и вручную определять, какие пиксели соответствуют каким плиткам.

Для изометрического отображения положения на плитку это было бы легко, но для этого нужно было бы принять положение точки как место «на земле»; это не позволит вам использовать данные маски изображения для проверки объектов, таких как деревья, которые визуализируются перед землей. (Вы все равно хотите это сделать? В настоящее время некоторые деревья полностью закрывают плитку земли под ними.)

Если вам действительно нужно выполнить проверку совпадения с использованием масок изображений, вы можете:

а. напишите сценарий для извлечения данных маски из изображения и включения их в исходный код JavaScript в виде закодированных двоичных битовых масок. Я сделал это для обнаружения столкновений в играх на JavaScript, но это не очень весело, поскольку может занять много места, и вам придется повторно экспортировать данные при обновлении графики.

б. извлеките данные изображения для тестирования с помощью <canvas> и getImageData. На этом этапе вы также можете рассмотреть возможность использования холста для рендеринга, учитывая, что вы уже потеряли пользователей IE.

person bobince    schedule 14.02.2010
comment
После работы с холстом немного сложно найти хороший способ сделать это, но, к счастью, я нашел что-то, что делает именно это - philip.html5.org/demos/canvas/spritepick/example.html Единственная проблема с этим методом заключается в том, что он очень интенсивно использует JavaScript / процессор, и я не уверен, он будет работать для первоначальной цели, которая заключалась в обеспечении совместимости с веб-браузером iPhone. - person Adam M-W; 11.03.2010

Вам нужно использовать преобразования css3 или преобразование матрицы в IE.

Синтаксис выглядит примерно так:

-webkit-transform: skew(0deg, -30deg) scale(1, 1.16);
-moz-transform: skew(0deg, -30deg) scale(1, 1.16);

Пара хороших примеров:

http://www.fofronline.com/experiments/cube/index.html

http://www.useragentman.com/blog/2010/03/09/cross-browser-css-transforms-even-in-ie/

person Rich Bradshaw    schedule 09.03.2010

Поскольку это игра, основанная на плитках, возможно, вам стоит просто определить, с какой плиткой взаимодействует пользователь, используя простую формулу. Используйте какой-нибудь javascript, чтобы определить координаты щелчка или другого действия. затем выполните арифметические действия, чтобы выяснить, на какой плитке действовать. Имеет ли это смысл?

В остальном я согласен с bobince. Ваш подход, вероятно, будет нелегким.

person robert    schedule 09.03.2010