Delphi完成碰撞球體完全實例代碼。本站提示廣大學習愛好者:(Delphi完成碰撞球體完全實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是Delphi完成碰撞球體完全實例代碼正文
本文以實例描寫了用Delphi完成撞擊球後果的辦法,相似彈球後果。點擊“開端”按鈕,窗體中的一個綠色小球將赓續地閣下撞擊活動,而且其年夜小一直地變更。點擊“停滯”按鈕,小球停滯活動。用鼠標拖動右下方的調理控件,可以調劑小球活動的速度。
這裡我們重要是應用Timer 控件、Panel 控件、TrackBar 控件、SpinEdit 控件、Shape控件和Button 控件來完成。重點是Delphi 的Timer 控件。在運轉法式時,該控件弗成見,也不克不及直接對它停止操作。Timer 控件每隔必定時光就會主動觸發OnTimer()事宜。本例就是應用它來觸發小球活動事宜的。
設計思緒:該法式要處理的重要成績是若何掌握小球活動和活動進程中,小球的速度和年夜小。應用Timer 控件的OnTimer()事宜來掌握小球的活動;應用TrackBar 控件和SpinEdit控件來調理小球活動的速度。小球是由Shape 控件生成的。
一.新建工程:
(1)啟動Delphi 6.0 法式。選擇“文件”菜單下的“新建”敕令,從彈出的子菜單當選擇Application 選項,則湧現新建工程的Form1 窗口。
(2)選擇“文件”菜單下的“工程另存為”敕令,彈出Save Unit1 As 對話框。在“保留在”列表框當選擇須要寄存該窗口文件地點的目次名;在“文件名”編纂框中填寫文件名,這裡填寫“Unit1”,點擊“保留”按鈕,保留下面的選項。
(3)履行上一步後,將彈出“工程另存為”對話框。在“保留在”列表框當選擇須要寄存該工程的目次名,最好和第(2)步拔取雷同的目次;在“文件名”編纂框中填寫保留處置該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保留”按鈕,保留下面的選項。
二.部門參數設置:
(1)激活Unit1 窗口,在“屬性”面板中設置該窗體的Caption 屬性為“活動的球體”,Color 屬性設置為“clMoneyGreen”。
(2)選擇“尺度”頁上的Panel 選項,在窗體中添加Panel 控件,調劑其適合的年夜小和地位,在“屬性”面板中設置該控件的Name 屬性為“Panel1”,BevelInner 為“bvLowered”,BevelOuter 為“blNone”,BorderStyle 設置為“bsSingle”,Color 屬性設置為“clSkyBlue”。
(3)選擇“體系”頁上的Timer 選項,在窗體中添加一個Timer 控件,在Object Inspecter面板中設置其Interval 屬性為1,Name 屬性為“Timer1”。
(4)選擇“附加”頁上的Shape 選項,在窗體中Panel1 上添加一個Shape 控件,在“屬性”面板中設置其Show Hint 屬性為“True”,Hint 屬性為“活動球體”,設置其Brush.Color 屬性為ClLime,設置其Shape 屬性為“slCircle”。
(5)選擇“尺度”頁上的Button 選項,在窗體中添加三個Button 控件,調劑其適合的年夜小和地位。在“屬性”面板中設置其Caption 屬性分離為“開端”、“停滯”和“加入”。
(6)選擇Win 32 頁上的TrackBar 選項,在窗體中添加TrackBar 控件,調劑其適合的年夜小和地位。在“屬性”面板上設置其適合的屬性。
(7)選擇Samples 上的SpinEdit 選項,在窗體中添加SpinEdit 控件,調劑其適合的年夜小和地位。在“屬性”面板上設置其適合的屬性。
三.代碼剖析:
(1)為了完成小球往返挪動的功效,須要設置一個全局變量,即整數I,I 的初始值為1。當I=1 時,小球向左挪動,撞到面板的左壁時,I 值變成2,此時小球向右活動,撞到面板右壁時,I 值又變成1。如許經由過程I 值的變更,就完成了小球的往返活動。這部門代碼在OnTimer 事宜中:
procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.interval:=trackbar1.position; //設置Timer 控件的觸發時光距離 if i=1 then //小球向左活動 begin if shape1.left>0 then begin shape1.left:=shape1.left-10; //使小球的地位產生變更 shape1.Width:=(shape1.Width+1)mod 70; //使小球地點矩形寬度產生變更 shape1.Height:=(shape1.Height+1)mod 70; //使小球地點矩形高度產生變更 end else i:=2; //小球向右活動 end; if i=2 then begin if shape1.left<(panel1.Width-shape1.Width-5) then begin shape1.left:=shape1.left+10 ; //使小球的地位產生變更 shape1.Width:=(shape1.Width+1)mod 70;//使小球地點矩形寬度產生變更 shape1.Height:=(shape1.Height+1)mod 70;//使小球地點矩形高度產生變更 end else i:=1; end; end;
(2)“開端”和“停滯”按鈕掌握小球能否活動,其實就是掌握Timer 能否任務:
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.interval:=trackbar1.position; //設置Timer 控件的觸發時光距離 Timer1.Enabled:=true; //小球開端活動 end; procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled:=False; //小球停滯活動 end;
(3)TrackBar 和SpinEdit 兩個控件掌握小球活動的速度,響應代碼以下:
procedure TForm1.SpinEdit1Change(Sender: TObject); begin trackbar1.position:=spinEdit1.Value; //轉變活動速度 end; procedure TForm1.TrackBar1Change(Sender: TObject); begin spinEdit1.value:=trackbar1.Position; //將Trackbar 值的變更告訴SpinEdit 控件 end;
四.Delphi彈球的完全代碼以下:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls, StdCtrls, Spin; type TForm1 = class(TForm) Panel1: TPanel; Button1: TButton; Button2: TButton; TrackBar1: TTrackBar; Timer1: TTimer; Shape1: TShape; SpinEdit1: TSpinEdit; Button3: TButton; procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure SpinEdit1Change(Sender: TObject); procedure TrackBar1Change(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; i:integer; implementation {$R *.DFM} procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.interval:=trackbar1.position; //設置Timer 控件的觸發時光距離 if i=1 then //小球向左活動 begin if shape1.left>0 then begin shape1.left:=shape1.left-10; //使小球的地位產生變更 shape1.Width:=(shape1.Width+1)mod 70;//使小球地點矩形寬度產生變更 shape1.Height:=(shape1.Height+1)mod 70;//使小球地點矩形高度產生變更 end else i:=2; //小球向右活動 end; if i=2 then begin if shape1.left<(panel1.Width-shape1.Width-5) then begin shape1.left:=shape1.left+10 ; //使小球的地位產生變更 shape1.Width:=(shape1.Width+1)mod 70; //使小球地點矩形寬度產生變更 shape1.Height:=(shape1.Height+1)mod 70;//使小球地點矩形高度產生變更 end else i:=1; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Timer1.interval:=trackbar1.position; //設置Timer 控件的觸發時光距離 Timer1.Enabled:=true; //小球開端活動 end; procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled:=False; //小球停滯活動 end; procedure TForm1.SpinEdit1Change(Sender: TObject); begin trackbar1.position:=spinEdit1.Value; //轉變活動速度 end; procedure TForm1.TrackBar1Change(Sender: TObject); begin spinEdit1.value:=trackbar1.Position; //將Trackbar 值的變更告訴SpinEdit 控件 end; procedure TForm1.Button3Click(Sender: TObject); begin close; //加入 end; initialization i:=1; end.