用到的组件:
(TDXDraw, TDXImageList, TDXSpriteEngine, TDXTimer, TDXInput)

原文链接:http://www.delphigamedev.com/tutorials/dxtut4.htm
代码下载

在前一教程中,我们学习如何使用DXDraw和其他相关组件。在本教程里,我们将进一步学习如何利用键盘或游戏控制杆(joystick)/游戏板(joy pad)来移动精灵,并介绍DelphiX里滚动背景的概念。

首 先是添加背景。我们在DXTimer组件里创建它,那么就可以在每个动画之前将其重绘(redrawing)。这样,我们只需要通过创建一个 TBackgroundSprite的特殊精灵类来滚动背景图片(像Pacman和Ghost精灵一样)。我们为背景精灵类命名为 TScrollingBackground。下面的代码应该放在创建Pacman和ghost精灵类型的代码后面。

TScrollBackground = class(TBackgroundSprite)
public
procedure
DoMove(MoveCount: Integer); override;
end;

接着我们在var声明区域的Ghost:TGhost;这行代码后面声明TScrollingBackground类型的变量:

Background: TScrollBackground;

为了完成背景的创建,我们还需要在FormCreate过程的开头添加如下代码:

Background := TScrollBackground.Create(DXSpriteEngine1.Engine);
with Background do
begin

SetMapSize(640, 480);
Image := DXImageList1.Items.Find('NewBackground');
Y := 10;
Z := -13;
end;

上面的代码假设您已经在DXImageList组件里添加一张名为NewBackground的图片(其大小为640x480)。

So far so good.我们不用在OnTimer过程里写DXImageList1.Items[1].Draw(DXDraw1.Surface,0,0,0);这 行了,因为现在由TBackgroundSprite来自动处理。当您删除这行后,编译出来的程序还是跟之前一样,但是背景则换成 'NewBackground'的图像了。我们现在来处理背景的滚动效果。考虑到这种种变化,我们需要修改DXTimer.OnTimer的代码。在这之 前,先让我们添加DXInput组件。

在上一教程里,我们让程序来控制精灵的移动,但在这里我们要让用户控制至少一个精灵。那么之前介绍的DXInput组件将变得很有用,我们只需稍微修改一下之前的代码就能令其好好工作了。

但您为窗体添加了DXInput组件后,您需要修改DXTimer.OnTimer的代码:

DXInput1.Update;

if isLeft in DXInput1.States then begin
Pacman.AnimStart := 2;
Ghost.AnimStart := 2;
Background.X := Background.X + 1;
end;

if isRight in DXInput1.States then begin
Pacman.AnimStart := 0;
Ghost.AnimStart := 0;
Background.X := Background.X - 1;
end;

if isUp in DXInput1.States then
Pacman.Y := Pacman.Y -1;

if isDown in DXInput1.States then
Pacman.Y := Pacman.Y +1;

DXSpriteEngine1.Move(2);
DXSpriteEngine1.Draw;
DXDraw1.Flip;

跟 之前的OnTimer代码相比,最后的那三行代码还在。添加的代码都是用来控制精灵的移动。在程序中,我们想在按下左或右方向键的时候令背景跟随精灵一起 移动。要做到这样,我们只需在向左或向右的时候减少或增加背景的X坐标值(例如:Background.X := Background.X + 1;)。当用户按下上或下方向键时,我们只需另精灵向上或下移动,但你也可以写一些使精灵跳跃的代码。我们也可以像Pacman精灵一样,在 TScrollingBackground.DoMove过程里编写滚动背景的代码。

在您运行程序前,你需要除去TPacman.Domove过程里的PixelCheck := True;和Pacman.X := Pacman.X + 1这两行代码,后代码如下:

procedure TPacman.DoMove(MoveCount: Integer);
begin
inherited;
if
PacmanDead = False then begin
Collision;
end else
end;

这将不会触发任何碰撞。我们只是把它留在那里(当您需要用到的时候)。

That’s it.只需简单地修改一下代码,我们就能实现许多新的功能。如果您有任何问题或建议,请e-mail到ben@delphigamedev.com或在论坛给我留言。在下一教程见。enjoy :-)

版权说明

本系列译文在博客园发表,除允许在互联网上自由转载外,不允许以其它任何方式拷贝、编辑、印刷出版、制作发行及传播,包括不允许在笔者未知晓的情况下制作成各种格式的电子文档并传播,更不得在未经笔者本人允许的情况下以任何形式的拷贝用于商业用途。笔者对本系列译文保留有追究其侵权责任的权利。

若需制成电子文档并用于非商业用途方式的传播,请保留以下版权信息,并与笔者联系邮寄副本一份。

作者:Nicholas.Yuen
网名:小丸
Email:ruanjiayuan AT gmail.com ( AT -> @)
Blog List:
http://genkagen.blogspot.com
http://ruanjiayuan.blog.163.com
http://randomforce.cnblogs.com
http://hi.baidu.com/genkagen
时间:2008.08.21
Copyright: 2008 Nicholas.Yuen All right resver

