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

Project1

 找回密码
 注册会员
搜索
查看: 2964|回复: 5

[已经解决] 地图菜单

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
168 小时
注册时间
2007-7-26
帖子
477
发表于 2016-5-24 01:20:18 | 显示全部楼层 |阅读模式
3星屑
本帖最后由 cmmd1 于 2016-5-25 15:37 编辑

谁帮忙做个地图上按ESC键出现2个选项,退到主界面和结束游戏?其他物品栏,装备栏我都是按其他键调用的。

最佳答案

查看完整内容

[fold=地图菜单]#============================================================================== # ■ Scene_Item #------------------------------------------------------------------------------ #  处理物品画面的类。 #============================================================================== class Scene_Item alias update_item20160527 update_item def update_item update_item20160527 # 按 ...

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

Lv3.寻梦者

梦石
0
星屑
1343
在线时间
1295 小时
注册时间
2012-8-4
帖子
749
发表于 2016-5-24 01:20:19 | 显示全部楼层
本帖最后由 夜狠简单 于 2016-5-28 12:24 编辑
地图菜单

用的默认效果

点评

Graphics\Pictures下的图片,更新了  发表于 2016-5-28 12:25
背景图怎么加  发表于 2016-5-28 00:10
用脚本我弄不来,效果都不好看。还有一点我弄出来的话,选择的时候角色还是可以走动。如果你觉得那个黑色背景太枯燥可以加个背景图  发表于 2016-5-27 23:16
可以的,晚上放学才能看了  发表于 2016-5-27 19:04
那个,大神。返回标题和结束那2个选项,能不能显示在地图上呢?原本的是周围一片黑漆漆啊。  发表于 2016-5-27 17:42

评分

参与人数 1星屑 +10 收起 理由
cmmd1 + 10 认可答案

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

