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

Project1

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

[已经解决] 请高手看下,一个关于图片显示的脚本问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2016-1-14
帖子
131
跳转到指定楼层
1
发表于 2016-4-28 13:39:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 狼人弟弟 于 2016-4-28 13:45 编辑

下面是我在其他游戏范例里复制过来的一个脚本,功能是把“整队”的选项设置为一个子页面。
然后,问题来了:
本来这个脚本是没有设置背景的,但我想这没背景也挺难看的,所以就在里面添加了一张名为“Army_back”的图片做UI。
但在战斗的时候,电脑会先读取整队选项的信息,以确认上场战斗的人物,所以这时候就会把那张“Army_back”的图片
打开,然后才进去战斗页面。

所以现在问题很明显,

1.我应该怎么编辑才能改掉这个BUG呢???

2.这个脚本由于是从tan12345的宠物系统里单独摘出来的,所以还需要宠物仓库这个脚本支持,要怎么才能改成不需要那个
脚本呢???  由于脚本太长,所以宠物仓库我就不贴出来了,这个是调用仓库脚本的命令符:  SceneManager.call(Scene_Party2)

【脚本小白 敬上】

#=begin
#------------------------------------------------------------------------------#
#  原版Galv's Army Manager
#------------------------------------------------------------------------------#
#  For: RPGMAKER VX ACE
#  Version 1.0
#  Requested by Rue
#-------------------------------------------------------------------------------
#  有修改,改成自己适用
#-------------------------------------------------------------------------------

module Tan_party
  CMDS = {
  :status  => ["状态",  :Scene_Status, 121],
  :skill   => ["技能",  :Scene_Skill,  14],
  :order   => ["移动",  :order,         12],
  :dismiss => ["离队",  :dismiss,      187],
  }
  #不能移动的角色ID
  NO_ORDER = [1]
  #不能离队的角色ID
  NO_DISMISS = [1]

  
end



  
class Game_Party
  attr_accessor :last_atroop
end # Game_Party
#--------------------------------------------------------------------------
# ● 总界面
#--------------------------------------------------------------------------
class Scene_Army < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● 开始
  #--------------------------------------------------------------------------
  def start
    super
    create_help_window
    create_troop_window           #人物窗口
    create_command_window         #选项窗口
    create_face_window
    create_menu3_bg               # 背景
  end
  
  #--------------------------------------------------------------------------
  # ☆ 生背景图形
  #--------------------------------------------------------------------------
  def create_menu3_bg
    $menuback_sprite = Sprite.new
    $menuback_sprite.bitmap = Cache.system("Army_back")  
  end  
  
  def create_help_window
    @help_window = Window_ArmyHelp.new
    @help_window.viewport = @viewport
    @help_window.x = 0
  end

  
  def create_troop_window        #人物窗口
    wx = 0
    wy = @help_window.height
    ww = Graphics.width
    wh = Graphics.height - @help_window.height
    @troop_window = Window_Troops.new(wx,wy,ww,wh)
    @troop_window.help_window = @help_window
    @troop_window.viewport = @viewport
    @troop_window.activate
    @troop_window.set_handler(:ok, method(:on_troop_ok))
    @troop_window.set_handler(:cancel, method(:return_scene))
    @troop_window.opacity = 0   #窗口透明
  end
  


  def create_command_window
    wx = Graphics.width / 2    #选项窗口
    wy = (Graphics.height - @help_window.height) / 2
    @command_window = Window_ArmyCommand.new(wx,wy)
    @command_window.viewport = @viewport
    Tan_party::CMDS.each { |cmd|
      handle = cmd[1][0].delete(' ').downcase.to_sym
      @command_window.set_handler(handle, method(:cmd))
    }
    @command_window.set_handler(:cancel, method(:back_to_troop))
    @command_window.y -= @command_window.height  - @help_window.height
    @command_window.hide.deactivate
  end
  
  def create_face_window           # 头像
    ww = @command_window.width
    wh = @command_window.height
    wx = @command_window.x
    wy = @command_window.y
    @face_window = Window_ArmyFace.new(wx,wy,ww,wh)
    @face_window.viewport = @viewport
    @face_window.hide
  end
  
  def cmd                          # 确认键
    list = Tan_party::CMDS.to_a
    cmd = @command_window.index
    symbol = list[cmd][1][1]
    if custom_action(symbol)
      custom_on_command_ok(symbol)
    else
      SceneManager.party2call(list[cmd][1][1])
    end
  end
  
  def custom_action(symbol)            #移动处理
    case symbol
    when :dismiss, :order
      return true
    else
      return false
    end
  end
  
  def custom_on_command_ok(symbol)             #离队处理
    case symbol
    when :dismiss
      do_dismiss
    when :order
      start_ordering
    end
  end
  
  def start_ordering
    if Tan_party::NO_ORDER.include?($game_party.last_atroop.id)
      Sound.play_buzzer
    else
      @troop_window.order_on
      @ordering = true
    end
    back_to_troop
  end
  
  def do_dismiss
    @troop_window.dismiss
    back_to_troop
  end

  def on_troop_ok
    if @ordering
      @troop_window.swap_actor
      @ordering = false
      back_to_troop
    else
      $game_party.last_atroop = actor
      $game_party.menu_actor = actor
      @command_window.refresh
      @face_window.refresh
      @command_window.show.activate
      @face_window.show.activate
    end
  end
  
  def back_to_troop
    @command_window.hide.deactivate
    @face_window.hide
    @troop_window.activate
  end
  
  def return_scene
    if @troop_window.ordering_on
      @ordering = false
      @troop_window.cancel_ordering
      @troop_window.activate
    else
      $game_party.last_atroop = nil
      SceneManager.return
    end
  end
  
  def actor; @troop_window.actor; end
