Как я могу изменить цвет линии между двумя точками в бегущей форме, когда я нажимаю на линию - PullRequest
1 голос
/ 06 июня 2019

Я работаю в Visual Studio над игрой точек и ящиков, я делаю массив точек в 4 рядах и 4 столбцах, и я рисую линии между каждыми двумя точками, теперь я хочу, когда player1 нажимает на одну линию, конкретная линия меняет цветна красный, player2 нажмите на другую строку, он меняет цвет на черный.

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Рисованные пиксели - это просто цветные пиксели, а не линии или любые другие фигуры, даже если вы использовали DrawLine или аналогичные методы.

Так что вам нужно выбрать, решать ли проблему по геометрии:графика.

Оба варианта могут быть решены различными способами, в зависимости от потребностей.

  • Здесь - это пример, который позволяет собирать строки и распознавать их при нажатии на них.

  • Для совершенно другогоподход, вы можете изменить свой код с простой рисования на Panel на двухсторонний код рисования: В дополнение к Panel поверхности краски также в Bitmap.Сделайте его ClientSize из Panel и нарисуйте его с помощью той же команды, но с использованием объекта Graphics, созданного из этого Bitmap.Теперь вы можете проверить цвет каждого пикселя с помощью bitmap.GetPixel(x,y) и использовать местоположения e.X and e.Y для формирования MouseClick события Panel.

Подробнее о разнице Нарисуйте на элемент управления растровое изображение

Убедитесь, что код Paint синхронизирован!Простой способ - переместить код в функцию drawStuff (Graphics g) и вызвать его дважды в событии Paint: один раз с e.Graphics и один раз с Graphics g = Graphics.FromImage(bitmap) ..

  • Геометрия всегдавариант, но линейные алгоритмы сложнее, чем может ожидать один, особенно когда вам нужно округление и провисание.
0 голосов
/ 06 июня 2019

Вы нарисовали доску с точками и линиями. Но панель не реагирует на щелчок пользователя - ничего не происходит, когда кто-то нажимает на панель.

Теперь вам также нужны эти кусочки кода

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

  2. Вам нужно запомнить, какие линии красные, а какие черные, а какие - синие. Таким образом, вам может понадобиться двумерный целочисленный массив для отслеживания этого, где 0 представляет синий, 1 представляет красный и 2 представляет черный, например.

  3. Всякий раз, когда вы обнаруживаете, что линия щелкает, вам нужно перекрасить доску, вызвать panel1.Invalidate(), чтобы вызвать перерисовку, поэтому снова вызывается метод panel1_Paint, в котором вы можете нарисовать доску, точки, и строки с правильными цветами (с информацией, которую вы сохранили в массиве в # 2) снова с нуля. Помните, что ничего не осталось от предыдущей краски, это как будто вы стираете все на бумаге и рисуете все снова.

...