Почему столкновение изображения вызывает вспышки?
Итак, во-первых, я просто бездельничаю в 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;