end

#--------------------------------------------------------------------------
# ● 帮助窗口
#--------------------------------------------------------------------------
class Window_ArmyHelp < Window_Help
  def initialize
    super(1)
  end
  
  def set_text(text)
    if text != @text
      @text = text
      refresh
    end
  end

  def clear
    set_text("")
    @actor = nil
  end
  
  def set_item(actor)
    @actor = actor
    set_text(actor ? create_text(actor) : "")
    refresh
  end
  
  def create_text(actor)                  #  绘制帮助人物信息
    n = actor.name
    c = actor.class.name
    #t = actor.nickname
    l = Vocab::level_a + actor.level.to_s
    text = n + " - " + l + " " + c + " " #+ t
    return text
  end

  def refresh
    contents.clear
    contents.font.size = 21 if Graphics.height < 480
    if @actor
      offset = Graphics.width >= 640 ? 0 : -90
      draw_actor_hp(@actor, 355 + offset, 0)
      draw_actor_mp(@actor, 490 + offset, 0)
      draw_text(12, 0, 330 + offset, line_height, @text)
    end
  end
end

#--------------------------------------------------------------------------
# ● 队伍窗口
#--------------------------------------------------------------------------
class Window_Troops < Window_Selectable
  attr_accessor :pending_index
  attr_accessor :ordering_on
  
  def initialize(x, y, width, height)
    super
    @data = []
    @last_index ||= 0
    @animtime = 0
    @walk = 0
    @pending_index = -1
    refresh
    select_last
  end
  
  def item_width
    (width - standard_padding * 2 + spacing) / col_max - spacing
  end
  def item_height; item_width; end
  def spacing; return 10; end
  def col_max; return 6; end
  def item_max; @data ? @data.size : 1; end
  def actor; @data && index >= 0 ? @data[index] : nil; end

  def current_item_enabled?
    enable?(@data[index])
  end

  def include?(actor)
    return false if actor.nil?
    return true
  end

  def enable?(actor)
    return false if !actor
    return false if @ordering_on && Tan_party::NO_ORDER.include?(actor.id)
    return true
  end

  def make_item_list
    @data = $game_party.members.select {|actor| include?(actor) }
    @data.push(nil) if include?(nil)
  end

  def select_last
    select(@data.index($game_party.last_atroop) || 0)
  end
  
  def swap_actor
    $game_party.swap_order($game_party.last_atroop.index,index)
    @pending_index = -1
    @ordering_on = nil
    refresh
  end
  
  def actor_rect(index)    #  第一行文字X,Y
    rect = Rect.new
    rect.width = item_width
    rect.height = item_height
    rect.x = index % col_max * (item_width + spacing)
    rect.y = index / col_max * item_height
    rect
  end

  def offset
    Graphics.height < 480 ? 0 : 10
  end
  
  def draw_item(index)             #  人物行走图
    actor = @data[index]
    if actor
      rect = actor_rect(index)
      rect.width -= 4
      draw_actor_text(actor,rect.x + 2,rect.y + 38 + offset, enable?(actor),
        rect.width)
      draw_character(actor.character_name, actor.character_index,
        rect.x + item_width / 1.6 - 10, rect.y + 38 + offset,
        enable?(actor),index)
    end
  end

  def draw_actor_text(actor, x, y, enabled = true, w)   #人物图框信息
    return unless actor
    change_color(normal_color, enabled)
    contents.font.size = 18         #第一行字体大小
    draw_text(x, y, w , line_height, actor.name,1)  #第一行字体X,Y
    #lvl = Vocab::level_a + actor.level.to_s
    #cname = actor.class.name
    #draw_text(x + 10, y - 40, w, line_height, lvl,0)
   # def text_color(n)
   # n = 2
   # windowskin.get_pixel(64 + (n % 8) * 8, 96 + (n / 8) * 8)
