楼主: raymondyrf

[已经解决] 自制的图片菜单,在游戏中通过对话调出,要怎么做呢?

[复制链接]
梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2013-5-3 14:14:46 | 显示全部楼层
stack level too deep 是一个方法反覆执行到超过处理负担,不知您是怎么改的?

一次开 N 个同样的窗口并不是不行,譬如把 def start 下的内容重覆一遍,如下:
  1.   alias new_start start
  2.   def start
  3.     new_start
  4.     @varia_window = Window_Variables.new
  5.     @varia_window.x = HPHUB_X
  6.     @varia_window.y = HPHUB_Y
  7.     @varia_window.visible = false
  8.     @varia_window2 = Window_Variables.new
  9.     @varia_window2.x = 0
  10.     @varia_window2.y = 200
  11.   end
复制代码
执行后您会看到一个窗口已经开启,若打开100号开关又会看到另一个窗口出现,但这样做,两个窗口内容是一样的,因为两个都是用 Window_Variables 建立的窗口。

那也可以改一下,用两个 Window_Variables 和 Window_Variables2 来做不同窗口,像这样:

[pre lang="ruby" line="1"]#encoding:utf-8
#==============================================================================
# ■ Window_Variables
#------------------------------------------------------------------------------
#     地图上显示变量窗口
#==============================================================================
#  在不想要显示的地图备注栏中放上 <NOHPHUB> 就可以隐藏。
#==============================================================================

HPHUB_X = 100 #显示变量窗口的 X 座标
HPHUB_Y = 0 #显示变量窗口的 Y 座标

HPHUB_SWITCH = 100 #切换 显示 / 隐藏 窗口的开关ID

class Window_Variables < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize
    super(100, 120, 740, 600)
    self.opacity = 0
    refresh
  end

  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    draw_background
    draw_actor_name($game_actors[1], 330, 140)
    draw_actor_nickname($game_actors[1], 300, 210)
    draw_actor_level($game_actors[1], 330, 177)
    draw_actor_exp($game_actors[1], 520, 177)
    draw_actor_param($game_actors[1], 230, 335, 0)   
    draw_actor_param($game_actors[1], 230, 304, 1)  
    draw_actor_param($game_actors[1], 230, 245, 2)   
    draw_actor_param($game_actors[1], 230, 275, 3)   
    draw_actor_param($game_actors[1], 230, 364, 4)   
    draw_actor_param($game_actors[1], 230, 395, 5)   
    draw_actor_param($game_actors[1], 230, 426, 6)   
    draw_actor_param($game_actors[1], 230, 455, 7)   
    draw_actor_hp($game_actors[1], 430, 455)
    draw_actor_mp($game_actors[1], 430, 485)
    change_color(text_color(6))
    draw_text(250, 385, 300, 300,$game_party.gold, 2)


  end
  #--------------------------------------------------------------------------
  # ● 绘制背景
  #--------------------------------------------------------------------------
  def draw_background
    bitmap = Cache.picture("plain") #背景图
    rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
    bitmap.dispose
  end
end

class Window_Variables2 < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 350 + standard_padding * 2, 250 + standard_padding * 2)
    self.opacity = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_background
    draw_actor_face($game_party.members[0], 10, 20)
    change_color(system_color)
    draw_text(120, line_height * 0 + 30, 72, line_height, Vocab::param(2) + ":", 0)
    draw_text(120, line_height * 1 + 30, 72, line_height, Vocab::param(3) + ":", 0)
    draw_text(120, line_height * 2 + 30, 72, line_height, "时间" + ":", 0)   
    change_color(normal_color)
    draw_text(168, line_height * 0 + 30, 48, line_height, $game_actors[1].param(2), 2)
    draw_text(168, line_height * 1 + 30, 48, line_height, $game_actors[1].param(3), 2)
    draw_text(168, line_height * 2 + 30, 48, line_height, $game_system.playtime_s, 2)
  end
  #--------------------------------------------------------------------------
  # ● 绘制背景
  #--------------------------------------------------------------------------
  def draw_background
    bitmap = Cache.picture("001_战士_A") #背景图
    rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
    bitmap.dispose
  end
end

