Почему столкновение изображения вызывает вспышки?

Итак, во-первых, я просто бездельничаю в Delphi, и все еще действительно новичок в этом, но я заметил, что всякий раз, когда я пытаюсь сделать какую-то игру, где W, A, S и D - кнопки, которые перемещают объект (TImage), он начинает мигать случайным образом, я заметил, что это происходит, если скорость высокая, или когда она движется, и позади нее есть другое изображение (фон)...

Большая часть моего "движущегося" кода выглядит так:

if key = 's' then begin
for I := 1 to 5 do
    sleep(1);
    x:=x-2;
    Image1.Top := x;
 end;

Может быть, это вызывает это, но все же это действительно раздражает. Я был бы очень рад, если бы вы могли помочь с этим.

1 ответ

Решение

Нечто подобное лучше обрабатывать, используя TPaintBox вместо.

Клавиши должны установить переменные по мере необходимости, а затем вызвать TPaintBox.Invalidate() вызвать перерисовку, когда ОС готова к этому.

TPaintBox.OnPaint Обработчик событий может затем нарисовать TGraphic в соответствующих координатах, указанных текущими значениями переменных при необходимости.

var
  X: Integer = 0;
  Y: Integer = 0;

procedure TMyForm.KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
    'W': begin
      Dec(Y, 2);
      PaintBox.Invalidate;
    end;
    'A': begin
      Dec(X, 2);
      PaintBox.Invalidate;
    end;
    'S': begin
      Inc(Y, 2);
      PaintBox.Invalidate;
    end;
    'D': begin
      Inc(X, 2);
      PaintBox.Invalidate;
    end;
  end;
end;

procedure TMyForm.PaintBoxPaint(Sender: TObject);
begin
  PaintBox.Canvas.Draw(X, Y, SomeGraphic);
end;
Другие вопросы по тегам