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

Project1

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

[已经解决] 想请教如何修改脚本,能在显示文章时出现“上下黑边”

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1404
在线时间
147 小时
注册时间
2015-7-19
帖子
38
跳转到指定楼层
1
发表于 2021-3-30 00:30:32 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 水舞沨流 于 2021-3-30 00:43 编辑

问题的起因:希望玩家能直观地意识到“剧情对话结束了,我可以继续操作了。”
思路是:准备一张有透明通道的泛用型上下黑边图片,在每次显示文章时都自动显示。

Q:“你为什么不在每次发生剧情的时候都直接显示图片?”
A:因为前面已经做了很多剧情了,中间还有播放音效或者插入CG、等待20帧之类的演出,想借助F11的伟大力量一劳永逸地解决问题XD

————————————————————————————————————
后续编辑:

对不起我现在感到惭愧极了,因为我循着印象找到了一个叫做电影式对话的脚本:
https://rpg.blue/thread-206814-1-1.html

据说会造成许多冲突,有着很大的移植难度,

所以还是很好奇在保证兼容性的基础上,有没有直接实现我用黑体标注的那种效果的方式XD。

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

7
发表于 2021-5-9 21:35:54 | 只看该作者
我在考虑显示黑边之类和黑边结束的那些事件指令要不要写成公共事件调用
这样会更加简洁一些,而且方便下次修改
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
6
发表于 2021-3-31 10:10:31 | 只看该作者
现在看我5楼脚本,一堆问题……
skin那块  $game_system.message_frame = 1 就能解决
也没考虑战斗以及更改文章选项问题

保留窗口样式,实际上使脚本更简单了
默认的消息窗口,位置为下时 ,只留了16高度(有点窄)
楼主可以考虑修改窗口Y值

——————————分割————————————————————
楼主问类似的问题,可以先PS张效果图,方便理解

点评

我也意识到了这个问题,语言表述还是会不够直观哈哈哈哈哈  发表于 2021-3-31 16:41
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
5
发表于 2021-3-30 21:40:33 | 只看该作者
我没太明白楼主的意思
大概写了下
class Window_Message < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化状态
  #--------------------------------------------------------------------------
  def initialize
    super(80, 304, 480, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.z = 9998
    @fade_in = false
    @fade_out = false
    @contents_showing = false
    @cursor_width = 0
    self.active = false
    self.index = -1
   
    skin = Bitmap.new("Graphics/Windowskins/001-Blue01")
    skin.fill_rect(Rect.new(0, 0, 128, 128), Color.new(0, 0, 0, 0))
    skin.fill_rect(Rect.new(128, 0, 64, 64), Color.new(0, 0, 0, 0))
    self.windowskin = skin
   
    @blacks = Array.new(2) {|i|
      sprite = Sprite.new
      sprite.bitmap = Bitmap.new(640, 50 + i * 126)
      sprite.bitmap.fill_rect(sprite.bitmap.rect, Color.new(0, 0, 0, 180))
      sprite.y = 304 * i
      sprite.z = self.z + 1
      sprite.visible = false
      sprite
    }
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  def dispose
    terminate_message
    $game_temp.message_window_showing = false
    if @input_number_window != nil
      @input_number_window.dispose
    end
    super
   
    @blacks.each {|i|
      i.bitmap.dispose
      i.dispose
    }
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    super
    # 渐变的情况下
    if @fade_in
      self.contents_opacity += 24
      
      @blacks.each {|i| i.opacity += 24 }
      
      if @input_number_window != nil
        @input_number_window.contents_opacity += 24
      end
      if self.contents_opacity == 255
        @fade_in = false
      end
      return
    end
    # 输入数值的情况下
    if @input_number_window != nil
      @input_number_window.update
      # 确定
      if Input.trigger?(Input::C)
        $game_system.se_play($data_system.decision_se)
        $game_variables[$game_temp.num_input_variable_id] =
          @input_number_window.number
        $game_map.need_refresh = true
        # 释放输入数值窗口
        @input_number_window.dispose
        @input_number_window = nil
        terminate_message
      end
      return
    end
    # 显示信息中的情况下
    if @contents_showing
      # 如果不是在显示选择项中就显示暂停标志
      if $game_temp.choice_max == 0
        self.pause = true
      end
      # 取消
      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
          $game_system.se_play($data_system.cancel_se)
          $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
          terminate_message
        end
      end
      # 确定
      if Input.trigger?(Input::C)
        if $game_temp.choice_max > 0
          $game_system.se_play($data_system.decision_se)
          $game_temp.choice_proc.call(self.index)
        end
        terminate_message
      end
      return
    end
    # 在渐变以外的状态下有等待显示的信息与选择项的场合
    if @fade_out == false and $game_temp.message_text != nil
      @contents_showing = true
      $game_temp.message_window_showing = true
      reset_window
      refresh
      Graphics.frame_reset
      self.visible = true
      self.contents_opacity = 0
      
      @blacks.each {|i| i.visible = true }
      
      if @input_number_window != nil
        @input_number_window.contents_opacity = 0
      end
      @fade_in = true
      return
    end
    # 没有可以显示的信息、但是窗口为可见的情况下
    if self.visible
      @fade_out = true
      self.opacity -= 48
      
      @blacks.each {|i| i.opacity -= 48 }
      
      if self.opacity == 0
        self.visible = false
        
        @blacks.each {|i| i.visible = false }
        
        @fade_out = false
        $game_temp.message_window_showing = false
      end
      return
    end
  end
end

点评

但是这个触发条件已经和我之前异想天开的那个点子一模一样了,非常感激。  发表于 2021-3-31 01:38
我拿去试了一下,就方便程度来说蛮好的哈哈哈哈,本来是希望对话窗口样式不变,下半部的黑边宽度和上半部分一样(就像电影画面那样)  发表于 2021-3-31 01:36
下次脚本可以用不[code][/code]框起来,会发现新大陆……:)  发表于 2021-3-31 01:03

