Project1

标题: 这种遮挡异常有解吗 [打印本页]

作者: 89444640    时间: 2018-4-2 17:35
标题: 这种遮挡异常有解吗
远景水面用角色行走图,只要不是32*32的,任你图块如何调节,都遮挡不了后面的海浪,我就¥#%……%¥&Y^%
然后我说忍了,回头想别的辙
然后我想用个其他的透视,把椰子扔远景,用影子来表现夕阳的光照,结果影子遮挡这里恶心到我了。

绘画情况,角色站在树后,影子会遮挡角色,现在这个现实简直……而且还没法调,因为角色高度大于32,你怎么让图块能认为角色实际的Y数值……没那么高
到是以前有个,让图块遮挡可以大于5的脚本
这个
#作者 抱歉,没记住,只能谁帮我写的,只能写,不详
class Game_Character
  alias _66RPG_screen_z screen_z
  def screen_z(height = 0)
    if $game_switches[220]
      if @tile_id > 0
        return $game_map.priorities[@tile_id] * 32
      else
        return (@real_y - $game_map.display_y) / 128
      end
    end
    return _66RPG_screen_z(height)
  end
end
#如果不需要用到这个功能,就把 220 号开关关掉

在没辙的情况下,只能用其他物品比如明显不能通过的仙人掌遮挡根部,避免遮挡异常 感觉好难受……

作者: 灯笼菜刀王    时间: 2018-4-2 18:33
本帖最后由 灯笼菜刀王 于 2018-4-2 18:37 编辑

所以,你是想要影子遮挡角色还是不遮挡?

遮挡的话, 在树干上一样设置优先度最高的阴影就是了, 通过调整色阶色相让树干+阴影颜色正常, 然后分两层放图块上, 绘画的时候重叠,或者直接显示阴影图片覆盖到上面


不遮挡的话, 阴影印到地板上就好了......


作者: 天使喝可乐    时间: 2018-4-2 19:38
一般来说,设置成不影响角色 违和感也没那么强的
作者: defisym    时间: 2018-4-2 20:29

