谈场景坐标[转帖] 

2006-12-29 12:31 发布

1707 0 0

http://gxr0.blog.sohu.com/27108780.html#comment

坐标是场景设计中常用的一个名词。坐标在游戏是很重要的一个运用,不同的情况下使用不同的坐标系。

不同的坐标系采用不同的单位,有以像素为单位的坐标,以格为单位的坐标,以块为单位的坐标等。不同的游戏格的大小又不一样,不同的情况下块的大小也不一样。

在2D地图中,应用到几个坐标:

1:像素。

这个坐标是程序上要用到的坐标系,程序需要知道地图有多大,有多少像素,某物件占用多少乘多少的像素,重心在什么位置。

2:格

这个坐标是策划要用到的坐标系,也是给玩家用的坐标系。各是游戏中设定的最小范围,比如15*15像素为一格,那么游戏中的大小都是这个格的倍数。如此,如果一个玩家站立的范围是一格也就是15*15大小的话,那么玩家是始终在一个格子里的,而不会站在两个格子中间,如此,玩家走路的步长的单位也不会是像素了,而是格,比如,走路是1格/秒,跑步是2格/秒。这个格在一些游戏中显示给玩家看的为坐标。如:369,589。这样的坐标用起来是很方便的。在地图中的各种掩码,遮罩的大小都是用格来表示的,另外陷阱,森林,草地,沙滩,雪地等等的特效也用用格来表示的,如坐标236,654对应的是雪地,那么玩家走上去的时候就会产生一个雪地的脚印发出噗噗的声音。

3,块

这个坐标一般是美术用到的坐标,在2D地图中,需要用到拼图,有两种,一种像大话西游系列和幻灵游侠系列那样的整张图片切割后再拼接的,画面细腻漂亮;另一种是像征服,征途,传奇等那样用部分图片切割后再重复拼接的,画面稍显粗糙,但是地图会很大的。在这些游戏中,切割都是很重要的环节,因为游戏加载不能一次加载太大的图片,所以有必要切割一下,像大话幻灵那样由于单个场景小,所以可以无需重复拼接,但像征服那样的就必须要重复拼接了,否则客户端太大。

这些切割后的图片是根据不同游戏分大小的,如64*64,128*128,256*256.如幻灵和征服就不一样。这些切割后的图片需要按照一定的规律再拼接成一张大图,于是生成一个文件,这个文件就是块坐标对应资源的索引文件。其实就是说,切割后的图片都是一样大小的,放置在某个文件夹中,然后这个文件就是将场景按照上面的大小划分出一块一块来,每一块对应的资源是哪里的什么图片。这样再客户端加载的时候会先读这个文件,从而生成场景。

3D游戏中的坐标有

1,格坐标

3D游戏中的格的大小不是固定的,在一开始要生成场景的时候就按照一定的大小生成场景,这个场景划分了很多格子,这个格子是程序算出来的,但是美术在编辑的时候,很容易会将这些格子拉扯的不像个样子,比如要隆起一座山,从平地上拉起一座山来,原本100个格子,还是100个格子,但是有些格子面积变大了。这种格子没什么用。

2,像素

像素是3D游戏用到最多的坐标单位。比如,人有多高,如我们定了人有2米高,这个高度是128像素,那么1米就是64像素,其实推导是反过来的,美术把一个人物制作出来了,不管怎么放大和缩小,没有参照物的话,都是一个样子的(看不出大小)。于是把一个标准人放场景,或者编辑器里,查看在这个场景中是多高,我们可以调整人的高度为128像素,如果我们想用1米=64像素的换算的话,这样单位就出来了,在游戏中所有用到的米的单位都会换算成像素在游戏中体现了。

3,玩家坐标(米坐标)