评分

参与人数 1星屑 +100 收起 理由
RyanBern + 100 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

4
发表于 2021-3-30 15:34:15 | 只看该作者
只要能明确的追踪到黑边显示的开始和结束应该不难,是否理解为:
1. 在没有黑边的情况下,第一次出现对话指令时开始出现黑边
2. 在有黑边的情况下,持续监测,一旦玩家可以自由移动的时,移除黑边

在这两个地方启动并行的公共事件显示/移除黑边应该就可以了。

点评

差不多是这个样子,只不过第二条其实应该是“当一段剧情结束后,黑边消失,暗示玩家可以自由移动了”这种feel  发表于 2021-3-31 01:32
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36427
在线时间
10796 小时
注册时间
2009-3-15
帖子
4814
3
发表于 2021-3-30 14:26:57 | 只看该作者
本帖最后由 soulsaga 于 2021-3-30 14:33 编辑

在每次显示文章时都自动显示

那和不显示有区别吗..你一直都能操作啊

或且这样並行公共事件判断对话中就显示图片..怎样写来着..等大佬..

点评

“可以操作”指可以自由移动,但是按确认键进行对话这个还是由玩家进行的,并不是出现了黑边就要全自动对话的意思。  发表于 2021-3-31 01:29
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
2
发表于 2021-3-30 09:17:53 | 只看该作者
公用事件1,显示图片1黑边是上移,淡入20帧,黑边2下移20帧播放音效,
结束时候反向操作 公用事件2,怕有没玩过rpg的菜鸟不知道干啥,显示图结束后显示图片按任意键继续,醒目位置醒目颜色,分歧着个得用脚本,presh any什么的,我不是程序不知道,一般我要用就写按空格继续,爱按不按,不按别玩。按键后图片消失干干啥干啥。
放着绿色环保的不用非要用脚本,要不自己能写,要不就抱着以后越来越多冲突的觉悟吧。

点评

没事啦!还是十分感激!  发表于 2021-3-31 01:31
想到什么就写的什么,语气不好非常抱歉,希望楼主原谅。  发表于 2021-3-30 16:04
然而主楼也说清楚了:我只是很好奇还有没有更加“一劳永逸”的做法。我自己知道怎么绿色环保,没有必要被用这么暴躁的语气训斥哦。  发表于 2021-3-30 12:16
我觉得这种方法和我主楼的思路差不多,都是在事件发生时专门加一条指令(显示图片/调用公共事件),既然如此其实我自己的办法也是可以用的  发表于 2021-3-30 12:15
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 10:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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