如果因为引擎限制实在处理不好,而这一段又不是主要剧情流程,花几百块找人画一张CG要轻松省力的多……
大约就是一个左手倒右手的问题,个人建议引擎本身的层只处理沙滩、角色和阴影(刚好对应三层)
海浪和树木之类的都做到远景图里面,然后几张循环切……
至于冒头的问题……反正判定只有一格子,在这里切行走图就行……(被打飞
作者: guoxiaomi    时间: 2018-4-2 20:36
这个脚本是我写的啦……但是这几天没空看……
作者: 89444640    时间: 2018-4-2 21:00
突然想起来一个问题,我忽略了角色的影子,应该是这样如图所示

但是,如果按照默认的素材规格来画,角色实际位置是最下面32*32的高度,有阴影会造成太高了显示不正常,以前试图模拟地面漫反射时候也遇到了这个瓶颈,无程序情况下怎么弄
有没有什么方法可以设定一个行走图,行走图是角色图像垂直翻转后的的半透明黑影,让这个行走图在当前地图让,显示到角色当前坐标上,被角色遮挡,与角色动作一致的进行更换,模拟角色的影子
阴影脚本冲突绝对的,只能以无冲突图的默认法法来实现
如果画静态无法操作的容易,但是一旦牵扯操作,就麻烦大了
作者: 灯笼菜刀王    时间: 2018-4-2 21:53
本帖最后由 灯笼菜刀王 于 2018-4-2 21:55 编辑
89444640 发表于 2018-4-2 21:00
突然想起来一个问题,我忽略了角色的影子,应该是这样如图所示

但是,如果按照默认的素材规格来画,角色实 ...


要做真实影子的话,有三种方法

1, 直接画到行走图里,但是这样会导致行走图过长, 落脚点不和谐, 不过落脚点可以通过修改脚本坐标调整, 两种方法  
①,修改Sprite_Character   45-50行左右, 修改self.oy = @ch  改为 self.oy = @ch / 2 这样落脚点就是角色和影子的中间了, 适合影子比例规则的情况

②,修改Game_Character 1  245-255行左右, y = (@real_y - $game_map.display_y + 3) / 4 + 32  根据你的影子长度调整后面的数字, 适合影子比例不规则的情况,  不过改这个会连元件的坐标一起改, 所以要加上个判断  
    if @tile_id == 0  #不是元件调整坐标
    y = (@real_y - $game_map.display_y + 3) / 4 - 22
    else  #元件就保持原样
    y = (@real_y - $game_map.display_y + 3) / 4 + 32
    end

当然, 也可以给它加上个开关, 当XX开关打开的时候, 就用修改的坐标, 关闭的时候就保留原样, 避免其他地图也拖长影.......

这个做法有个缺点, 所有NPC你都要给他拉影子.......不过要真实的话,也是所有人都要就是了, 但是茂盛度和遮挡优先度异常就不可避免了=v=

第二个方法
黑影单独做个行走图, 然后和角色同步行动, 同步可以用并列运行控制或者直接 在Game_Player里, 角色上下左右移动的时候 后面加上 $game_map.events[编号].direction     $game_map.events[编号].x += 1 $game_map.events[编号].y += 1

这样的做法是绿色无污染,且可以不用给NPC加影子~  缺点是, 黑影"走"到最下面一行就不能继续往下了=3=.....如果角色继续走的话.....

第三个方法

是方法二·改.  行走图改为显示图片, 完美回避 方法1和方法2的问题,  缺点比较麻烦, 调坐标调死人.jpg
作者: 89444640    时间: 2018-4-3 09:57
灯笼菜刀王 发表于 2018-4-2 21:53
要做真实影子的话,有三种方法

1, 直接画到行走图里,但是这样会导致行走图过长, 落脚点不和谐, 不过落脚 ...

https://rpg.blue/forum.php?mod=v ... hlight=%D3%B0%D7%D3
这个似乎可以实现,但是……因为我素材规格,遮挡异常度很高。

作者: 灯笼菜刀王    时间: 2018-4-3 10:11
本帖最后由 灯笼菜刀王 于 2018-4-3 10:21 编辑

把你要当影子的事件铺到合适的位置, 让它最顶端处于角色脚下, 行走图换成头下脚上的影子

然后改变行走速度和角色相同, 勾上移动动画,穿透,最前面显示,  并行处理

事件页设置
if 角色面向 下
   if 下 被 按下时
      移动路线: 本事件
                    下移动
   end
end
if 角色面向 左
   if 左 被 按下时
.....


就这样咯,

但是这样也许会有些小问题.... 比如角色被前面某个东西挡住了,无法移动, 但是如果玩家依然按着方向的话 =v=.......

要避免就用个"$game_player.moving?" 把上面那些都套起来,应该就可以避免了

或者这样写

x = $game_player.x
y = $game_player.y
$game_map.events[编号].moveto(x,y)

看看哪个效果好.
作者: 89444640    时间: 2018-4-3 11:33
本帖最后由 89444640 于 2018-4-3 11:37 编辑
灯笼菜刀王 发表于 2018-4-3 10:11
把你要当影子的事件铺到合适的位置, 让它最顶端处于角色脚下, 行走图换成头下脚上的影子

然后改变行走速 ...




这脚本影子遮挡调了一下,很正常,角色的影子位于npc脚下,虽然跟现实还是有所区别不过能接受。
第一次测试时,npc有影子来着,我调了一下脚本变量编号,结果现在只有角色有影子,npc没有,重开新进度也没用,不知道是不是系统自动记录了什么奇怪的东西

然后,这个脚本的位置和我素材不一致,我为了横版ACT能用,角色行走图,横向的是贴图像底边。请问怎么修改一下?能让红框位置正常?
跟前的npc和远处船那个是事件,都不显示影子
目前使用脚本是这个,没有冲突,
Scripts.rxdata (329.22 KB, 下载次数: 60)
请问能帮我看一下吗?
作者: 灯笼菜刀王    时间: 2018-4-3 13:14
本帖最后由 灯笼菜刀王 于 2018-4-3 13:20 编辑
89444640 发表于 2018-4-3 11:33
这脚本影子遮挡调了一下,很正常,角色的影子位于npc脚下,虽然跟现实还是有所区别不过能接受。
第一次 ...


def set_shadow
    @shadow.visible = (! @character.transparent)
    return unless @shadow.visible
    ax = @character.pattern * @aw
    ay = @shadow_direction[(@character.direction - 2) / 2] * @ah
    @shadow.src_rect.set(ax, ay, @aw, @ah)
    @shadow.x = @character.screen_x + @add_x
    @shadow.y = @character.screen_y + @add_y +10
    @shadow.z = @character.screen_z + (@flay ? 9999 : 0)
    @shadow.opacity = @character.opacity * X☆R::Shadow_Opacity / 255
    @shadow.blend_type = @character.blend_type
  end
影子位置这里调整就可以了

至于NPC不显示影子, 应该是你自动执行引起的,
原因:
def update_shadow
    if @data_show != $game_switches[X☆R::Control_Sv_Id]
      @data_show = $game_switches[X☆R::Control_Sv_Id]
      @shadow.visible = @data_show ? have_shadow? : false
    end  
    return unless @data_show  #开关没开的时候到这里就切断了
    set_data       if need_refresh
    make_shadow    if @character_name != @character.character_name  #而后面打开开关的时候, 只有改变了行走图的主角才会生成影子 =.=
    @shadow.update if @shadow.bitmap
    set_shadow     if @shadow.bitmap
  end

解决方法, 不想随便改动前辈的脚本(其实是我没有更好的方法XD) 从操作上入手吧.

先开开关让全员生成影子,再改变角色行走图, 两个操作最好有时间差 ,比如切换地图前先开影子开关, 然后再到地图里自动执行其他操作.
作者: 89444640    时间: 2018-4-3 15:58
灯笼菜刀王 发表于 2018-4-3 13:14
def set_shadow
    @shadow.visible = (! @character.transparent)
    return unless @shadow.visible ...

调了半天……总算是显示正常了,不过相对的,所有用到的NPC位置得单调……
另外,似乎是行走图不能有空着的,为了节约空间不同类型的图放在一起这种不能用。必须单独做。





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