设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4563|回复: 30
打印 上一主题 下一主题

[有事请教] 这种遮挡异常有解吗

[复制链接]

Lv5.捕梦者

梦石
0
星屑
37844
在线时间
5422 小时
注册时间
2006-11-10
帖子
6549
1
发表于 2018-4-2 18:33:51 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2018-4-2 18:37 编辑

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

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


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

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37844
在线时间
5422 小时
注册时间
2006-11-10
帖子
6549
2
发表于 2018-4-2 21:53:49 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 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
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37844
在线时间
5422 小时
注册时间
2006-11-10
帖子
6549
3
发表于 2018-4-3 10:11:15 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 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)

看看哪个效果好.
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37844
在线时间
5422 小时
注册时间
2006-11-10
帖子
6549
4
发表于 2018-4-3 13:14:36 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 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) 从操作上入手吧.

先开开关让全员生成影子,再改变角色行走图, 两个操作最好有时间差 ,比如切换地图前先开影子开关, 然后再到地图里自动执行其他操作.

评分

参与人数 1+1 收起 理由
89444640 + 1 感谢帮助~

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-3 10:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表