#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#      地图生成窗口
#==============================================================================
class Scene_Map < Scene_Base
  alias new_start start
  def start
    new_start
   
    @varia_window = Window_Variables.new
    @varia_window.x = HPHUB_X
    @varia_window.y = HPHUB_Y
    @varia_window.visible = false
   
    @varia_window2 = Window_Variables2.new
    @varia_window2.x = 0
    @varia_window2.y = 200
    @varia_window2.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  alias new_update update
  def update
    new_update
    #初始值
    return if @show_hp_hud == $game_switches[HPHUB_SWITCH]
    p $game_switches[HPHUB_SWITCH].to_s + "=>" + @show_hp_hud.to_s
    if $game_switches[HPHUB_SWITCH] != true
      @show_hp_hud = false
    else
      @show_hp_hud = true
    end
    #显示/隐藏执行
    if @show_hp_hud == true
      @varia_window.refresh
      @varia_window.visible = true
      
      @varia_window2.refresh
      @varia_window2.visible = true
      
    else
      @varia_window.visible = false
      
      @varia_window2.visible = false
    end
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  alias new_terminate terminate
  def terminate
    @varia_window.dispose
    new_terminate
  end
  #--------------------------------------------------------------------------
  # ● 关闭
  #--------------------------------------------------------------------------
  def close_varia_window
    @varia_window.close
    update until @varia_window.close?
  end
end
[/pre]

这样子开关 100 开关时,会同时控制显示 / 隐藏两个窗口,而且窗口内容是不同的。
修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-3 19:13:18 | 显示全部楼层
j433463 发表于 2013-5-3 14:14
stack level too deep 是一个方法反覆执行到超过处理负担,不知您是怎么改的?

一次开 N 个同样的窗口并不 ...

我的意思是,在用另一个变量去控制打开另一个那样的窗口。也是以上的方法么??
回复

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-3 21:15:09 | 显示全部楼层
j433463 发表于 2013-5-3 14:14
stack level too deep 是一个方法反覆执行到超过处理负担,不知您是怎么改的?

一次开 N 个同样的窗口并不 ...

我解决了,在上面定义另一个变量控制第二个窗口的显示与否就行了,谢谢你啦!!
回复

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-8 00:45:13 | 显示全部楼层
j433463 发表于 2013-5-3 14:14
stack level too deep 是一个方法反覆执行到超过处理负担,不知您是怎么改的?

一次开 N 个同样的窗口并不 ...

我想再问一下,如果我想多开关控制多个窗口呢??
回复

使用道具 举报

梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2013-5-8 08:47:31 | 显示全部楼层
就像您前面说的,不同的窗口用不同的变量.visible 为 true 或 false,来决定窗口的显示或隐藏,两个窗口和多个窗口的方式没有什么差别。
修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-8 17:59:01 | 显示全部楼层
本帖最后由 raymondyrf 于 2013-5-8 18:40 编辑
j433463 发表于 2013-5-8 08:47
就像您前面说的,不同的窗口用不同的变量.visible 为 true 或 false,来决定窗口的显示或隐藏,两个窗口和 ...


请问我这样写有没有问题呢??我知道方法,却不知道怎么写···

[pre lang="ruby" line="1"]#encoding:utf-8
#==============================================================================
# ■ Window_Variables
#------------------------------------------------------------------------------
#     地图上显示变量窗口
#==============================================================================
#  在不想要显示的地图备注栏中放上 <NOHPHUB> 就可以隐藏。
#==============================================================================

HPHUB_X = 100 #显示变量窗口的 X 座标
HPHUB_Y = 0 #显示变量窗口的 Y 座标

HPHUB_SWITCH = 100 #切换 显示 / 隐藏 窗口的开关ID
HPHUB_SWITCH1 = 99 #切换 显示 / 隐藏 窗口的开关ID



class Window_Variables < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize

    super(100, 120, 740, 600)
    self.opacity = 0
    refresh
  end

  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    draw_background
    draw_actor_name($game_actors[1], 330, 140)
    draw_actor_nickname($game_actors[1], 300, 210)
    draw_actor_level($game_actors[1], 330, 177)
    draw_actor_exp($game_actors[1], 520, 177)
    draw_actor_param($game_actors[1], 230, 335, 0)   
    draw_actor_param($game_actors[1], 230, 304, 1)   
    draw_actor_param($game_actors[1], 230, 245, 2)   
    draw_actor_param($game_actors[1], 230, 275, 3)   
    draw_actor_param($game_actors[1], 230, 364, 4)   
    draw_actor_param($game_actors[1], 230, 395, 5)   
    draw_actor_param($game_actors[1], 230, 426, 6)   
    draw_actor_param($game_actors[1], 230, 455, 7)   
    draw_actor_hp($game_actors[1], 520, 237)
    draw_actor_mp($game_actors[1], 520, 267)

    draw_text(283, 50, 300, 200,$game_variables[4995], 2)  #生日月

    draw_text(335, 50, 300, 200,$game_variables[4994], 2)  #生日日
    change_color(text_color(6))
    draw_text(250, 385, 300, 300,$game_party.gold, 2)


  end
  #--------------------------------------------------------------------------
  # ● 绘制背景
  #--------------------------------------------------------------------------
  def draw_background
    bitmap = Cache.picture("plain") #背景图
    rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
    bitmap.dispose
  end
end

