Delphi實(shí)現(xiàn)碰撞球體完整實(shí)例代碼
本文以實(shí)例描述了用Delphi實(shí)現(xiàn)撞擊球效果的方法,類似彈球效果。點(diǎn)擊“開始”按鈕,窗體中的一個(gè)綠色小球?qū)⒉粩嗟刈笥易矒暨\(yùn)動(dòng),并且其大小不停地變化。點(diǎn)擊“停止”按鈕,小球停止運(yùn)動(dòng)。用鼠標(biāo)拖動(dòng)右下方的調(diào)節(jié)控件,可以調(diào)整小球運(yùn)動(dòng)的速度。
這里我們主要是使用Timer 控件、Panel 控件、TrackBar 控件、SpinEdit 控件、Shape控件和Button 控件來(lái)實(shí)現(xiàn)。重點(diǎn)是Delphi 的Timer 控件。在運(yùn)行程序時(shí),該控件不可見,也不能直接對(duì)它進(jìn)行操作。Timer 控件每隔一定時(shí)間就會(huì)自動(dòng)觸發(fā)OnTimer()事件。本例就是利用它來(lái)觸發(fā)小球運(yùn)動(dòng)事件的。
設(shè)計(jì)思路:該程序要解決的主要問題是如何控制小球運(yùn)動(dòng)以及運(yùn)動(dòng)過程中,小球的速度和大小。利用Timer 控件的OnTimer()事件來(lái)控制小球的運(yùn)動(dòng);利用TrackBar 控件和SpinEdit控件來(lái)調(diào)節(jié)小球運(yùn)動(dòng)的速度。小球是由Shape 控件生成的。
一.新建工程:
(1)啟動(dòng)Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項(xiàng),則出現(xiàn)新建工程的Form1 窗口。
(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對(duì)話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這里填寫“Unit1”,點(diǎn)擊“保存”按鈕,保存上面的選項(xiàng)。
(3)執(zhí)行上一步后,將彈出“工程另存為”對(duì)話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這里填寫“Project1”,點(diǎn)擊“保存”按鈕,保存上面的選項(xiàng)。
二.部分參數(shù)設(shè)置:
(1)激活Unit1 窗口,在“屬性”面板中設(shè)置該窗體的Caption 屬性為“運(yùn)動(dòng)的球體”,Color 屬性設(shè)置為“clMoneyGreen”。
(2)選擇“標(biāo)準(zhǔn)”頁(yè)上的Panel 選項(xiàng),在窗體中添加Panel 控件,調(diào)整其合適的大小和位置,在“屬性”面板中設(shè)置該控件的Name 屬性為“Panel1”,BevelInner 為“bvLowered”,BevelOuter 為“blNone”,BorderStyle 設(shè)置為“bsSingle”,Color 屬性設(shè)置為“clSkyBlue”。
(3)選擇“系統(tǒng)”頁(yè)上的Timer 選項(xiàng),在窗體中添加一個(gè)Timer 控件,在Object Inspecter面板中設(shè)置其Interval 屬性為1,Name 屬性為“Timer1”。
(4)選擇“附加”頁(yè)上的Shape 選項(xiàng),在窗體中Panel1 上添加一個(gè)Shape 控件,在“屬性”面板中設(shè)置其Show Hint 屬性為“True”,Hint 屬性為“運(yùn)動(dòng)球體”,設(shè)置其Brush.Color 屬性為ClLime,設(shè)置其Shape 屬性為“slCircle”。
(5)選擇“標(biāo)準(zhǔn)”頁(yè)上的Button 選項(xiàng),在窗體中添加三個(gè)Button 控件,調(diào)整其合適的大小和位置。在“屬性”面板中設(shè)置其Caption 屬性分別為“開始”、“停止”和“退出”。
(6)選擇Win 32 頁(yè)上的TrackBar 選項(xiàng),在窗體中添加TrackBar 控件,調(diào)整其合適的大小和位置。在“屬性”面板上設(shè)置其合適的屬性。
(7)選擇Samples 上的SpinEdit 選項(xiàng),在窗體中添加SpinEdit 控件,調(diào)整其合適的大小和位置。在“屬性”面板上設(shè)置其合適的屬性。
三.代碼分析:
(1)為了實(shí)現(xiàn)小球來(lái)回移動(dòng)的功能,需要設(shè)置一個(gè)全局變量,即整數(shù)I,I 的初始值為1。當(dāng)I=1 時(shí),小球向左移動(dòng),撞到面板的左壁時(shí),I 值變?yōu)?,此時(shí)小球向右運(yùn)動(dòng),撞到面板右壁時(shí),I 值又變?yōu)?。這樣通過I 值的變化,就實(shí)現(xiàn)了小球的來(lái)回運(yùn)動(dòng)。這部分代碼在OnTimer 事件中:
procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.interval:=trackbar1.position; //設(shè)置Timer 控件的觸發(fā)時(shí)間間隔 if i=1 then //小球向左運(yùn)動(dòng) begin if shape1.left>0 then begin shape1.left:=shape1.left-10; //使小球的位置發(fā)生變化 shape1.Width:=(shape1.Width+1)mod 70; //使小球所在矩形寬度發(fā)生變化 shape1.Height:=(shape1.Height+1)mod 70; //使小球所在矩形高度發(fā)生變化 end else i:=2; //小球向右運(yùn)動(dòng) end; if i=2 then begin if shape1.left<(panel1.Width-shape1.Width-5) then begin shape1.left:=shape1.left+10 ; //使小球的位置發(fā)生變化 shape1.Width:=(shape1.Width+1)mod 70;//使小球所在矩形寬度發(fā)生變化 shape1.Height:=(shape1.Height+1)mod 70;//使小球所在矩形高度發(fā)生變化 end else i:=1; end; end;
(2)“開始”和“停止”按鈕控制小球是否運(yùn)動(dòng),其實(shí)就是控制Timer 是否工作:
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.interval:=trackbar1.position; //設(shè)置Timer 控件的觸發(fā)時(shí)間間隔 Timer1.Enabled:=true; //小球開始運(yùn)動(dòng) end; procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled:=False; //小球停止運(yùn)動(dòng) end;
(3)TrackBar 和SpinEdit 兩個(gè)控件控制小球運(yùn)動(dòng)的速度,相應(yīng)代碼如下:
procedure TForm1.SpinEdit1Change(Sender: TObject); begin trackbar1.position:=spinEdit1.Value; //改變運(yùn)動(dòng)速度 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; //設(shè)置Timer 控件的觸發(fā)時(shí)間間隔 if i=1 then //小球向左運(yùn)動(dòng) begin if shape1.left>0 then begin shape1.left:=shape1.left-10; //使小球的位置發(fā)生變化 shape1.Width:=(shape1.Width+1)mod 70;//使小球所在矩形寬度發(fā)生變化 shape1.Height:=(shape1.Height+1)mod 70;//使小球所在矩形高度發(fā)生變化 end else i:=2; //小球向右運(yùn)動(dòng) end; if i=2 then begin if shape1.left<(panel1.Width-shape1.Width-5) then begin shape1.left:=shape1.left+10 ; //使小球的位置發(fā)生變化 shape1.Width:=(shape1.Width+1)mod 70; //使小球所在矩形寬度發(fā)生變化 shape1.Height:=(shape1.Height+1)mod 70;//使小球所在矩形高度發(fā)生變化 end else i:=1; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Timer1.interval:=trackbar1.position; //設(shè)置Timer 控件的觸發(fā)時(shí)間間隔 Timer1.Enabled:=true; //小球開始運(yùn)動(dòng) end; procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled:=False; //小球停止運(yùn)動(dòng) end; procedure TForm1.SpinEdit1Change(Sender: TObject); begin trackbar1.position:=spinEdit1.Value; //改變運(yùn)動(dòng)速度 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.
上一篇:Delphi實(shí)現(xiàn)限定軟件使用時(shí)間的方法
欄 目:Delphi
下一篇:Delphi使用OpenGL2d繪圖之畫圖片Bmp的方法
本文標(biāo)題:Delphi實(shí)現(xiàn)碰撞球體完整實(shí)例代碼
本文地址:http://mengdiqiu.com.cn/a1/Delphi/8639.html
您可能感興趣的文章
- 01-10在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中存取圖像的圖文演示無(wú)錯(cuò)
- 01-10delphi建立、讀取、存貯INI文件的方法《三》
- 01-10Delphi Command模式
- 01-10delphi 正弦曲線圖
- 01-10delphi建立、讀取、存貯INI文件的方法《二》
- 01-10插件管理框架 for Delphi(二)
- 01-10插件管理框架 for Delphi(一)
- 01-10Delphi中判斷文件是否為文本文件的函數(shù)
- 01-10delphi中一個(gè)值得大家來(lái)考慮的DLL問題
- 01-10初探Delphi中的插件編程


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中存取圖像的圖
- 01-10delphi建立、讀取、存貯INI文件的方法
- 01-10delphi 正弦曲線圖
- 01-10Delphi Command模式
- 01-10delphi建立、讀取、存貯INI文件的方法
- 01-10插件管理框架 for Delphi(二)
- 01-10插件管理框架 for Delphi(一)
- 01-10Delphi中判斷文件是否為文本文件的函
- 01-10delphi中一個(gè)值得大家來(lái)考慮的DLL問題
- 01-10初探Delphi中的插件編程
隨機(jī)閱讀
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載