发表于 2016-5-25 20:23:30 | 显示全部楼层
本帖最后由 kuerlulu 于 2016-5-25 22:32 编辑
  1. #--------------------------------------------------------------------------
  2. # ● 紫苏前辈的获取窗口句柄
  3. #    部分细节已修改( by 晴兰 )
  4. #--------------------------------------------------------------------------
  5. module Kernel
  6.   #--------------------------------------------------------------------------
  7.   # ● 需要的 Windows API 函数
  8.   #--------------------------------------------------------------------------
  9.   GetWindowThreadProcessId = Win32API.new("user32", "GetWindowThreadProcessId", "LP", "L")
  10.   GetWindow = Win32API.new("user32", "GetWindow", "LL", "L")
  11.   GetClassName = Win32API.new("user32", "GetClassName", "LPL", "L")
  12.   GetCurrentThreadId = Win32API.new("kernel32", "GetCurrentThreadId", "V", "L")
  13.   GetForegroundWindow = Win32API.new("user32", "GetForegroundWindow", "V", "L")
  14.   #--------------------------------------------------------------------------
  15.   # ● 获取窗口句柄
  16.   #--------------------------------------------------------------------------
  17.   def hwnd
  18.     # 获取调用线程(RM 的主线程)的进程标识
  19.     threadID = GetCurrentThreadId.call
  20.     # 获取 Z 次序中最靠前的窗口
  21.     hWnd = GetWindow.call(GetForegroundWindow.call, 0)
  22.     # 枚举所有窗口
  23.     while hWnd != 0
  24.       # 如果创建该窗口的线程标识匹配本线程标识
  25.       if threadID == GetWindowThreadProcessId.call(hWnd, 0)
  26.         # 分配一个 12 个字节的缓冲区
  27.         className = " " * 12                         # ●
  28.         # 获取该窗口的类名
  29.         GetClassName.call(hWnd, className, 12)       # ●
  30.         # 如果匹配 RGSS Player 则跳出循环
  31.         break if className[0, 11] == "RGSS Player"
  32.       end
  33.       # 获取下一个窗口
  34.       hWnd = GetWindow.call(hWnd, 2)
  35.     end
  36.     return hWnd
  37.   end
  38. end
  39. HWND = hwnd

  40. #--------------------------------------------------------------------------
  41. # ● RMXP用 Graphics.snap_to_bitmap
  42. #    就算窗口被遮盖或者显示不全也可以正常截图
  43. #    附赠: Graphics.snap_to_clipboard
  44. #          截图到剪贴板
  45. # ● 作者:晴兰 @ rpg.blue
  46. #    使用到紫苏前辈的获取窗口句柄脚本,其他部分为原创
  47. #--------------------------------------------------------------------------
  48. module SAFX
  49.   module_function
  50.   class ::Integer; def pack; self; end; def to_param; 'i'; end; def ord; self; end; end
  51.   class ::String;def pack; [self].pack('p').unpack('L').first; end; def to_param; 'p'; end; end
  52.   def api(dll,func)
  53.     lambda{|*args|
  54.        Win32API.new(dll,func,args.map{|x|x.to_param}, 'i').call *args
  55.     }
  56.   end
  57.   def callproc(addr, type = :cdecl)
  58.     stdcall = type == :stdcall
  59.     raise "addr == 0 " if addr.pack == 0
  60.     apicall = api('user32', 'CallWindowProcW')
  61.     lambda{|*args|apicall.call((code=[0x55,0xe589].pack('CS')+args.map{|x| [0x68, x.pack].pack('CL')}.reverse.join+[0xb8, addr.pack, 0xD0FF, 0xc481, (stdcall ? 0 : args.length*4) , 0x10c2c9].pack('CLSSLL')),0,0,0,0)}
  62.   end
  63.   LL  = api("kernel32", "LoadLibrary")
  64.   GPA = api("kernel32", "GetProcAddress")
  65.   def funcaddr(dll, func)
  66.      x = GPA.call(LL.call(dll), func)
  67.      x == 0 ? nil : x
  68.   end
  69.   def readmem(start, len)
  70.     api('kernel32', 'RtlMoveMemory').call buf = "\0"*len, start, len
  71.     buf
  72.   end
  73.   def writemem(start, len, value)
  74.     api('kernel32', 'RtlMoveMemory').call start, value, [len, value.length].min
  75.   end
  76. end

  77. class << Graphics
  78.   SetWindowPos = SAFX.api("user32", "SetWindowPos")
  79.   GetSystemMetrics = SAFX.api("user32", "GetSystemMetrics")
  80.   CAPTION_HEIGHT = GetSystemMetrics.call(4)
  81.   CX_FRAME, CY_FRAME = GetSystemMetrics.call(32), GetSystemMetrics.call(33)
  82.   SIZE = {:width => 640, :height => 480}
  83.   def resize_screen(width, height)
  84.     SetWindowPos.call(HWND, 0, 0, 0,
  85.       width + CX_FRAME - 2, height + CAPTION_HEIGHT + CY_FRAME - 1, 2)
  86.     SIZE[:width], SIZE[:height] = width, height
  87.   end
  88.   def width
  89.     SIZE[:width]
  90.   end
  91.   def height
  92.     SIZE[:height]
  93.   end
  94.   def do_screen_stuff
  95.     hwnd = self.hwnd
  96.     src = SAFX.api('user32', 'GetDC').call(hwnd)
  97.     memdc = SAFX.api('gdi32', 'CreateCompatibleDC').call(src)
  98.     hb = SAFX.api('gdi32', 'CreateCompatibleBitmap').call(src, width, height)
  99.     ho = SAFX.api('gdi32', 'SelectObject').call(memdc, hb)
  100.     bp = SAFX.funcaddr("user32", "GetDC")
  101.     ov = "\0"*4
  102.     str = [0xb8, memdc, 0xc2, 0x04, 0x00].pack("CLC*") # magic, touch
  103.     SAFX.api('Kernel32', 'VirtualProtect').call(bp, str.length, 0x40, ov)
  104.     oldstr = SAFX.readmem(bp, str.length)
  105.     SAFX.writemem bp, str.length, str
  106.     SAFX.api('user32', 'UpdateWindow').call(hwnd)
  107.     Graphics.update
  108.     SAFX.writemem bp, str.length, oldstr
  109.     yield hb
  110.   ensure
  111.     SAFX.api('user32', 'ReleaseDC').call(hwnd, src)
  112.     hb = SAFX.api('gdi32', 'SelectObject').call(memdc, ho)
  113.     SAFX.api('gdi32', 'DeleteObject').call(ho)
  114.     SAFX.api('gdi32', 'DeleteDC').call(memdc)
  115.   end
  116.   def snap_to_bitmap
  117.     bm = Bitmap.new(width, height)
  118.     addr  = bm.object_id * 2
  119.     addr, = SAFX.readmem(addr + 16, 4).unpack("L")
  120.     addr, = SAFX.readmem(addr +  8, 4).unpack("L")
  121.     addr, = SAFX.readmem(addr + 16, 4).unpack("L")
  122.     do_screen_stuff do |hb|
  123.       bits = "\0"*(width * height * 4)
  124.       SAFX.api('gdi32', 'GetBitmapBits').call(hb, bits.length, bits)
  125.       r = SAFX.api('kernel32', 'RtlMoveMemory')
  126.       a = bits.pack
  127.       stride = width * 4
  128.       h = height
  129.      (h-1).downto(0){|i|
  130.         r.call addr + i * stride, a + (h - i - 1)*stride, stride
  131.       }
  132.       bm
  133.     end
  134.   end
  135.   def snap_to_clipboard
  136.     return false if SAFX.api('user32', 'OpenClipboard').call(hwnd) == 0
  137.     do_screen_stuff do |hb|
  138.       SAFX.api('user32', 'SetClipboardData').call(2, hb)
  139.       SAFX.api('user32', 'CloseClipboard').call
  140.       true
  141.     end
  142.   end
  143. end

  144. #==============================================================================
  145. # ■ Bitmap
  146. #------------------------------------------------------------------------------
  147. #   位图的类。所谓位图即表示图像其本身。
  148. #==============================================================================

  149. class Bitmap
  150.   def blur(str = 3, rect = Rect.new(0, 0, self.width, self.height))
  151.     if str < 1
  152.       str = 1
  153.     elsif str > 5
  154.       str = 5
  155.     end
  156.     for x in -str..str
  157.       for y in -str..str
  158.         next if x == 0 and y == 0
  159.         self.blt(x + rect.x, y + rect.y, self, Rect.new(rect.x, rect.y, rect.width - x, rect.height - y), 10)
  160.       end
  161.     end
  162.     return self
  163.   end
  164. end

  165. module M3L
  166.   module Snaps
  167.     Stack = []
  168.     def self.<< bmp
  169.       Stack << bmp
  170.       self
  171.     end
  172.     def self.>> spr
  173.       spr.bitmap = Stack.pop
  174.       self
  175.     end
  176.     class ::Scene_Map
  177.       alias ori_call_menu call_menu
  178.       def call_menu
  179.         M3L::Snaps.<< Graphics.snap_to_bitmap.blur 2
  180.         ori_call_menu
  181.       end
  182.     end
  183.   end
  184. end

  185. class Scene_Menu
  186.   def initialize(*)
  187.   end
  188.   def main
  189.     @background = Sprite.new
  190.     M3L::Snaps >> @background
  191.     @command_window = Window_Command.new(192, ["退到主界面", "结束游戏"])
  192.     @command_window.x = 320 - @command_window.width  / 2
  193.     @command_window.y = 240 - @command_window.height / 2
  194.     Graphics.transition
  195.     loop do
  196.       Graphics.update
  197.       Input.update
  198.       update
  199.       break unless $scene == self
  200.     end
  201.     Graphics.freeze
  202.     @command_window.dispose
  203.     @background.bitmap.dispose
  204.     @background.dispose
  205.   end
  206.   def update
  207.     @command_window.update
  208.     if Input.trigger?(Input::B)
  209.       $game_system.se_play($data_system.cancel_se)
  210.       $scene = Scene_Map.new
  211.       return
  212.     end
  213.     if Input.trigger?(Input::C)
  214.       case @command_window.index
  215.       when 0 then command_to_title
  216.       when 1 then command_shutdown
  217.       end
  218.     end
  219.   end
  220.   def command_to_title
  221.     $game_system.se_play($data_system.decision_se)
  222.     Audio.bgm_fade(800)
  223.     Audio.bgs_fade(800)
  224.     Audio.me_fade(800)
  225.     $scene = Scene_Title.new
  226.   end
  227.   def command_shutdown
  228.     $game_system.se_play($data_system.decision_se)
  229.     Audio.bgm_fade(800)
  230.     Audio.bgs_fade(800)
  231.     Audio.me_fade(800)
  232.     $scene = nil
  233.   end
  234. end