class Window_Variables2 < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize

    super(0, 0, 1024, 768)
    self.opacity = 0
    refresh
  end
  
  #--------------------------------------------------------------------------
  # ● 获取日期
  #--------------------------------------------------------------------------
  def date
    return $game_variables[4994]
  end  
  
  #--------------------------------------------------------------------------
  # ● 获取月份
  #--------------------------------------------------------------------------
  def month
    return $game_variables[4995]
  end   
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_background
   
    draw_text(800, 0, 100, 100, "年", 2)
    draw_text(845, 0, 100, 100, "月", 2)
    draw_text(890, 0, 100, 100, "日", 2)

    draw_text(775, 0, 100, 100, "2000", 2)

    draw_text(818, 0, 100, 100, month, 2)

    draw_text(868, 0, 100, 100, date, 2)        
    end  

  #--------------------------------------------------------------------------
  # ● 绘制背景
  #--------------------------------------------------------------------------
  def draw_background
    bitmap = Cache.picture("date") #背景图
    rect = Rect.new(-800, -20, 1024, 768)
    contents.blt(x, y, bitmap, rect, 255)
    bitmap.dispose
  end
end

#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#      地图生成窗口
#==============================================================================
class Scene_Map < Scene_Base
  alias new_start start
  def start
    new_start

    @varia_window = Window_Variables.new
    @varia_window.x = HPHUB_X
    @varia_window.y = HPHUB_Y
    @varia_window.visible = false

    @varia_window2 = Window_Variables2.new
    @varia_window2.x = 0
    @varia_window2.y = 0
    @varia_window2.visible = true
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  alias new_update update
  def update
    new_update
    #初始值
    return if @show_hp_hud == $game_switches[HPHUB_SWITCH]
    p $game_switches[HPHUB_SWITCH].to_s + "=>" + @show_hp_hud.to_s
    if $game_switches[HPHUB_SWITCH] != true
      @show_hp_hud = false
    else
      @show_hp_hud = true
    end
    #显示/隐藏执行
    if @show_hp_hud == true
      @varia_window.refresh
      @varia_window.visible = true

    else
      @varia_window.visible = false
    end
   
    return else @show_hp_hud1 == $game_switches[HPHUB_SWITCH1]
    p $game_switches[HPHUB_SWITCH1].to_s + "=>" + @show_hp_hud1.to_s
    if $game_switches[HPHUB_SWITCH1] != true
      @show_hp_hud1 = false
    else
      @show_hp_hud1 = true
    end
    #显示/隐藏执行
    if @show_hp_hud1 == true
      @varia_window2.refresh
      @varia_window2.visible = true

    else
      @varia_window2.visible = false
    end
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  alias new_terminate terminate
  def terminate
    @varia_window.dispose
    new_terminate
end
  #--------------------------------------------------------------------------
  # ● 关闭
  #--------------------------------------------------------------------------
  def close_varia_window
    @varia_window.close
    update until @varia_window.close?
  end
  def close_varia_window_1
    @varia_window1.close
    update until @varia_window1.close?  
  end
end
[/pre]
回复

使用道具 举报

梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2013-5-8 20:44:41 | 显示全部楼层
电脑例行扫毒中,浏览网页都卡得要命,暂时无法测试,等明天扫毒完毕后再找时间看了。

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 感謝您的耐心解答

查看全部评分

修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-8 20:48:14 | 显示全部楼层
j433463 发表于 2013-5-8 20:44
电脑例行扫毒中,浏览网页都卡得要命,暂时无法测试,等明天扫毒完毕后再找时间看了。 ...

好的好的,谢谢啦
回复

使用道具 举报

梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2013-5-9 20:26:57 | 显示全部楼层
本帖最后由 j433463 于 2013-5-9 20:29 编辑

试试吧,没有改什么地方,之前说底下有数字重叠主要就是第一个窗口没有 contents.clear
至于您说的月日问题,是因为 return 的那一行用法不对,您对照脚本看看改了哪些。

[pre lang="ruby" line="1"]#encoding:utf-8
#==============================================================================
# ■ Window_Variables
#------------------------------------------------------------------------------
#     地图上显示变量窗口
#==============================================================================
#  在不想要显示的地图备注栏中放上 <NOHPHUB> 就可以隐藏。
#==============================================================================

HPHUB_X = 100 #显示变量窗口的 X 座标
HPHUB_Y = 0 #显示变量窗口的 Y 座标

HPHUB_SWITCH = 100 #切换 显示 / 隐藏 窗口的开关ID
HPHUB_SWITCH1 = 99 #切换 显示 / 隐藏 窗口的开关ID