# end
    cname = actor.nickname     
    contents.font.size = 15          #第二行字体大小
    draw_text(x - 20, y + 18, w + 40, line_height, cname,1)
  end


  def draw_character(character_name, character_index, x, y,enabled,i)
    return unless character_name
    bitmap = Cache.character(character_name)
    sign = character_name[/^[\!\$]./]
    if sign && sign.include?('$')
      cw = bitmap.width / 3
      ch = bitmap.height / 4
    else
      cw = bitmap.width / 12
      ch = bitmap.height / 8
    end
    n = character_index
    step = 0
    step = @walk if enabled && i == index
    src_rect = Rect.new((n%4*3+1+step)*cw, (n/4*4)*ch, cw, ch)
    contents.blt(x - cw / 2, y - ch, bitmap, src_rect, enabled ? 255 : 150)
  end

  def update_help
    @help_window.set_item(actor)
  end

  def refresh
    make_item_list
    create_contents
    draw_all_items
  end
  
  def order_on
    @ordering_on = true
    @pending_index = index
    refresh
  end
  
  def cancel_ordering
    @ordering_on = nil
    @pending_index = -1
    refresh
  end
  
  def dismiss
    #$game_party.remove_actor(actor.id)
    $game_party.tan_remove_actor(actor.id,true)   
    refresh
  end
  
  def update
    super
    update_walk
    redraw_item(index)
  end
  
  def update_walk
    @animtime += 1
    if @animtime == 10
      case @walk
      when 1; @walk -= 1
      when -1; @walk += 1
      when 0
        if @step == 1
          @walk = -1; @step = 0
        else
          @walk = 1; @step = 1
        end
      end
      @animtime = 0
    end
  end
  
  def cursor_down(wrap = false); super; cursor_move_extras; end
  def cursor_up(wrap = false); super; cursor_move_extras; end
  def cursor_left(wrap = false); super; cursor_move_extras; end
  def cursor_right(wrap = false); super; cursor_move_extras; end
   
  def cursor_move_extras
    @walk = 0
    @animtime = 0
    redraw_item(@last_index)
    @last_index = index
  end
end

#--------------------------------------------------------------------------
# ● 命令窗口
#--------------------------------------------------------------------------
class Window_ArmyCommand < Window_Command
  def initialize(x,y)
    super(x,y)
    self.opacity = 255
    self.back_opacity = 255
  end

  def window_width; return 160; end
  def visible_line_number; item_max; end

  def make_command_list
    @cmd_index = []
    Tan_party::CMDS.each { |cmd|
      text = cmd[1][0]
      handle = text.delete(' ').downcase.to_sym
      add_command(text,handle,check_enabled(cmd[0]))
      @cmd_index << cmd[0]
    }
  end
  
  def check_enabled(cmd)
    #return false if $game_party.last_atroop == nil
    return false if cmd == :dismiss && $game_party.members.count <= 20
    if $game_party.last_atroop
      return false if cmd == :dismiss && Tan_party::NO_DISMISS.include?($game_party.last_atroop.id)
      return false if cmd == :order && Tan_party::NO_ORDER.include?($game_party.last_atroop.id)
    end
    return true
  end

  def draw_item(index)
    change_color(normal_color, command_enabled?(index))
    recti = item_rect_for_text(index)
    recti.x += 26
    draw_text(recti, command_name(index), alignment)
    draw_icon(Tan_party::CMDS[@cmd_index[index]][2],0,recti.y)
  end
