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

Project1

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

[已经解决] 请教前辈们该如何数帧描绘一个文字?

[复制链接]

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
跳转到指定楼层
1
发表于 2018-4-6 16:00:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
module helpset
Speed = 3
end
以上的Speed是表示多少帧数描绘一个文字。
现在我想在帮助窗口里使用这个方法...
但苦于并没有一个好的思路来实现。
所以想请教各位前辈这种帧描绘一个文字是该怎么实现的?
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。

Lv5.捕梦者

梦石
0
星屑
33069
在线时间
5103 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 2018-4-6 17:21:38 | 只看该作者
这个说起来就比较麻烦,不复杂但是比较繁琐。
首先一段文字 text 需要弄成数组形式: @text_array = text.split("")
另外是间隔时间描绘,需要一个变量记录当前描绘到哪个位置了:@text_pos = {:x=>0,:y=>0}
开始描绘文字时把这俩都初始化
def 描绘文字(text)
  @text_array = text.split("")
  @text_pos = {:x=>0,:y=>0}
end
然后写一个描绘单个文字的函数
def 描绘单个文字
  tx = @text_array.shift  #获取并删除文字数组第一个字。
  cw = contents.text_size(tx).width #获取描绘这个字需要的宽度。
  if @text_pos[:x] + cw > xxx   #如果描绘的坐标X加上宽度超过 xxx ,就换行。
    @text_pos[:x] = 0
    @text_pos[:y] += 32    #假如行距是 32 。
  end
  draw_text(@text_pos[:x], @text_pos[:y], cw, 32, tx)  #描绘这个文字。
  @text_pos[:x] += cw   #宽度累加。
end

最后在 update 里面执行刷新就行了。
def update
  .........
  描绘单个文字 if @text_array && @text_array.size > 0 && Graphics.frame_count % Helpset::Speed == 0
end

评分

参与人数 2星屑 +80 +2 收起 理由
RyanBern + 80 + 1 认可答案
文雅夕露 + 1 十分感谢

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
3
 楼主| 发表于 2018-4-6 18:29:38 | 只看该作者
本帖最后由 文雅夕露 于 2018-4-6 18:31 编辑
芯☆淡茹水 发表于 2018-4-6 17:21
这个说起来就比较麻烦,不复杂但是比较繁琐。
首先一段文字 text 需要弄成数组形式: @text_array = text.s ...


按照芯前辈的方法稍微整理了一下,发现了不少问题。
可能是我写的方法有一些问题...
刷新好像有点问题。

只有在使用物品或者特技时才会显示帮助。

战斗的话,直接把帮助窗口给消失掉了...


  1. module Helpset
  2. Move = 3
  3. Width_MAX = 480
  4. Over_windowhelp = true
  5. end
  6. #==============================================================================
  7. # ■ Window_MoveHelp
  8. #------------------------------------------------------------------------------
  9. #  逐个字描绘的帮助窗口
  10. #==============================================================================
  11. class Window_MoveHelp < Window_Base
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始化对像
  14.   #--------------------------------------------------------------------------
  15.   def initialize
  16.     super(0, 0, 640, 64)
  17.     self.contents = Bitmap.new(width - 32, height - 32)
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 设置文本
  21.   #     text  : 窗口显示的字符串
  22.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  23.   #--------------------------------------------------------------------------
  24.   def set_text(text, align = 0)
  25.   # 初始化文本数组
  26.   @text_array = text.split("")
  27.   #记录文本位置
  28.   @text_pos = {:x=>0,:y=>0}
  29.   # 如果文本和对齐方式的至少一方与上次的不同
  30.   if text != @text or align != @align
  31.   self.contents.clear
  32.   end
  33. end
  34.   #--------------------------------------------------------------------------
  35.   # ● 逐个字开始描绘
  36.   #--------------------------------------------------------------------------
  37.   def play_onetext
  38.   tx = @text_array.shift  #获取并删除文字数组第一个字。
  39.   cw = contents.text_size(tx).width #获取描绘这个字需要的宽度。
  40.   if @text_pos[:x] + cw > Helpset::Width_MAX   #如果描绘的坐标X加上宽度超过 xxx ,就换行。
  41.       @text_pos[:x] = 0
  42.       @text_pos[:y] += 32    #假如行距是 32 。
  43.   end
  44.   self.contents.draw_text(@text_pos[:x], @text_pos[:y], cw, 32, tx)  #描绘这个文字。
  45.   @text_pos[:x] += cw   #宽度累加。
  46. end
  47.   #--------------------------------------------------------------------------
  48.   # ● 刷新
  49.   #--------------------------------------------------------------------------
  50.   def update
  51.   play_onetext if @text_array && @text_array.size > 0 && Graphics.frame_count % Helpset::Move == 0
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 设置角色
  55.   #     actor : 要显示状态的角色
  56.   #--------------------------------------------------------------------------
  57.   def set_actor(actor)
  58.     if actor != @actor
  59.       self.contents.clear
  60.       draw_actor_name(actor, 4, 0)
  61.       draw_actor_state(actor, 140, 0)
  62.       draw_actor_hp(actor, 284, 0)
  63.       draw_actor_sp(actor, 460, 0)
  64.       @actor = actor
  65.       @text = nil
  66.       self.visible = true
  67.     end
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 设置敌人
  71.   #     enemy : 要显示名字和状态的敌人
  72.   #--------------------------------------------------------------------------
  73.   def set_enemy(enemy)
  74.     text = enemy.name
  75.     state_text = make_battler_state_text(enemy, 112, false)
  76.     if state_text != ""
  77.       text += "  " + state_text
  78.     end
  79.     set_text(text, 1)
  80.   end
  81. end
  82.   #--------------------------------------------------------------------------
  83.   # ● 覆盖模式
  84.   #--------------------------------------------------------------------------
  85.   Window_Help = Window_MoveHelp if Helpset::Over_windowhelp
复制代码
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33069
在线时间
5103 小时
注册时间
2012-11-19
帖子
4878

开拓者

4
发表于 2018-4-6 18:43:58 | 只看该作者
  1. #--------------------------------------------------------------------------
  2.   def set_text(text, align = 0)
  3.     # 如果文本和对齐方式的至少一方与上次的不同
  4.     if text != @text or align != @align
  5.       self.contents.clear
  6.       self.contents.font.color = normal_color
  7.       # 初始化文本数组
  8.       @text_array = text.split("")
  9.       #记录文本位置
  10.       @text_pos = {:x=>0,:y=>0}
  11.       @text = text
  12.       @align = align
  13.       @actor = nil
  14.     end
  15.     self.visible = true
  16.   end
复制代码

点评

这功能略眼熟,难道是描述跑马灯?  发表于 2018-4-12 20:48
明白了,我检查一下是什么问题。  发表于 2018-4-6 19:13
既然物品和技能都没问题,应该不是这个的锅。  发表于 2018-4-6 19:08
感谢前辈,但不知道为什么装备界面还是不能显示帮助文字,感觉好奇怪耶...  发表于 2018-4-6 18:59
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-21 12:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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