end;
end;
procedureTBounceThread.Execute;
begin
WhilenotTerminateddo
begin
Synchronize(MoveShape);
end;
end;
constructorTBounceThread.Create(Suspended:Boolean;Shape:TShape;XSpeed,YSpeed:Integer);
begin
inheritedCreate(Suspended);
FShape:ΚShape;
FXSpeed:ΚXSpeed;{X軸走向的速度}
FYSpeed:ΚYSpeed;{Y軸走向的速度}
FreeOnTerminate:ΚTrue;
end;
end.
這是一個多線程的碰碰球游戲,你可以有多個不同的球,它們分屬不同的線程,各自獨立的在屏幕上碰撞。顯然,由於多個球運行的顯示會同時操作VCL資源,為了安全,我們在Execute過程中的執行部分加入了Synchronize(MoveShape)來調用MoveShape過程,實際上,在任何需要操作VCL資源的地方,例如窗體、位圖,都應加入Synchronize調用。
執行時我們可以新建一個程序,然後在USES部分加入以上的BncThrd單元,再在它的窗體FORM1上加入兩個Shape控件Shape1和Shape2,Shape1可以是一個矩形而Shape2是一個圓。加入以下的代碼就可以讓矩形和圓動起來。
procedureTForm1.Button1Click(Sender:TObject);
begin
TBounceThread.Create(False,Shape1,1,2);
TBounceThread.Create(False,Shape2,2,3);
end;