查看: 8757|回复: 29

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

[复制链接]
梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
发表于 2013-5-1 21:38:49 | 显示全部楼层 |阅读模式

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

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

×
如题,我下载了很多范例,但是基本上都是调用窗口菜单的。
我自己制作好一个窗口菜单的图片了,就想通过脚本,加上事件,通过对话中调出来,然后再像人物状态菜单里面那样,把获取对应数值,在某个区域draw出来。

我的思路大概就是,通过Scene来create一个window,但是window里没有任何原来系统设定的那种窗口、菜单什么的,完完全全就是把我做好的图刷出来
再来就是获取游戏中某些变量,比如说人物经验值啊什么的,然后在我这个图片菜单中的某个区域把这些已经获取的数值draw出来。

问题是,我不知道怎么写···

求助一下各位大神!!
梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2013-5-1 22:22:44 | 显示全部楼层
简单的说,就是想做一个可以用脚本或事件调出的显示变量菜单窗口吧?
修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-1 22:24:53 | 显示全部楼层
j433463 发表于 2013-5-1 22:22
简单的说,就是想做一个可以用脚本或事件调出的显示变量菜单窗口吧?

1、显示多个变量
2、这个窗口其实就是我事先弄好一个的图片
回复

使用道具 举报

梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2013-5-1 23:41:55 | 显示全部楼层
本帖最后由 j433463 于 2013-5-1 23:49 编辑
raymondyrf 发表于 2013-5-1 22:24
1、显示多个变量
2、这个窗口其实就是我事先弄好一个的图片


不太明白您的意思,如果只是一个显示变量的小窗口,那只需要一个 Widnow_XXX 的窗口脚本,并且在 Scene_Map 中建一个 create_xxx_window 视窗调用 Window_XXX.new 而已,

如果是要菜单,可以参考这样子:



Window_VarInfo
[pre lang="ruby" line="1"]#encoding:utf-8
#==============================================================================
# ■ Window_VarInfo
#------------------------------------------------------------------------------
#  显示变量资讯的视窗
#==============================================================================
class Window_VarInfo < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化物件
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, Graphics.width, Graphics.height)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 重新整理
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_actor_face($game_party.members[0], 10, 20)
    draw_text(120, line_height * 0 + 30, 80, line_height, Vocab::param(2), 0)
    draw_text(200, line_height * 0 + 30, 80, line_height, $game_actors[1].param(2), 2)
    draw_text(120, line_height * 1 + 30, 80, line_height, Vocab::param(3), 0)
    draw_text(200, line_height * 1 + 30, 80, line_height, $game_actors[1].param(3), 2)   
  end

end[/pre]


Scene_MyMenu
[pre lang="ruby" line="1"]#encoding:utf-8
#==============================================================================
# ■ Scene_MyMenu
#------------------------------------------------------------------------------
#  选单画面
#==============================================================================
class Scene_MyMenu < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  def start
    super
    create_varinfo_window
  end
  #--------------------------------------------------------------------------
  # ● 生成视窗
  #--------------------------------------------------------------------------
  def create_varinfo_window
    @vf_window = Window_VarInfo.new
    @vf_window.x = 0
    @vf_window.y = 50
    @vf_window.opacity = 0
  end
  #--------------------------------------------------------------------------
  # ● 生成背景
  #--------------------------------------------------------------------------
  def create_background
    @background_sprite = Sprite.new
    @background_sprite.bitmap = Cache.load_bitmap("Graphics/Pictures/","Plain") #背景图
    @background_sprite.color.set(0, 0, 0, 0)
  end
  #--------------------------------------------------------------------------
  # ● 结束背景
  #--------------------------------------------------------------------------
  def dispose_background
    @background_sprite.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新,侦测按钮
  #--------------------------------------------------------------------------
  def update
    super
    SceneManager.goto(Scene_Map) if Input.trigger?(:B) #就是按 Esc 结束菜单
  end

end[/pre]


测试截图:
s1.PNG


基本上,在窗口中显示几个变量都只是多加几个 draw_text 分别设不同的座标显示而已,一个或多个都用的是同样的窗口脚本。