PS:转载请保留以上版权信息

转载于:https://www.cnblogs.com/waterfalleagle/archive/2010/06/27/1766337.html

DelphiX教程系列 4 - 滚动背景 part 1相关推荐

  1. DelphiX教程系列 3 - 动画 part 1

    用到的组件(TDXDraw,TDXImageList,TDXSpriteEngine): 原文链接:http://www.delphigamedev.com/tutorials/dxtut3.htm ...

  2. DelphiX教程系列 1 - 使用键盘和摇杆

    用到的组件(TDXInput.TTimer): 原文链接:http://www.delphigamedev.com/tutorials/dxtut1.htm 在这一教程里,我们将会学习如何使用键盘来移 ...

  3. webgis从基础到开发实践_开源WebGIS教程系列——11.1 GISLite 的开发背景与设计

    地理信息门户可以帮助人们更容易地发现.访问和使用地理空间信息, 是地理信息发布.服务和共享的重要环节.许多国家都很重视地理信息门户的 建设,把它作为国家空间数据基础设施(spatial data in ...

  4. 【Mac 教程系列第 18 篇】如何修改 iTerm2 的背景图片

    这是[Mac 教程系列第 18 篇],如果觉得有用的话,欢迎关注专栏. 默认终端的效果图是这样的 修改后的效果如下图所示 如果你已经习惯了默认终端的样式,前期看有背景图片的可能会不太适应,不过有时候尝 ...

  5. 【冰极峰教程系列之二】:牢不可破的九宫格布局

    原创:冰极峰 转载请注明出处 时间:2009年6月22日 8:40:16 冰极峰教程系列之一:九宫格基本布局 冰极峰教程系列之二:牢不可破的九宫格布局 冰极峰教程系列之三:三层分离的完美九宫格 冰极峰 ...

  6. eeglab教程系列(2)-加载、显示数据

    1 准备工作 1.1 安装eeglab: 在matlab中安装eeglab,请看安装教程:eeglab教程系列(1)-安装教程 1.2 测试数据 由于公众号上不好上传文件,所以请到QQ群中下载 测试数 ...

  7. XAML实例教程系列 – 对象和属性

    在前一篇已经介绍XAML概念:"XAML语言是Extensible Application Markup Language的简称,英文发音是"zammel",中文称为&q ...

  8. [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法

    [js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...

  9. CSS3 经典教程系列:CSS3 圆角(border-radius)详解

    <CSS3 入门教程系列>前一篇文章详细介绍了 CSS3 RGBA 特性的用法,今天这篇文章我们在一起来看看 CSS3 中用于实现圆角效果的 border-radius 属性的具体用法. ...

最新文章

  1. Mysql报错Forcing close of thread 139 user: 'root'
  2. XML 和 HTML中常用的转义字符
  3. windows下使用nginx调试简介
  4. mysql 无法处理非法数据_MySQL 处理非法数据
  5. Red Hat日志文件系统-ext3
  6. 随便玩玩Django--输入网址生成二维码
  7. MongoDB 覆盖索引查询
  8. 硬盘总是在计算机中消失了,我计算机的D盘,E盘和F盘都消失了,只有C盘了. 这是怎么回事? -d驱动器c驱动器...
  9. 为了完成月入 3W 的目标,我都做了哪些准备?
  10. 网易云解锁配置(windows)
  11. 高考2021加3科目成绩查询,官方解读:2021新高考实施方案正式公布,首选科目按原始分计入总成绩!...
  12. [毕业生的商业软件开发之路]现代商业软件开发概况
  13. python键盘上下左右控制_【322】python控制键盘鼠标:pynput
  14. 个人信息安全保障冷冽现实:内鬼的威胁要远大于黑客
  15. 使用3ds Max2022来制作简单的动漫头像
  16. html5弹球游戏的实现,HTML5 Canvas 木板弹球小游戏/碰撞检测和反弹
  17. 线性代数(三十四) : 广义特征向量
  18. 我是如何拿到小米、京东、字节等大厂前端offer的
  19. 如何评估社交网络中信息内容的价值呢?
  20. 相比32位, 64位的优势是什么?

热门文章

  1. 过去可忆,未来可期(随心录+杂记)
  2. CC2540开发板学习笔记(一)——LED点亮
  3. Redis的高级特性哨兵
  4. 基于xmpp openfire smack开发之smack类库介绍和使用[2]
  5. Kubernetes之路 1 - Java应用资源限制的迷思
  6. 【转】Android 获取本机号码(收集)
  7. Centos6.6安装zabbix server 3.2
  8. Dell服务器网络不通故障排除
  9. Android获取相册图片
  10. C语言笔记系列文章 索引目录表(持续更新中......)