end

#--------------------------------------------------------------------------
# ● 脸图窗口
#--------------------------------------------------------------------------
class Window_ArmyFace < Window_Base
  def initialize(x,y,w,h)
    super(x - w,y,w,h)
    self.opacity = 255
    self.back_opacity = 255
  end

  def draw_cont
    fy = (contents.height - 96) / 2
    fx = (contents.width - 96) / 2
    draw_actor_face($game_party.last_atroop, fx, fy)
  end

  def refresh
    contents.clear
    draw_cont
  end
end


#--------------------------------------------------------------------------
# 菜单界面将原先的队伍管理修改成新的队伍管理
#--------------------------------------------------------------------------
class Scene_Menu
  #--------------------------------------------------------------------------
  # ● 指令“整队”
  #--------------------------------------------------------------------------
  def command_formation
     SceneManager.call(Scene_Army)
  end
end

Lv3.寻梦者

梦石
0
星屑
1293
在线时间
995 小时
注册时间
2014-12-14
帖子
3016

开拓者

2
发表于 2016-4-28 17:44:00 | 只看该作者
1. 有前置脚本需求的插件,在下不提倡改为无需前置的插件;越复杂的脚本,这样做基本越等于重写一遍
2. 图片那个问题,估计增加一个条件判定即可;不过看情况的话,在有真正大触到来之前的期间,阁下还是有充裕的时间预习一下相关内容的,保守估计,可能等自己学会了,大触还在来的路上
【新手礼包】就不安利了
嗯,在下最近正在阅读某脚本,想要出一套武功秘籍;也祝阁下enjoy yourself



点评

所以读完了想写套教程出来,不过还得尊重作者的版权  发表于 2016-4-28 21:24
唉,都是自学成才的好孩子啊!  发表于 2016-4-28 21:22
【RMVA教程】
---------------------
欲买桂花同载酒,终不似,少年游.
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
521
在线时间
350 小时
注册时间
2015-10-19
帖子
87
3
发表于 2016-4-28 19:22:01 | 只看该作者
我试过了,楼主的脚本没有你说的问题啊,就是稍微有小点卡顿
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2016-1-14
帖子
131
4
 楼主| 发表于 2016-4-28 21:26:26 | 只看该作者
Vortur 发表于 2016-4-28 17:44
1. 有前置脚本需求的插件,在下不提倡改为无需前置的插件;越复杂的脚本,这样做基本越等于重写一遍
2. 图 ...

您所说的图片问题,究竟应该怎么增加图片判定呢?
我是真心研究不过来了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2016-1-14
帖子
131
5
 楼主| 发表于 2016-4-28 21:34:29 | 只看该作者
本帖最后由 狼人弟弟 于 2016-4-28 21:36 编辑
约约v看看 发表于 2016-4-28 19:22
我试过了,楼主的脚本没有你说的问题啊,就是稍微有小点卡顿


看了您的回复,我以为问题出在宠物仓库的脚本里,但重新开了一个新文档试过之后依旧还是不能解决问题啊。
请问您把上面那个脚本复制在哪里了?

点评

唉,果然还是摘取不完整,看来得去翻翻那个Window_Status了  发表于 2016-4-28 21:55
我复制在仓库上面Window_Status下面  发表于 2016-4-28 21:50
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1293
在线时间
995 小时
注册时间
2014-12-14
帖子
3016

开拓者

6
发表于 2016-4-28 21:38:58 | 只看该作者
狼人弟弟 发表于 2016-4-28 21:26
您所说的图片问题,究竟应该怎么增加图片判定呢?
我是真心研究不过来了。 ...

  在下也不能保证就一定能解决掉,仅认为,可以根据【事件指令】中【显示图片】的命令和Ruby的语法来增加判定,但具体情况必须看原脚本才能造
【RMVA教程】
---------------------
欲买桂花同载酒,终不似,少年游.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2016-1-14
帖子
131
7
 楼主| 发表于 2016-4-28 22:02:02 | 只看该作者