至于在地图上显示变量窗口的脚本,我以前曾贴过,虽然那是显示一个变量的,但同样多加几个 draw_text 并且把窗口长宽加大,也是可以显示多个变量,不过就是再把窗口 opacity 设为 0,加个背景图而已。
修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-2 00:07:45 | 显示全部楼层
j433463 发表于 2013-5-1 23:41
不太明白您的意思,如果只是一个显示变量的小窗口,那只需要一个 Widnow_XXX 的窗口脚本,并且在 Scene_M ...

您给的这个已经非常非常贴近了。
只差一点点,就是能不能背景不要变黑
就是说在我设定的那张图片不够大(故意不够大的)的时候,余下的地方是当前场景没有被菜单背景遮罩的地方,而不是黑色呢??


回复

使用道具 举报

梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2013-5-2 00:26:37 | 显示全部楼层
那要参考主菜单的方式了,因为实际上菜单不是在地图上的,它只是在呼叫主菜单时将当时的画面截图,然后显示在菜单背景而已,所以如果注意看主菜单背景的地图,画面是静止的。
修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-2 00:37:01 | 显示全部楼层
j433463 发表于 2013-5-2 00:26
那要参考主菜单的方式了,因为实际上菜单不是在地图上的,它只是在呼叫主菜单时将当时的画面截图,然后显示 ...

那请问有没有其他方法?就相当于触发后直接在原来的地方放置图片和draw数据?
回复

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-2 00:50:02 | 显示全部楼层
j433463 发表于 2013-5-2 00:26
那要参考主菜单的方式了,因为实际上菜单不是在地图上的,它只是在呼叫主菜单时将当时的画面截图,然后显示 ...

或者把这个黑色变透明?不管静止不静止,就是要显示到没有被遮住的地图就好了···
回复

使用道具 举报

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

或者您想要这样?是吗:


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

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

HPHUB_INPUT = :C #切换显示/隐藏按钮, 若不想要按钮切换, 等号右边可以清除, 或改为 nil 或 "" 或 ''

class Window_Variables < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 350, 250)
    self.opacity = 0
    self.back_opacity = 120
    @icon = 0
    @variable = 0
    @o_hp = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    rect = Rect.new(0,0,350,250)
    draw_background(rect)
    draw_actor_face($game_party.members[0], 10, 20)
    draw_text(120, line_height * 0 + 30, 80, line_height, Vocab::param(2), 0)
    draw_text(200, line_height * 0 + 30, 80, line_height, $game_actors[1].param(2), 2)
    draw_text(120, line_height * 1 + 30, 80, line_height, Vocab::param(3), 0)
    draw_text(200, line_height * 1 + 30, 80, line_height, $game_actors[1].param(3), 2)   
  end
  #--------------------------------------------------------------------------
  # ● 绘制背景
  #--------------------------------------------------------------------------
  def draw_background(rect)
    bitmap = Cache.load_bitmap("Graphics/Pictures/", "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
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  alias new_update update
  def update
    new_update
    #地图备注检查
    return if (/<NOHPHUB>/i.match($game_map.note)) != nil
    #初始值
    @show_hp_hud = true if @show_hp_hud == nil
    #按键切换开/关
    if HPHUB_INPUT != nil && HPHUB_INPUT != "" && HPHUB_INPUT != ''
      if Input.trigger?(HPHUB_INPUT)
        if @show_hp_hud != true
          @show_hp_hud = true
        else
          @show_hp_hud = false
        end
      end
    end
    #显示/隐藏执行
    if @show_hp_hud == true
      @varia_window.refresh
      @varia_window.visible = true
    else
      @varia_window.visible = false
      #close_varia_window
    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
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
#  管理地图的类。
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # ● 取得地图备注栏
  #--------------------------------------------------------------------------
  def note
    @map.note
  end
end
[/pre]

这是临时用以前写的地图显示HP变量脚本改的,加上背景图,可以用按钮 C 也就是空白键切换显示/隐藏,如果想用别的按钮也可以自己设定。

测试截图:

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

使用道具 举报

梦石
0
星屑
144
在线时间
107 小时
注册时间
2012-5-16
回帖
53
 楼主| 发表于 2013-5-2 01:00:09 | 显示全部楼层
j433463 发表于 2013-5-2 00:57
或者您想要这样?是吗:

看图片我觉得可以,只是可以通过对话呼出而不是按键么?
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部