class Window_Variables < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize

    super(100, 120, 740, 600)
    self.opacity = 0
    refresh
  end

  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_background
    draw_actor_name($game_actors[1], 330, 140)
    draw_actor_nickname($game_actors[1], 300, 210)
    draw_actor_level($game_actors[1], 330, 177)
    draw_actor_exp($game_actors[1], 520, 177)
    draw_actor_param($game_actors[1], 230, 335, 0)   
    draw_actor_param($game_actors[1], 230, 304, 1)   
    draw_actor_param($game_actors[1], 230, 245, 2)   
    draw_actor_param($game_actors[1], 230, 275, 3)   
    draw_actor_param($game_actors[1], 230, 364, 4)   
    draw_actor_param($game_actors[1], 230, 395, 5)   
    draw_actor_param($game_actors[1], 230, 426, 6)   
    draw_actor_param($game_actors[1], 230, 455, 7)   
    draw_actor_hp($game_actors[1], 520, 237)
    draw_actor_mp($game_actors[1], 520, 267)

    draw_text(283, 50, 300, 200,$game_variables[4995], 2)  #生日月

    draw_text(335, 50, 300, 200,$game_variables[4994], 2)  #生日日
    change_color(text_color(6))
    draw_text(250, 385, 300, 300,$game_party.gold, 2)


  end
  #--------------------------------------------------------------------------
  # ● 绘制背景
  #--------------------------------------------------------------------------
  def draw_background
    bitmap = Cache.picture("plain") #背景图
    rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
    bitmap.dispose
  end
end

class Window_Variables2 < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize

    super(0, 0, 1024, 768)
    self.opacity = 0
    refresh
  end

  #--------------------------------------------------------------------------
  # ● 获取日期
  #--------------------------------------------------------------------------
  def date
    return $game_variables[4994]
  end  

  #--------------------------------------------------------------------------
  # ● 获取月份
  #--------------------------------------------------------------------------
  def month
    return $game_variables[4995]
  end   
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_background

    draw_text(800, 0, 100, 100, "年", 2)
    draw_text(845, 0, 100, 100, "月", 2)
    draw_text(890, 0, 100, 100, "日", 2)

    draw_text(775, 0, 100, 100, "2000", 2)

    draw_text(818, 0, 100, 100, month, 2)

    draw_text(868, 0, 100, 100, date, 2)        
    end  

  #--------------------------------------------------------------------------
  # ● 绘制背景
  #--------------------------------------------------------------------------
  def draw_background
    bitmap = Cache.picture("date") #背景图
    rect = Rect.new(-800, -20, 1024, 768)
    contents.blt(x, y, bitmap, rect, 255)
    bitmap.dispose
  end
end

#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#      地图生成窗口
#==============================================================================
class Scene_Map < Scene_Base
  alias new_start start
  def start
    new_start

    @varia_window = Window_Variables.new
    @varia_window.x = HPHUB_X
    @varia_window.y = HPHUB_Y
    @varia_window.visible = false

    @varia_window2 = Window_Variables2.new
    @varia_window2.x = 0
    @varia_window2.y = 0
    @varia_window2.visible = true
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  alias new_update update
  def update
    new_update
    #初始值
    return if @show_hp_hud == $game_switches[HPHUB_SWITCH] && @show_hp_hud1 == $game_switches[HPHUB_SWITCH1]
    p $game_switches[HPHUB_SWITCH].to_s + "=>" + @show_hp_hud.to_s
    if $game_switches[HPHUB_SWITCH] != true
      @show_hp_hud = false
    else
      @show_hp_hud = true
    end
    #显示/隐藏执行
    if @show_hp_hud == true
      @varia_window.refresh
      @varia_window.visible = true
    else
      @varia_window.visible = false
    end

    p $game_switches[HPHUB_SWITCH1].to_s + "=>" + @show_hp_hud1.to_s
    if $game_switches[HPHUB_SWITCH1] != true
      @show_hp_hud1 = false
    else
      @show_hp_hud1 = true
    end
    #显示/隐藏执行
    if @show_hp_hud1 == true
      @varia_window2.refresh
      @varia_window2.visible = true
     else
      @varia_window2.visible = false
    end
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  alias new_terminate terminate
  def terminate
    @varia_window.dispose
    new_terminate
end
  #--------------------------------------------------------------------------
  # ● 关闭
  #--------------------------------------------------------------------------
  def close_varia_window
    @varia_window.close
    update until @varia_window.close?
  end
  def close_varia_window_1
    @varia_window1.close
    update until @varia_window1.close?  
  end
end
[/pre]

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 感謝您無微不至的關懷

查看全部评分

修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-10 00:32:05 | 显示全部楼层
j433463 发表于 2013-5-9 20:26
试试吧,没有改什么地方,之前说底下有数字重叠主要就是第一个窗口没有 contents.clear
至于您说的月日问题 ...

好的好的,感谢您了!!
我看看以后还有没有什么问题直接@ 你了,谢谢了真的
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部