赞 | 13 |
VIP | 320 |
好人卡 | 64 |
积分 | 3 |
经验 | 112963 |
最后登录 | 2022-8-25 |
在线时间 | 2355 小时 |
Lv2.观梦者 (暗夜天使)
- 梦石
- 0
- 星屑
- 266
- 在线时间
- 2355 小时
- 注册时间
- 2009-3-13
- 帖子
- 2309
|
本帖最后由 Sion 于 2013-4-21 15:09 编辑
@曉磊 ,@米酒獭酱 ,@muyumuyulnny
这是区域响应的代码,因为时间比较紧,所以没有把它弄成傻瓜式的,需要大家自己动手设置了。
要使用它的话,预先在事件中执行脚本- area_response(type, ox, oy, width, height, switch_id)
复制代码 参数规范:
---------------------------------------------------------------------
其中type是区域响应类型
type = 0:鼠标移动到屏幕对应区域后开启对应的开关(只执行一次)
type = 1:鼠标在屏幕对应区域按下按键后,对应的开关开启(只执行一次)
type = 2:鼠标移动到屏幕对应区域时开关开启,移动到区域外时开关关闭,并行的处理。如果需要关闭响应,在事件脚本中执行代码- $area_responses.delete_if {|rsp| rsp.type == 2 }# 关闭全部类型为2的响应
复制代码 ox,oy 为区域左上角坐标 width,height 为区域宽度 switch_id为操作的公共开关id
例子:鼠标移动到屏幕左上角32*32区域内,按下鼠标左键,启动开关3(只响应一次)- area_response(1, 0, 0, 32, 32, 3)
复制代码 ---------------------------------------------------------------------
type = 3:鼠标移动到地图坐标指定的事件上,则启动该区域上的事件(只执行一次)
type = 4;鼠标移动到地图坐标指定的事件上,则启动该事件(可以反复触发)如果需要关闭响应,在事件脚本中执行代码- $area_responses.delete_if {|rsp| rsp.type == 4 } # 关闭全部类型为4的响应
复制代码 例子:鼠标移动到地图坐标(0, 5) 时,启动位于该格子的事件- area_response(4, 0, 5) #启动事件只使用3个参数
复制代码 ---------------------------------------------------------------------
以下代码放到鼠标脚本之下- ####泥煤的height
- # [url=home.php?mod=space&uid=291977]@height[/url] = height
- class Area_Response
- attr_accessor :type
- attr_reader :ox
- attr_reader :oy
- attr_reader :width
- attr_reader :height
- attr_reader :switch_id
- def initialize(type, ox, oy, width = 32, height = 32, switch_id = nil)
- @type = type
- @ox = ox
- @oy = oy
- @width = width
- @height = height
- @switch_id = switch_id
- end
- end
- $area_responses = []
- class Scene_Map
- alias update_mouse_2013421 update_mouse_action
- def update_mouse_action
- update_area_response
- update_mouse_2013421
- end
- def update_area_response
- responses = $area_responses
- responses.each {|response|
- ox = response.ox
- oy = response.oy
- width = response.width
- height = response.height
- switch_id = response.switch_id
- case response.type
- when 0
- if mouse_in_area?(ox, oy, width, height)
- $game_switches[switch_id] = true
- $area_responses.delete(response)
- end
- when 1
- if mouse_in_area?(ox, oy, width, height) && Mouse.trigger?(0x01)
- $game_switches[switch_id] = true
- $area_responses.delete(response)
- end
- when 2
- if mouse_in_area?(ox, oy, width, height)
- $game_switches[switch_id] = true
- else
- $game_switches[switch_id] = false
- end
- when 3
- if mouse_in_area?((ox - $game_map.display_x) * 32 ,
- (oy - $game_map.display_y) * 32, width, height)
- $game_map.events_xy(ox, oy).each {|event|
- event.start
- $area_responses.delete(response)
- return
- }
- end
- when 4
- if mouse_in_area?((ox - $game_map.display_x) * 32,
- (oy - $game_map.display_y) * 32, width, height)
- $game_map.events_xy(ox, oy).each {|event|
- event.start
- return
- }
- end
- end
- }
- end
- def mouse_in_area?(ox, oy, width, height)
- Mouse.mouse_x >= ox && Mouse.mouse_x <= ox + width &&
- Mouse.mouse_y >= oy && Mouse.mouse_y <= oy + height
- end
- end
- class Game_Interpreter
- def area_response(*arg)
- $area_responses.push(Area_Response.new(*arg))
- end
- end
复制代码 |
评分
-
查看全部评分
|