gpt4 book ai didi

德尔福, Canvas : Complicated background animation under [blinding] image

转载 作者:行者123 更新时间:2023-12-03 19:19:08 25 4
gpt4 key购买 nike

我在渲染 Canvas 时遇到了一些麻烦。实际上,我正在尝试编写类似太空侵略者的游戏,而不使用任何 OpenGL 或 DirectX。所以在背景中,我有移动的天空,喷气机在上面移动。但喷气机令人眼花缭乱,天空移动不均匀。这是我的代码

  sky := TBitmap.Create;
sky.LoadFromFile('sky.bmp');
jet := TBitmap.Create;
jet.LoadFromFile('jet.bmp');
jet.Transparent := True;

while True do
begin
for k := 0 to sky.Height do
begin
for i := -1 to (pbMain.Height div sky.Height) do
begin
for j := 0 to (pbMain.Width div sky.Width) do
begin
pbMain.Canvas.Draw(nx, ny, jet);
pbMain.Canvas.Draw(j*sky.Width, k + i*sky.Height, sky);
end;
Application.ProcessMessages;
end;
Sleep(1);
end;
end;

谢谢你。

最佳答案

您不能编写这样的标准 Windows 应用程序。您必须为响应 WM_PAINT 消息进行绘画。在 Delphi 术语中,这等同于覆盖 Paint 后代的 TWinControl 方法,或者可能使用 TPaintBox 并提供 OnPaint 事件处理程序。我将假设您使用 TPaintBox

如果您需要避免闪烁,通常的做法是绘制到屏幕外位图,然后在要求您绘制时显示它。

您的应用程序可能应该使用计时器控件来提供定期脉冲。然后,在每个脉冲上,更新您的屏幕外位图。然后在您的油漆盒上调用 Invalidate 以强制进行油漆循环。

代码可能如下所示:

procedure TMainForm.RefreshTimerTimer(Sender: TObject);
begin
RedrawOffscreenBitmap;
PaintBox.Invalidate;
end;

procedure TMainForm.RedrawOffscreenBitmap;
begin
//paint to FOffscreenBitmap
end;

procedure TMainForm.PaintBoxBox(Sender: TObject);
begin
PaintBox.Canvas.Draw(0, 0, FOffscreenBitmap);
end;

关于德尔福, Canvas : Complicated background animation under [blinding] image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com