Vortur 发表于 2016-4-28 21:38
在下也不能保证就一定能解决掉,仅认为,可以根据【事件指令】中【显示图片】的命令和Ruby的语法来增加 ...

我就添加了一段而已,如下:
  1. #--------------------------------------------------------------------------
  2. # ● 总界面
  3. #--------------------------------------------------------------------------
  4. class Scene_Army < Scene_MenuBase
  5.   #--------------------------------------------------------------------------
  6.   # ● 开始
  7.   #--------------------------------------------------------------------------
  8.   def start
  9.     super
  10.     create_help_window
  11.     create_troop_window           #人物窗口
  12.     create_command_window         #选项窗口
  13.     create_face_window
  14.     create_menu3_bg               # 背景
  15.   end
  16.   
  17.   #--------------------------------------------------------------------------
  18.   # ☆ 生背景图形
  19.   #--------------------------------------------------------------------------
  20.   def create_menu3_bg
  21.     $menuback_sprite = Sprite.new
  22.     $menuback_sprite.bitmap = Cache.system("Army_back")  
  23.   end  
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1293
在线时间
995 小时
注册时间
2014-12-14
帖子
3016

开拓者

8
发表于 2016-4-28 22:10:43 | 只看该作者
本帖最后由 Vortur 于 2016-4-28 22:13 编辑
狼人弟弟 发表于 2016-4-28 22:02
我就添加了一段而已,如下:


需要【释放】
找个在合适的时机刷新的方法,把
    $menuback_sprit.bitmap.dispose
    $menuback_sprit.dispose
加进去可能能行,如不行,在下也不想再帮了...下载、调试、截图什么的太麻烦了

很好奇,阁下既然造在这里使用$,又怎会不造【释放】呢!?毕竟所有给出的范例中,都米有使用全局变量添加图片的例子,这样写一定是阁下自己的创举。
另外,推荐一个帖子:
https://rpg.blue/thread-372793-1-1.html
可以用贴中的方法,将开关作为全局变量使用
这样应该可以节省全局变量的数量吧!


评分

参与人数 1梦石 +1 收起 理由
丿梁丶小柒 + 1 认可答案

查看全部评分

【RMVA教程】
---------------------
欲买桂花同载酒,终不似,少年游.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2016-1-14
帖子
131
9
 楼主| 发表于 2016-4-29 09:38:21 | 只看该作者
Vortur 发表于 2016-4-28 22:10
需要【释放】
找个在合适的时机刷新的方法,把
    $menuback_sprit.bitmap.dispose

非常感谢,我其实也是造猫画虎,这个方法也是从别的游戏中“剽窃”来的,所以真不知道“释放”的定义是什么,不过既然您这么说了, 我也会去查一下究竟该怎么做的!!!

点评

...不客气!  发表于 2016-4-29 12:35
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2016-1-14
帖子
131
10
 楼主| 发表于 2016-4-29 10:59:04 | 只看该作者
本帖最后由 狼人弟弟 于 2016-4-29 11:03 编辑
Vortur 发表于 2016-4-28 22:10
需要【释放】
找个在合适的时机刷新的方法,把
    $menuback_sprit.bitmap.dispose


哈哈哈,经过您的点拨,我终于找到解决的方法啦
  1.   #--------------------------------------------------------------------------
  2.   # ● 开始
  3.   #--------------------------------------------------------------------------
  4.   def start
  5.     super
  6.     create_help_window
  7.     create_troop_window           #人物窗口
  8.     create_command_window         #选项窗口
  9.     create_face_window
  10.     create_menu3_bg               # 背景
  11.   end
  12.   
  13.      
  14.   #--------------------------------------------------------------------------
  15.   # ☆ 生背景图形
  16.   #--------------------------------------------------------------------------
  17.   def create_menu3_bg
  18.     @menuback_sprite = Sprite.new
  19.     @menuback_sprite.bitmap = Cache.system("Army_back")  
  20.   end  
  21.   
  22.   #GSR 1.5
  23.   alias gsr_terminate terminate
  24.   def terminate
  25.       super
  26.       @menuback_sprite.dispose if @menuback_sprite   #释放背景图片
复制代码
终于解决了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 09:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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