Как обрабатывать несколько элементов на холсте - PullRequest
1 голос
/ 08 марта 2012

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

Спасибо

1 Ответ

2 голосов
/ 08 марта 2012

Предположительно, у вас есть цикл рисования, который рисует кучу вещей.Фон, компас, стрелка для компаса.Возможно, некоторые другие вещи.

Когда вы рисуете с помощью холста, вы вводите команды для контекста, которые похожи на загрузку кисти с краской.

Если вы хотите нарисовать красную линию, а затемсиней линией вы берете красную краску, рисуете одну линию, затем чистите кисть, берете синюю краску и рисуете эту линию.

Контекст холста точно такой же.Здесь вы хотите нарисовать кучу вещей в обычном контексте холста.Затем вы хотите сохранить контекст с помощью ctx.save() и выполнить свои повороты.

Когда вы переводите или вращаете или просто устанавливаете контекст, вы не меняете вещи, которые уже были сделаны, выпросто сказав «для всего, что после этого, примените эти операции».

Итак, вы нарисуете стрелку / стрелку компаса.

Затем позвоните ctx.restore() и продолжайте свой веселый путь.Это предотвратит вращение объектов, нарисованных после стрелки.

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

Кстати, если вы хотите сбросить настройкиполностью переведите контекст холста в его состояние по умолчанию (черные кисти, преобразование по умолчанию, без теней и т. д.), вы можете просто сделать canvas.width = canvas.width, и он полностью сбросит контекст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...