Когда вы пишете код в методе Update
, вы должны думать о нем так, как если бы он был внутри бесконечной l oop, например:
while(true)
{
if (!draw_spots)
{
draw_spots = true;
}
else
{
draw_spots = false;
}
}
Когда вы смотрите на логи c в такой простой c манере должно быть легко понять, почему вы получаете мерцающее поведение. Это буквально включает и выключает переменную draw_spots
снова и снова.
Чтобы продолжить с бесконечной аналогией l oop, давайте посмотрим, что код должен делать вместо этого. По сути, есть две вещи, которые должны быть правдой, если вы хотите «нарисовать точки».
- Левая кнопка мыши нажата
- Курсор мыши находится внутри квадрата
Теперь давайте переведем эту логику c в код.
while(true)
{
var ms = Mouse.GetState();
var leftButtonPressed = ms.LeftButton == ButtonState.Pressed;
var mouseInsideSquare = (float)ms.X / 50 >= location.x &&
(float)ms.X / 50 <= location.x + 1 &&
(float)ms.Y / 50 >= location.y &&
(float)ms.Y / 50 <= location.y + 1;
if (leftButtonPressed && mouseInsideSquare)
draw_spots = true;
else
draw_spots = false;
}
Сохраняя все как можно проще и называя ваши биты логики c дополнительными переменными, код получает много легче читать и понимать.
Я бы даже go смог бы вытащить еще больше битов логики c в переменные и просто установить значение draw_spots
на результат, подобный этому:
var ms = Mouse.GetState();
var leftButtonPressed = ms.LeftButton == ButtonState.Pressed;
var mx = ms.X / 50f;
var my = ms.Y / 50f;
var mouseInsideSquare = mx >= location.x &&
mx <= location.x + 1 &&
my >= location.y &&
my <= location.y + 1;
draw_spots = leftButtonPressed && mouseInsideSquare;
Это вопрос вкуса, какую версию приведенного выше кода вы предпочитаете. Суть в том, чтобы разбить ваш код так, чтобы его было легче понять. Надеюсь, это поможет.
Единственный другой странный бит вашего кода - это строка:
spot sp = new spot(ms.X / 50, ms.Y / 50);
, но поскольку переменная sp
выходит из области видимости, прежде чем ее использовать, я собираюсь предположить, что вы оставили его во время отладки, и его можно безопасно удалить.