混合模式相信大家都使用过bm_add,bm_normal这种经典混合方式,而高级混合模式draw_set_blend_mode_ext对于一个刚接触的人来说是一个十分抽象的概念,不过一旦你了解他,你会发现他是相当简单的,你甚至可以制作自己特定的混合模式,来达到更高的游戏效果,所以这是进阶游戏制作必备的知识,希望大家和之前一样,一定要掌握~ 高级混合模式的例子实际上不少,不过这个函数不同,从游戏例子里基本不能完全看明白他是怎么工作的,而且最重要的是,在gm自带的help里,几乎对使用细节完全没有任何描述,以下我们就来解析一下这个函数(文中公式图载自gmlscripts,如果有其他疑问,这里也是个不错的去处哦) 在高级混合模式和普通不同,他拥有2个参数,第一个你在混合模式下正在使用的绘制命令绘制出的图形(如draw_sprite),而第二个则是在你现在所绘制图形之前原本就拥有的图形,如表面,游戏背景或者是在使用混合模式之前同样坐标下绘制的精灵……等等,并且混合的时候,通道RGB颜色值并不是0~255来表示,而是0~1哦(也就是颜色所占的分量)。 在中文帮助里说过这样一句话(这里不去管帮助里翻译是否通顺,你能理解就行)“正常的混色模式设置源地混合bm_src_alpha和目的地混合bm_inv_src_alpha”。意思则为:利用这组函数组成的GML:draw_set_blend_mode_ext(bm_src_alpha,bm_inv_src_alpha);你所得到的结果,就和普通并没使用任何混合模式的结果一模一样,这时,我们就从这里入手,首先来理解一下所使用的这2个参数:bm_src_alpha:混合因素是(As,As,As,As). bm_inv_src_alpha:混合因素是(1–As,1–As,1–As,1–As). 这句话听起来相当抽象,来详细说明一下吧(尽量理解):我们以一个像素为单位,来解析每个图片,每一个像素所经历的混合过程:bm_src_alpha如上所写,混合因素是4个As,这4个As的参数分别代表的是(R,G,B,A)即图像的红、绿、蓝、通道,现在使用了bm_src_alpha,意义就为将在这4个参数上,分别都乘以一个As,As在这里是什么意思呢,即是在你正在绘制的图形的alpha值,所以乘以As以后,那么就变为了(R*As,G*As,B*As,A*As)。 而第二个参数bm_inv_src_alpha,即为目的像素,我们得打的是正常混合模式,目前就得使用bm_inv_src_alpha参数,inv在这里即是inverse的缩写,(1-As)意思则是得到的相反值,原来是Alpha越大,那么现在就越小,比如1的话,现在得到的话就是1-1=0。 最终,这2个混合加在一起,我们得到的就是想要的结果啦,为了详细的解释出现的结果,你可以看看一下的公式:参数1(源) 参数2(目的) 结果[源红]*[源通] + [目红]*[1-源通] = 新的红色[源蓝]*[源通] + [目蓝]*[1-源通] = 新的蓝色[源绿]*[源通] + [目绿]*[1-源通] = 新的绿色[源通]*[源通] + [目通]*[1-源通] = 新的alpha通道
GameMaker高级混合模式运行原理 来自淘豆网www.taodocs.com转载请标明出处.