Project1

标题: RM中精灵的合成方式解释 [打印本页]

作者: shoed    时间: 2011-12-23 16:22
标题: RM中精灵的合成方式解释
本帖最后由 shoed 于 2012-1-3 21:40 编辑

原文地址
http://blog.sina.com.cn/s/blog_71037efa0100zsr1.html


RpgMaker XP中的精灵类中的功能非常强大,这里谈一下其中的一个属性:

blend type

这个属性有三个值,(0:正常,1:加法,2:减法)。

注意这个属性只能是作用于两个精灵,Bitmap是没有这个属性的,也就是说只有当两个精灵相叠加时,给上一层的精灵设置这个值才能产生效果,下一层的精灵如果设置这个值只能对再下一层的精灵产生效果。

那么这个属性如何使用呢?

首先准备一张底图,这张图作为最底层的精灵使用。

0、正常

没有什么特殊效果,只是将上一层的精灵叠加在底图上,我的上一层精灵使用的是一张白色的图。

1、加法

底图上的象素颜色+上一层精灵中位图的象素颜色,当颜色值超过255时取最大值255。可以看出如果我的上一层精灵使用的是白色图,那么与底图象素相加,还是白色,白色是颜色是255,相加后也不能超出255,所以还是白色。


如果我的上一层精灵使用的黑色图,那么与底图象素相加,就是底图颜色,黑色图颜色是0,相加后只能是底图上的颜色,任何值与0相加还是那个值(a + 0 = a)。从下图可以看到,上一层精灵已经看不到了。



2、减法

底图上的象素颜色-上一层精灵中位图的象素颜色,当颜色值小于0时,取最大值0,颜色只能是正数嘛。现在我将上一层精灵所使用的图片改成黑色,你可以看到与上图相同的效果,相减后还是底图上的颜色,因为任何值与0相减还是那个值(a - 0 = a)。

但如果上一层精灵使用的图片改成白色,效果就又不一样了,底图上的象素颜色不可能超过255,当减去255后差值就会变成负数,按取最大值0的原则,上一层的精灵图就会变成黑色。


下面讲一下在RM中经常会被使用到的特效,我这里用伪代码加以说明。

首先画一个底图精灵
底图精灵=Sprite.new
底图精灵.bitmap=Bitmap.new("Graphics/Titles/底图.png")
再在上一层画一个显示白色图的精灵
上一层精灵= Sprite.new
上一层精灵.bitmap=Bitmap.new("Graphics/Titles/上一层图.png")
做完这两步你就能看到如下的效果,这里偏移了上一层精灵,只是作为演示。


最关键的一步了,准备一张遮罩图,注意遮罩图是有讲究的,黑色区,白色区可以根据你想达到的效果来做,我这里使用了一张带有透明效果的图片,使用透明的边界就可以不用考虑边界上的颜色了。


这两句代码最重要了
遮罩图=Bitmap.new("Graphics/Titles/mask.png")
上一层精灵.bitmap.stretch_blt(Rect.new(0,0,400,400), 遮罩图,Rect.new(0,0,810,810))
这两句所起的作用就是将遮罩图的象素拷贝到上一层精灵的位图中,透明象素不会被拷贝,上一层精灵就会变成如下如的样子。


给上一层精灵加上混合效果


作者: 暗黑骑士    时间: 2011-12-23 16:29
图片显示不能,需右键-属性-复制地址再重新打开……
作者: www.μ.com    时间: 2011-12-23 17:42
诶,头一次看见新浪在6R出现。

作者: JinFa    时间: 2011-12-26 21:48
很棒的講解哦,雖然圖片要看有點不方便

謝謝囉




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1