复制代码
即插即用

点评

我知道 我知道!rb是RyanBerrn的缩写!!!【233  发表于 2016-5-26 20:00
.rb, 191行以上都是【前置代码】以下都是抄的默认脚本[s]除了把注释都删了[/s]  发表于 2016-5-26 17:00
.rb, 191行以上都是【前置代码】以下都是抄的默认脚本[s]除了把注释都删了[/s]  发表于 2016-5-26 16:54
现在喵喵喵写这样一个脚本都要动这么多东西了吗?触瞎  发表于 2016-5-26 08:41
第一个问题是手残已修复, 第二个我这里执行没问题啊  发表于 2016-5-25 22:32

  -fk: -azogi:
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
168 小时
注册时间
2007-7-26
帖子
477
 楼主| 发表于 2016-5-26 18:51:55 | 显示全部楼层
本帖最后由 cmmd1 于 2016-5-26 18:54 编辑
kuerlulu 发表于 2016-5-25 20:23
即插即用


能不能单独的生成一个?上面这些没注释,看不懂啊。改都不知道哪里改。
我的工程里面按ESC调不出菜单的。但是并不代表ESC键没用。所以能不能单独的出一个按ECS弹出退到主界面和结束游戏。

QQ图片20160526185533.jpg
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1343
在线时间
1295 小时
注册时间
2012-8-4
帖子
749
发表于 2016-5-26 22:40:43 | 显示全部楼层
本帖最后由 夜狠简单 于 2016-5-26 22:42 编辑
cmmd1 发表于 2016-5-26 18:51
能不能单独的生成一个?上面这些没注释,看不懂啊。改都不知道哪里改。
我的工程里面按ESC调不出菜单的。 ...



如果是所有地图都通用的话可以写在
Scene_map下的update里面

    判断按键是
   Input.press?(Input::Z)
#不是在事件执行中或菜单禁止中或者禁止遇敌中
   unless $game_system.map_interpreter.running? or
   $game_system.menu_disabled or $game_system.encounter_disabled
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
168 小时
注册时间
2007-7-26
帖子
477
 楼主| 发表于 2016-5-27 12:50:31 | 显示全部楼层
本帖最后由 cmmd1 于 2016-5-27 16:37 编辑
技能



物品

装备

点评

是的,标题菜单。  发表于 2016-5-27 13:01
主界面是指标题界面吗  发表于 2016-5-27 12:54
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-16 22:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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