培训资料14到21页.docx
- 文档编号:2911876
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:21
- 大小:26.35KB
培训资料14到21页.docx
《培训资料14到21页.docx》由会员分享,可在线阅读,更多相关《培训资料14到21页.docx(21页珍藏版)》请在冰豆网上搜索。
培训资料14到21页
处始_________________________________________________培训资料14
第二章游戏编程的初级技巧
在本章中,我们将游戏编程的各个环节展开,向各位提供一个明确的线索,由浅及深地让您一一尝试。
在此之后再简要地向您介绍一下游戏编程的结构及流程,并举一简单的实例使您有一直观认识。
希望本章内容能使您达到独立编写简单游戏程序的目的。
1关于游戏的背景
1.1背景画面的生成
背景画面由两屏构成,每一屏画面由32×30个代码块组成,但对于一幅完整的背景画面来讲,代码点阵、着色开关和着色代码等都是必不可少的因素。
在视频处理器(PPU)中,以上几部分内容都有明确的地址分配。
所谓背景画面的生成就是指按照PPU地址分配规定,向PPU内送入所需要的背景画面代码、着色开关及着色数据这一过程。
一个游戏的一关有的只用一屏背景画面即可,有的需要两屏,还有的需要多屏,这时需要两屏不断地刷新连接。
这里我们先从一屏背景画面入手,了解它的生成,之后便可以举一反三地运用同样的方法生成两屏或更多屏。
背景画面的数据均放在程序的数据区内,在程序运行时,通过2006,2007口往PPU内送数,从而生成画面。
下面先看一个生成第一屏背景画面的例子:
这里有以下假设:
1背景画面的数据存放在C000开始的数据区内。
2代码#00为透明块。
3着色开关存放在B000开始的数据区中。
4着色代码存放在A000开始的数据区中。
ORG8000
LDA#00
STA2000:
关中断,确定点阵区,代码横写。
STA2001:
关显示。
LDA2002:
顺序同步。
LDX#00
LDY#04
LDA#20
STA2006
L1:
LDA#00
STA2007256个DATA00
INX
JNZ/L1
DEY
JNZ/L1:
初始化
LDY#00
LDX#04
LDA#00
STA00
培训资料15
LDA#COH
STA01
LDA2002
STA#20H
STA2006
LDA#00
STA2006
L2:
LDA(00),Y
STA2007
INY
JNZ/L2
INC01
DEX
INZ/L2:
送点阵代码。
LDX#00
LDA2002
LDA#23
STA2006
LDA#C0
STA2006
L3:
LDAB000,X
STA2007
INX
CPX#40H
JNZ/L3:
送着色开关
LDX#00
LDA2002
LDA#3F
STA2006
LDA#00
STA2006
L4:
LDAA000,X
STA2007
INX
CPX#10
JNZ/L4:
送着色代码。
LDA2002
LDA#00
STA2006
STA2006:
恢复2006。
STA2005
STA2005:
设置背景画面坐标。
LDA#0A
STA2001:
背景开显示。
JMP6000:
返回到监控程序。
至此,您便可以在电视屏幕上看到一幅完整的背景画面了。
当然我们也可以用这一办法生成第二屏背景画面,方法与上面极为类似。
在我们实际编游戏程序的时候,点阵、画面代码近排、着色开关以及着色代码均已由美工完成,程序员的任务就是将这些数据科学地存放在数据区内,并运用顺序生成背景画面的过程,在此过程中,我们可以运用各种技巧以提高效率。
值得一提的是,背景画面的代码往往是经过压缩存放的,这样,数据空间会很大的节省,但在生成背景画面时,需要将压缩码展开后再送上屏幕。
常用的压缩法在后面有关章节详细介绍。
培训资料15
1.2背景画面的移动与衔接
目前市场上流行的游戏种类很多,单屏背景的游戏只是其中的一种且用的不多,更多的游戏则是需要两屏、甚至更多屏背景以丰富游戏的内容。
这便需要提出一个背景画面的移动与衔接的问题。
背景画面的移动我们可以通过定时地改变背景画面的坐标来实现。
2005这一功能口就是背景画面的横纵:
读一次2002口进行顺序同步后,往2005口连续送两个数,第一个数是背景画面的横坐标,第二个数是画面的纵坐标。
横坐标的范围是#00-#FF,纵坐标是#00-#EF,以屏幕左上角为坐标原点。
如果不读2002口进行顺序同步,则2005口两个数的意义可能正好相反。
下面为两屏横接向左移动的例子。
ORG8000
LDA#80
STA10
LDA#00
STA00:
初始化
STAFFFA
LDA#81
STAFFFB:
设置中断入口为8100
LDA#OA
STA2001:
开显示
LDA#80
STA2000:
开中断
L1:
JMP/L1:
等中断
ORG8100:
中断服务程序入口
LDA10
STA2000
LDA#00
STA2006
STA2006
LDA2002
*LDA01
*CMP#00
*JNZ/L2
*LDA10
*EOR#01
*STA10
*STA2000
L2:
NOP
LDA01
STA2005:
改变背景画面的横坐标
INC00
LDA00
CMP#F0
JNZ/L3
LDA#00
STA00
L3:
NOP
INC01
RTI
培训资料16
运行上面的例子就可以看到背景画面的移动效果了。
这里有两点要特别指定:
1、上述例子中带‘*’的一段程序起一判断衔接作用。
如果没有此段程序,就会出现闪屏现象。
这是因为当前屏幕坐标移动到最大时,应该换屏而没有换,还是显示原来的那屏,而原来的那屏已移到屏幕外,此时坐标重新回到#00处,自然会在屏幕上给人以闪动、不连续的感觉。
为解决这一问题,在往2005送入新的坐标之前,先进行判断坐标是否已到了最大值,如果已到,则改当前显示屏为另一屏。
2、以上例子只展示了背景画面的左移现象,其实背景画面的横坐标的修改十分灵活多变,我们可以根据具体需要灵活运用,以得到不同速度,不同方向及各种连续效果的实现。
1.3背景画面的移动刷新法
通过两屏的移动、衔接与交替显示,从而展示一个不断向前延伸的背景画卷,实现这一功能就是背景画面的移动刷新。
为了达到良好的视觉效果,既连续又不交烁,通常是刷新可视屏以外的部分,具体做法如下:
1、首先生成一屏半画面,显示一屏,另半屏作备用,这样在刚刚移动时接合处是连续的。
2、当第一屏移出可视屏一列或一行代码块时,同时刷新一列或一行背景画面作为备用,当第二屏已经刷新完后,第一屏的前半部分已经移出可视屏,这时再刷新第一屏已显示过的部分。
这种边移动边刷新的方法在目前移动背景的游戏中是一种常用的方法。
应该指出,横接时刷新以列为单位,竖接时以行为刷新单位。
1.4背景画面的动态效果实现
背景画面的动态效果,是指通过对背景画面的修改、控制操作,产生动态视觉效果。
这一点是十分心要的,原因在于:
1、动态效果数量有限。
2、动态角色横向代码块数量有限制。
因此,如果遇到一个大的物体(如炮台)或大量小的动态角色(如大批小蜜蜂、玛丽医生里的细菌、魂斗罗中的水波纹等)它们的动态效果都很难用块来实现,或难以达到理想的效果,这时运用背景实现动态效果就显得很方便、很必要。
下面介绍几种常用的方法:
1.变换点阵代码:
对背景画面的某些代码定时更换,实现动态效果。
2.切换点阵区
3.运用行移技术实现。
2关于动态角色
2.1动态角色的生成
生成动态角色有两种方法:
运用2004口或用4014口,一般常使用4014口,2004口可参见第一章。
培训资料17
4014口控制CPU内部的一个专门电路以实现动态角色的生成,办法如下:
1。
选定#02页--#07页中的某一页作为存放动态数据的动态页,先将这一页的
数据清空,否则有很多随机数不是所预期的动态数据。
2。
将需要的动态角色数据写入动态页。
3。
同步后,启动4014口(将动态页送入4014)。
下面是一启动#02页动态角色的启动程序:
ORG8000
LDA#04
STA2000
LDA.10
STA2001:
动画开显示
LDA2002
BPLFB:
时间同步,等待扫描的间歇
LDA#00如果不开显示,则不需时间
STA2003同步,只需顺序同步即可。
LDA#02
STA4014
LDA#10
STA2001
JMP6000
至此,CPU内的动态角色处理电路自动将#02页的确256个数送入屏幕。
在此,有以下几点值得注意:
1、一页的动态角色数据共256个,每4个数为一组,决定一个动态角色块,因此一页数据最多可以表示64个动态角色块,通过2000口的D5位可以使动态块扩展成128块,此时每组数代表了两组动态块,详情请参见第一章。
总之,允许的最多动态块数量是有限的。
2、每组动态数据所代表的意义
第一个数代表该动态块的纵坐标;第二个代表动态块的图块代码;第三个数代表动态块的控制字;第四个数是该块的横坐标。
关于第三个数(控制字)的详细内容,请参见第一章。
3、2000口的D5=0时,动态角色只能同时使用一个区的点阵;D5=1时,可以使用二个点阵区的点阵,详情见第一章。
2.2动态角色的移动
动态角色的移动是十分简单的,它是通过每隔一段时间修改一次角色的坐标来实现的,我们可以通过控制修改坐标的时间间隔和坐标每次变化值的大小来控制动态角色的不同动动速度。
这里需要特别值得注意的是,当坐标被修改以后,必须再次启动动态角色页一次,
才能真正实现坐标的改变。
所谓启动动态页即:
读2002;将#00送到2003;将动态页的页号送4014。
2.3动态角色的不同运动轨迹
在我们以往看到的游戏中,动态角色的运动十分灵活多变,不但有速度的变化,还有轨迹的变化。
轨迹无非是由一些非连续的坐标点构成的,这些坐标数据可以通过查表法得到,也可通过运算产生。
有两点值得注意:
培训资料18
1.改变动态角色坐标的时间间隔长短可以控制动态角色的运动速度。
2.在一特定轨迹上取代表点的间隔疏密不同,便可以得到间断或连续的动作实现。
2.4动态角色的动作实现
动态角色运动起来后,一般要有各种动作,例如:
迈腿、摆手等;蜜蜂飞行时翅
膀要扇动;人物跳起来后在空中翻跟头等。
这些动作通常是由如下两种方法实现
的:
1。
在动态角色的运动过程中,随时改变动态角色的点阵代码。
2。
在动态角色的运动过程中,切换点阵。
在实际过程中,根据具体需要采取不同办法,并灵活控制各种时间间隔,以实现理想的效果。
2.5动态角色消隐法
这里所指的就是如何使屏幕上的动态角色在需要的时候消失。
之所以提出这个问题,是因为通常将动态角色的坐标置成#00的办法消隐动态角色是不对的,因为这样所谓消失的动态角色实际上都在屏幕的左上角,并没有真的从屏幕上消失。
正确的方法是动态角色的坐标改为#F0,因为动态角色的纵坐标范围是#00-#EF,在#F0-#FF范围是在可视屏以外,在屏幕上看不到。
2.6动态角色横超8块产生的现象及处理办法
在一屏当中,如果有8块以上的动态块纵坐标相同或有部分重曡时,就会有些动态块看不到,在屏幕上横向最多可以显示8个动态块
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 培训资料 14 21