在制作2D游戏和绘画艺术时,一个角色应该画多少个视角?

斜视图像处理程序设计的主要困难之一是当投影到2D屏幕上时,需要改变其世界坐标。等轴瓷砖游戏中的X轴一般是从左上指向右下,沿着35度左右的方向(如果视角是45度的话),每个瓷砖的底面在屏幕上看起来就像一个菱形。整个瓷砖是一个六面体(见右图)。X轴和Y轴成90度。这是一个很好的角度,但是在设计一个等角瓷砖的时候,更好的角度是26度(弧tan 0.5),对应的视角是30度。看起来更平了。32:15的瓷砖设计随处可见(如左图),因为32是一个非常方便计算机处理的数值。(所谓视角,是指视线与水平面的夹角。特别是大部分游戏都使用了俯视角度。如果需要把坐标轴和水平线的夹角换算成视角,可以取tg。Arc sin)在等距瓦片引擎的设计中,使用什么视角并不重要。程序代码基本一样,只是对美工来说不一样。但是经过几天的思考,我发现如果在斜视角(非平铺)的发动机设计中能够采用更合适的角度,发动机的速度会有很大的提高。最合适的角度是37度(弧tan 0.75),可视角度在48度左右。在这个角度下,游戏中的X轴和Y轴与屏幕上的X轴和Y轴的转换关系正好是三股四弦五的关系,这就在我们需要的大量坐标转换工作中提供了加快运算的可能;-)游戏中X轴上的一个单位相当于屏幕X的0.8个单位和Y的0.6个单位,游戏中Y轴上的一个单位相当于屏幕X的-0.8个单位和屏幕Y的0.6个单位,也就是说我们的Sprite在游戏中移动aX+bY时,在屏幕上移动了0.8 (a-b) X+0.6。

现在我们来看看屏幕,如果我们选择640x480的分辨率。啊哈,640:480=4:3,会有这样的好事;那么游戏坐标系中的一条水平线正好是屏幕的对角线,这样就很容易判断游戏世界中的一个坐标点是否在屏幕区域内;-)请看左图。外面的菱形框是游戏世界的矩形部分,中间的矩形框代表屏幕区域。我们的屏幕坐标范围从左上角的(0,0)到右下角的(639,479)。为了说明问题,游戏世界的坐标原点也设置在屏幕的左上角。好了,现在我们来计算一下屏幕四个角对应的游戏世界的坐标。既然屏幕对角线是800,那么右上角。左下角是(400,400);右下角是(800,0)。判断一个点是否在屏的依据是0 ≤ x+y ≤ 800,就这么简单。

最后说一下发动机设计的优化。在坐标变换中,最常用的运算是除法5。除法指令是最慢的。有什么办法可以优化吗?鉴于我们的动作值不是很大,这个操作可以达到最快的速度。也就是用*205/1024代替/5,205=(1+5*8)*5,386以上的CPU计算都可以使用LEA指令,速度非常快。向右移动10。-)当然,现在的C语言编译器把优化选项开到最大的时候,会自动帮你优化,你就不用写嵌入式汇编了。如果真要自己写,大概就是几行字:

mov edx,eax在eax是被除数a lea eax,[EDX+4 * EDX];eax = 5*a lea eax,[EDX+8 * eax];eax = a+8*eax = 41*a lea eax,[eax+4 * eax];eax = 5*eax = 205*a sar eax,10;Eax = 205*a/1024注:如果用C语言写,不如直接把/1024写成>;& gt10,虽然/1024会优化右移,但是除法是四舍五入的,所以编译器在优化的时候会考虑更多的东西,更多的指令。

担心计算的准确性?不用说,205/1024=0.200195,也就是说,一个点有0.000195的误差,所以即使累计到800个点(屏幕的对角线是最长的线),也只会有0.17个点的误差,而屏幕上的那个,