Delphi日志基本的绘图

来源:互联网 发布:postscript软件 编辑:程序博客网 时间:2024/05/29 16:38

本日志用来记录自己练习和记录自己学习生活的点滴。防止遗忘,对印象进行加深。。求路过的能解释和探讨本人的疑惑。谢谢了。。

(*抒发一下感慨,今天一大早就在这整DELPHI中关于基本图片绘制的练习。到现在有点累。问题还没解决掉,只好现在记录下今中午的些许收获。。。*)

 

其实我一直想模仿着做一个类似植物大战僵尸的游戏,来提升自己的水平。无奈刚开始,自己能力有限,希望路过的大神能给予指点。3Q

 

首先对于窗体的标题栏的最大化,最小化关闭按钮,在对象监视器的BORDERIcons选项中可以进行选择(*这个倒是今天的一个发现*),选择禁用窗口最大化ICON。貌似所有的plantsVSzombies都是这么做的。这个可能是个BORDERICONs集合,代码是这样设置的。Form1.BorderIcons := [ BISystemMenu,BIMinimize]就灰化了最大化按钮。然后将需要的图片使用canvas.Draw(posx,posy,object)绘制到form上。

后来想要进行模拟 游戏的 ALT+ENTER全屏操作。需要对FORM的ONkeyDown事件进行处理。FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);     首先判断是不是按下了ALT键。于是乎就去百度了Delphi中的键盘扫描码知道了 Alt的码值是 SSALT.。又纠结了半天才弄明白 TShift是一个集合。不能使用 = 对他进行 判断 才解决掉。。。。IF ( ssalt in shift ) then ............进行集合操作,判断了ALT按键。。接下来ENTER回车键就容易了,毕竟这不是一个集合,仅需要对ASCLL码进行判断就OK 了   if key = vk_return  then   .............。于是进行窗口的最大化处理。首先要进行的是去掉窗口的标题栏。e 这个比较容易,对象监视器里边的BORDERSTYLE属性就是决定了标题栏如何进行显示的,。正常的窗口style是BSSIZEABLE模式的,里边有好几种模式,不妨去看看,这个border style不是集合,也不是数组,只能指定一种属性。 对窗口的设置   WindowState = WSMaximized 表示窗口最大尺寸,额这个貌似从英文意思里也能看出来。Boerderstyle := bsnone。这些也都无关紧要了,只要再在窗口全屏的模式下处理按键取消全屏就行了。我用CTRL来取消全屏。问题是加载的图片过小(可能是其他原因)桌面的任务栏无法被覆盖。真正的全屏是把桌面的任务栏也覆盖掉的。这个求路过的人解释下。

 

接下来进行绘制资源的加载条,就是那个滚动的草坪。貌似这个对于本人来说还是有难度的。首先使用图片的WIDTH,HEIGHT 等属性找到具体的位置。同样是用CANVAS.DRAW()函数绘制上小图片。然后绘制上那个小草坪球。随着资源的加载草坪球逐渐滚动。。。玩过植物大战僵尸的人都懂的。此时我用定时器来预先模拟一下。可是问题就出来了。草坪球我是用canvas.draw绘制上去的,根据timer的interval 来改变不同的水平位置。 如果我定时地去form.repaint 那么原来的草坪球会被新的冲刷掉,但是你会很明显的看到form的客户区在不停的刷新。一闪一闪。。o(╯□╰)o。如果我不去定时地刷新 那么会在客户区绘制了N个草坪球。。。。。。。o(╯□╰)o。。

路过的大神这问题你是怎么解决的呢?。我是这样想的。使用canva.draw方法将图片画上去了,如果你不去定时的刷新,就无法冲刷到原来位置的图片。如果你去定时的刷新,那么整个客户区都会刷新。问题是怎么才能单一的刷新某个局部地区呢?貌似将图片放到TIMAGE组件里边是可以的(定时的改变TIMAGE组件的位置就可以吧?)。但是植物大战僵尸里边那么多图片,那么多僵尸都用成TIMAGE 就不科学了吧,。。这是我纠结的额,求各位指教下。

 

 

 

桌面任务栏无法隐藏掉。当然了图片也不够大,无法实现真正的全屏,周围都用黑色填充了。

 

 

原创粉丝点击