查看: 1034|回复: 3

[有事请教] 将技能、物品栏的说明扩展至2行后,技能发动不显示技能名

[复制链接]

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

发表于 2026-5-1 02:30:46 | 显示全部楼层 |阅读模式

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

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

×
因为1行实在不够用,所以将技能栏和物品栏的说明文字扩展至2行
1.png
理所当然,敌人显示的信息也变成2行了
2.png
当然,重点在于,接下来无论是发动技能,还是攻击、防御、使用物品都不在显示顶部的描述窗口了
3.png
如何恢复该描述窗口,另外如果可以的话其实是希望新建一个独立的单行窗口,毕竟显示技能名的窗口也是2行确实不太美观(自己改了好几次都没成功)
4.png

工程
Project3.zip (388.88 KB, 下载次数: 8)

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

 楼主| 发表于 2026-5-4 04:39:04 | 显示全部楼层
估计没人回答了
[pre lang="ruby"]#==============================================================================
# 技能名漂移
#------------------------------------------------------------------------------
# 效果:使用技能时,技能名显示在一个自动适应长度的窗口中,
#       从左飞入屏幕上方中央,短暂停留后向右飞出。
#==============================================================================

# 定义用于显示技能名的窗口类
class SkillName_Window < Window_Base
  def initialize(skill_name)
    # 先测量文字尺寸
    dummy = Bitmap.new(32, 32)
    dummy.font.size = 32
    dummy.font.bold = true
    rect = dummy.text_size(skill_name)
    w = rect.width + 32 + 32   # 左右各留 16 像素内边距
    h = rect.height + 32
    dummy.dispose

    # 创建窗口:左边距临时设为0,稍后由动画控制位置
    super(0, 0, w, h)
    self.contents = Bitmap.new(w - 32, h - 32)
    self.contents.font.size = 32
    self.contents.font.bold = true

    # 绘制黑色描边 + 白色文字
    outline = Color.new(0, 0, 0)
    text_c  = Color.new(255, 255, 255)
    cx = (self.contents.width - rect.width) / 2
    cy = (self.contents.height - rect.height) / 2
    [-1, 1].each do |dx|
      [-1, 1].each do |dy|
        self.contents.font.color = outline
        self.contents.draw_text(cx + dx, cy + dy, rect.width, rect.height, skill_name, 1)
      end
    end
    self.contents.font.color = text_c
    self.contents.draw_text(cx, cy, rect.width, rect.height, skill_name, 1)

    # 设置窗口纵向位置(屏幕上方)
    self.y = 25
    self.z = 10000
    # 起始位置:屏幕左侧外
    self.x = -self.width
    # 停留帧数
    @stop_time = 90
    @timer = 0
    @phase = :fly_in
  end

  # 更新动画,返回 true 表示动画已结束并需要释放
  def update_anim
    case @phase
    when :fly_in
      self.x += 16
      if self.x >= 320 - self.width / 2
        self.x = 320 - self.width / 2
        @phase = :stop
      end
    when :stop
      @timer += 1
      if @timer >= @stop_time
        @phase = :fly_out
      end
    when :fly_out
      self.x += 16
      if self.x > 640
        return true   # 飞出屏幕,可以释放
      end
    end
    return false
  end
end

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 初始化 / 释放
  #--------------------------------------------------------------------------
  alias skill_window_main main
  def main
    @skill_name_window = nil
    skill_window_main
    if @skill_name_window
      @skill_name_window.dispose
      @skill_name_window = nil
    end
  end

  #--------------------------------------------------------------------------
  # ● 帧更新
  #--------------------------------------------------------------------------
  alias skill_window_update update
  def update
    skill_window_update
    update_skill_window
  end

  #--------------------------------------------------------------------------
  # ● 显示技能名窗口
  #--------------------------------------------------------------------------
  def show_skill_name(name)
    if @skill_name_window
      @skill_name_window.dispose
      @skill_name_window = nil
    end
    @skill_name_window = SkillName_Window.new(name)
  end

  #--------------------------------------------------------------------------
  # ● 更新技能名窗口动画
  #--------------------------------------------------------------------------
  def update_skill_window
    return unless @skill_name_window
    if @skill_name_window.update_anim
      @skill_name_window.dispose
      @skill_name_window = nil
    end
  end

  #--------------------------------------------------------------------------
  # ● 触发时机:我方或敌方使用技能时
  #--------------------------------------------------------------------------
  if method_defined?(:update_phase4_step2)
    alias skill_window_step2 update_phase4_step2
    def update_phase4_step2
      skill_window_step2
      if @active_battler.current_action.kind == 1 &&
         @active_battler.current_action.skill_id > 0
        skill = $data_skills[@active_battler.current_action.skill_id]
        show_skill_name(skill.name)
      end
    end
  end
end[/pre]
回复

使用道具 举报

梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2026-5-4 10:53:24 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2026-5-4 11:07 编辑

五一不用摸鱼, 当然没人啦, 笑

你用了两个help脚本,  其中 双行自动换行 (就是你战斗调用的help) 这个脚本里, 找到 def set_text(text, align = 0) 这句, 下面加一句 self.visible = true 就行了

想单独一行, 那就在def refresh 里, 找到 self.contents.font.size = current_font_size 这句, 下面加上

    if @text.size < 25
      self.height = 64
      self.contents.dispose ;self.contents = Bitmap.new(608,32)
      self.contents.draw_text(0,0,608,32,@text,1) ;return
    else
      self.height = 96
    end

8个汉字以内都会以一行显示

顺便, 想把敌人,角色的help也改成一行,

在 显示敌人的HP、SP百分比 这个脚本里,找到  self.contents.clear  这句, 替换成 self.height = 64 ;self.contents.dispose ;self.contents = Bitmap.new(608,32)
在 Window_Help 这个脚本里, 找到 if actor != @actor 这句, 下面的 self.contents.clear 也替换成上面那句

点评

感觉,已解决  发表于 2026-5-6 02:13

评分

参与人数 1赞 +1 收起 理由
无忧谷主幻 + 1 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部