时间:2021-05-20
本文以实例描述了用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 事件中:
(2)“开始”和“停止”按钮控制小球是否运动,其实就是控制Timer 是否工作:
(3)TrackBar 和SpinEdit 两个控件控制小球运动的速度,相应代码如下:
四.Delphi弹球的完整代码如下:
unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ExtCtrls, ComCtrls, StdCtrls, Spin;typeTForm1 = 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;varForm1: TForm1;i:integer;implementation{$R *.DFM}procedure TForm1.Timer1Timer(Sender: TObject);beginTimer1.interval:=trackbar1.position; //设置Timer 控件的触发时间间隔if i=1 then //小球向左运动beginif shape1.left>0 thenbeginshape1.left:=shape1.left-10; //使小球的位置发生变化shape1.Width:=(shape1.Width+1)mod 70;//使小球所在矩形宽度发生变化shape1.Height:=(shape1.Height+1)mod 70;//使小球所在矩形高度发生变化endelsei:=2; //小球向右运动end;if i=2 thenbeginif shape1.left<(panel1.Width-shape1.Width-5) thenbeginshape1.left:=shape1.left+10 ; //使小球的位置发生变化shape1.Width:=(shape1.Width+1)mod 70; //使小球所在矩形宽度发生变化shape1.Height:=(shape1.Height+1)mod 70;//使小球所在矩形高度发生变化endelsei:=1;end;end;procedure TForm1.Button1Click(Sender: TObject);beginTimer1.interval:=trackbar1.position; //设置Timer 控件的触发时间间隔Timer1.Enabled:=true; //小球开始运动end;procedure TForm1.Button2Click(Sender: TObject);beginTimer1.Enabled:=False; //小球停止运动end;procedure TForm1.SpinEdit1Change(Sender: TObject);begintrackbar1.position:=spinEdit1.Value; //改变运动速度end;procedure TForm1.TrackBar1Change(Sender: TObject);beginspinEdit1.value:=trackbar1.Position; //将Trackbar 值的变化通知SpinEdit 控件end;procedure TForm1.Button3Click(Sender: TObject);beginclose; //退出end;initializationi:=1;end.声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Delphi用DLL实现插件的简单实例这是DLL的代码实现代码:libraryMyDll;usesSysUtils,Dialogs,Classes;proced
本文实例讲述了JS实现判断碰撞的方法。分享给大家供大家参考。具体如下:JS判断碰撞方法:复制代码代码如下:/**判断是否碰撞*@paramobj原对象*@par
本文实例为大家分享了js实现碰撞检测的具体代码,供大家参考,具体内容如下随手写了个简单的碰撞检测的代码。检测box1和box2是否发生碰撞,若发生碰撞,box2
本文实例讲述了delphi实现将BMP格式图形转化为JPG格式图形的方法。分享给大家供大家参考。具体实现方法如下:复制代码代码如下:procedureConve
本文实例为大家分享了pygame实现弹力球及其变速效果的具体代码,供大家参考,具体内容如下期望:1.球体接触到框体后反弹2.设置速度按键,按下后改变球体速度、颜