玩家坐标是显示给玩家看的一个坐标,由于3D游戏中玩家不再是走格子(因为格子大小不能固定),所以将场景按照一定大小划分成坐标,一般来说这个坐标就是上面所提到的米,也有几米一个坐标的。像魔兽世界中的坐标都是走很多步都是在一个坐标中的。这种坐标往往还运用在逻辑地图中的,比如,你走到一条河的时候会显示出“小河”字样。当然有时候也不一样,不同游戏的机制造成了实现这种功能的方法的不同。比如上面的这个例子有两种实现方法,1种是服务器加载一个索引文件,就是按照米坐标属于的逻辑区域名称。这样玩家无论走到哪里,都会对应到一个区域名称;另一种方法呢,是用颜色值把所有的逻辑区域涂出来,然后等级这些颜色值对应的逻辑区域名称,这样在服务器加载的时候就会加载这个图片,玩家走到什么位置就知道是什么颜色,对应的逻辑区域名称也就出来了。这两种各有优劣,当然还有其他办法来实现的。

4,大块坐标

这个是给美术看的,因为如果一个无缝的世界地图没有被切割成坐标,是难以安排工作的。以前我在设计的时候没有考虑到这一点,出了很多的问题,实际上即便是无缝地图也是要划分成大块的。另外美术在安排天空盒,场景光照,雾的时候也会用到这些,比如12号块和13号块是“黄土高坡片区”,那么对应的天空盒和光照情况是一样的。当然还有其他的实现方式,比如用米坐标,颜色图片来对应这些参数。

大块地图在世界场景拼接的时候需要,比如A做了黄土高坡片区,B做了井冈山片区,要整合成一个世界地图的时候,就需要给这些片区地图一个合适的位置用来拼接。我以前做的游戏中,大块地图是同样大小的,结果虽然是无缝链接地图,但是单个片区还是明显看出是方型的。经我后来的考虑,这种划分完全可以不用标准大小来切割,可以用曲线将整个世界切割,然后像蛋糕一样,不标准的切割后,交给美术独立制作,然后将这些不标准的地图再一一对应拼接到整个世界中去,这样就是魔兽世界那样的了。如此需要引擎支持不规则地图的编辑,如创建,切割,整合等。

5,服务器坐标

这个坐标单位还是像素,但是将世界根据不同的需要划分为多个部分,每个部分交给一个单独的服务器来维护,这样的服务器坐标一般按照人数,片区来划分,格式为0 0 1280 1280.表示从0,0坐标到1280,1280坐标为一个服务器维护。这在无缝链接地图中用到。这里的像素坐标为世界坐标,所谓的世界坐标是指所有的场景所在的具体位置。当然这里说的是指我以前做的游戏采用的方法,实际上关于分服务器加载还可以用上面的块坐标来实现,或者其他方法。

6,世界坐标

世界坐标指的是,一个统一的坐标系,在这个坐标系中只有一个0,0坐标点,比如世界大地图的最左上方为0,0点,这样玩家走在任何一个地方都会得到一个与其他地方不一样的坐标。在魔兽世界中是具有多个世界坐标系的。左边大陆与右边大陆是不同的坐标系,在副本中与在陆地中是有不同的坐标系的。特别是在副本中,这个副本契合实际陆地的坐标位置。比如玩家在死亡矿井副本中的时候,大地图上的位置也是对应的位置,但是实际上玩家不在大地图标志的地图当中,因为这是副本,一个由游戏创建的额外区域,这个区域拥有自己的坐标系,但是这个坐标系采用的是世界坐标系的一部分,比如起始坐标为1280,326,2156.如此我们可以猜测这样的坐标前面应该还有个标识的,如:0000,1282,2654,1254.前面的0000表示在左大陆,若是0200则表示在右大陆,03098则表示在第96个副本(03)中。

当然上面是猜测。

 

坐标只是一个工具,实现功能的工具。为了实现一些千奇百怪的功能:陷阱,阻挡,加载图片,标识大小,服务器分区加载,划分工作范围,采集功能,显示地图名称功能,等等,都可以用坐标来实现。其产生的文件就是一个坐标系的坐标对应的资源,名称,功能等等,这个文件很小,但是很有用。

B Color Smilies
谈场景坐标[转帖] 
联系
我们
快速回复 返回顶部 返回列表