游戏中地图的即时生成算法(2)
发布时间:2021-06-06
发布时间:2021-06-06
游戏中地图的即时生成算法
2006年8月
Suppl.1
渠鑫,等:2.5D游戏中地图的即时生成算法
Aug.,2006
根据扇面场景的描述,我们应该知道景物在位图中的顶点坐标即:(Src_X,Src_Y),也能知道景物的宽和高即:Src_W和Src_H。同样我们看到景物的哪个部分,才将那个部分显现出来,这样我们就必须先知道截得的图相对逻辑地图的坐标(CutPicX,CutPic—Y),最后拿着望远镜要在逻辑地图中移动着看,也就是主屏幕相对逻辑地图要运动,所以我们必须知道屏幕相对逻辑地图的坐标(MsPic_X,MsPicY)。到此为止能够给我们直接提供的量就这么多了,当然这是不够的,剩下的就需要我们在算法中实现了。抽象出来,我们要完成即时生成地图的工作还需要六个量,也就是我们待求的。它们是截图相对位图的坐标(CutBm_X,CutBmY)、要截的图的宽和高即:Cut-w和Cut_H,因为最后截得的图要反映在屏幕上,我们还得求出截图相对屏幕的坐标(CutMs_X,CutMS-Y)。
\£:!=∥
图3算法情况讨论
aIt觚t爿=SrcPic、X-MsP/c.Xo心^IY*S比P沁_.Y-MsPic—Y
CutMs
X=SrePie_X-MsPi屯X
CutMs。Y铷
CuzBmX-S∞一X
Cuz]知aY-M-pie.,Y.s“%.Y十sn:。Y
求截圈相埘位嘲j甄点们塑抓
2算法的描述
为了清楚起见,我们将这些变量结合图形表示出来,如图1和图2。
葶j珊潦位潜、土饼相艟逻辑潜碑坐标计算出戳I埘拥砖主瓣的坐标
‘cI蛐lm
\q N‘Y.sm}/
“。\C“/气\/
w叫坤睢
泌%泌?形
、\“mY “》/
x舢m.-Y’叫Sre_X,Sre
Y1
n,\:≥/m
CⅢWo
CuI
W.-.‘i40
.('ucMsX
I-l卜LSrcH十
Cut
W=-
S托W
Cat
V
Ck
:k
W■m
C~IM'X
‰*]CqlH¨
SⅨWChIt-
叫H∞
t~-M‘Y
CutSrcPfc
I-F-Sm.卅
Ckll-
Y-MsHcStep沁Y-MsPkY
‰H
求戳
瞰的宽乖】商
求穰|鬻盼岛
图1逻辑地图、主屏幕和位图的关系
\:?::彳
图4
N-S即时生成算法的图(情况A)
CutMsCutMs
Xm0
CutMsY=SrcPic_Y—MsPie_Y
V--0
弋%
cmBm_y-S∞_Y(、晾H=4RO
CatBm
X=MsPic_X-SrePie_X+j啦一x
CutlBm_X=MsPic—X-SnePicX+Src
X
n畦如0Y—MsPic_Y 轴P{c—Y+src—V
(Ⅶ一w《"J卜铆P吐x—孙Hc—x
CuLH=Src一1-14-SrcPicY ¨}He—Y
图2截图和位图的关系
-r,:ut№、,
C啦w=SrcW十
S阼雕oX—M‘pic■Cm
H珊H
由于主屏的移动是由玩家所控制的,所以带有不确定的因素,所以必须将所有可能的情况都考虑齐全。在这个算法中将可能出现的情况为九种。
根据主屏的位置不同划归为九种情况,再根据每种情况的不同将主屏上所需要的房子图片的截图正确地显示出来,如图3所示。
根据SrcPicX与MsHc—Y把整个算法分成A、B两个部分:当SrcPicX大于MsHc—Y时,执行情况A,否则执行情况B。算法的N.S流程图如图4、5所示。
我们对于这九种情况进行一下分析,对于CutBm_X、
415
图5
N-S即时生成算法的图(情况B)
CutBrn_Y、CutMs_X、CutMs_J这四个所要求的值可以分
成四类:
第一类:包括1、5、6、9情况;第二类:包括2、7情况;第三类:包括3、8情况;第四类:包括4情况;第一类:
在这一类中包含了1、5、6、9这四种情况。其特点是
游戏中地图的即时生成算法
2006年8月
系统仿真学报
Aug.,2006
房子截图相对于逻辑地图坐标的X、Y值都比主屏相对于逻辑地图坐标的X、Y值大。利用源位图相对逻辑图的顶点坐
Y值比主屏相对于逻辑地图坐标的x、Y值都小。而且房子截图相对于主屏的坐标X、Y值都为零,所以相比来说这种
情况下的六个值比较好求。
到此为止所有情况下的六个所需要的值就都已经求出
标和主屏相对逻辑图的坐标计算出截图相对主屏的坐标。
到这里所要求的六个值当中我们已经求出了四个,下面来求房子截图的宽和高。
由于第一类包含了1、5、6、9这四种情况,在这四种情况中每种情况的房子截图宽和高的值都是不一样的,所以我们还要分情况进行讨论。在这里我们假设主屏的分辨率是640*480。根据截图相对主屏幕的坐标、源位图的宽和高与主屏幕的宽(640)和高(480)进行比较区分各种情况就能计算出截图的宽和高。
到这里为止在第一类情况下所需要的六个值就都已经
求出来了。
.
来,只要将这些值合理的安排起来,当主屏发生移动时将主屏相对于地图的值不断地进行计算就能够即时地算出房子
等景物要截得的图的顶点坐标,以及截图的矩形区域,还有要在主屏上显示的坐标。有了这六个参数就能够准确的将房
子的截图显示出来。达到了即时生成的目的,再与其它程序配合,就能够完整作出游戏背景卷轴动画。
3算法分析
在这种算法中只要事先将景物等在地图中的实际坐标
第二类:
在这一类中包含了2、7两种情况。这种的特点是房子截图相对于逻辑地图坐标的X值比主屏相对于逻辑地图坐
标的X值大,但是Y值小。而且房子截图相对于主屏的Y坐
定下来,就可以直接计算出所需要的各种参数。比之用地图数组解决的算法,由于本算法没有循环等复杂控制结构,所以时间复杂度为一个常数,大大提高了效率。
经过实验,在地图比较大时,用本算法没有出现画面显
标为0。根据这些特性可求出房子截图相对位图的坐标和房
子截图相对于主屏的坐标。
下面在求截图的宽和高时也要根据截图相对主屏幕的
示缓慢的问题,而用一次生成算法时会出现明显的缓慢情况。
4结论
游戏引擎中画面显示的是否流畅是大家比较关注的问题。本算法利用动态裁剪实现地图的即时生成,解决了一次生成算法和用地图数组方法解决地图显示中的效率问题以
及场景限制问题,大大提高了游戏的美观以及效率。
坐标、源位图的宽和高与主屏幕的宽(640)和高(480)进行比较区分各种情况来计算。这和上面讨论的方法一样,只不过其中只包含了两种情况,所以讨论起来就比较简单。
所需要的六个值就已经讨论完毕。第三类:
在这一类中包含了3、8两种情况。而这一类与第二类是截然相反的。它的特点是房子截图相对于地图逻辑坐标的x值比主屏相对于地图逻辑坐标的X值小,而Y值大。这样
房子截图相对于主屏的坐标也截然相反是X坐标为0。根据
【1]
参考文献:
刘勇奎,高云,黄有群.一个有效的多边形裁剪算法【J】.软件学报,2003,14(4):845—856.【2】
荣钦科技.Visualc++游戏设计【M】.北京:北京科海电子出版
社,2003.
【3】
坂本千寻.Visual大学出版社,2004.
:
以上特点就可以求出房子截图相对位图的坐标和房子截图
相对于主屏的坐标。
c++角色扮演游戏程序设计嗍.北京:清华
[41
Julian2005.
Gold.面向对象的游戏开发M】.北京:电子工业出版社,
还是利用与一、二类情况相类似的讨论方法来求截图的
宽和高。
第四类:
,’
【5】四维科技,丁展.Visualc++游戏开发技术与实例【M】.北京:机械工业出版社,2005.
这一类比较特殊只包含了一种情况,即情况4。它的特点是与第一类截然相反。房子截图相对于逻辑地图坐标的x、
【6】李雪,石广田.一种新的任意四边形窗121线裁剪算法【J】兰州交通大学学报,2005,24(6):90—92.
416
上一篇:5.2平面直角坐标系(1)
下一篇:论中华文明起源与发展的动力与机制