赞 | 0 |
VIP | 0 |
好人卡 | 2 |
积分 | 2 |
经验 | 11882 |
最后登录 | 2024-5-26 |
在线时间 | 369 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 155
- 在线时间
- 369 小时
- 注册时间
- 2012-8-6
- 帖子
- 47
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
如题,我尝试把HN_Light灯光脚本的黑暗的z值改到无穷大(99999)仍然无法盖住游戏系统自带的雨。如何解决呢?
=begin HN_Light version 0.0.0.4 by 半生 [url]http://www11.atpages.jp/namahanka/[/url] 要HN_RG_BITMAP(ver 0.1.2.1以降) ver 0.0.0.4 イベント条件を満たすページが無い状態に移行する時に落ちるバグを修正 =end # ----- ▽ 设定 ▽ ----- module HN_Light # 分辨率 0:(高清)~2:(流畅) SIMPLIFY = 2 # 玩家的灯光类型使用变量号码 PLAYER_LIGHT_TYPE = 1 # 开关 DARK_SWITCH = 2 # 灯光活动识别用的正规表达式 REGEX_LIGHT = /灯光(\d+)/ # 灯光图像的目录 LIGHT_IMG_DIR = "Graphics/Pictures/" # 灯光Bitmap设定 LIGHTS = [ # [文件名称, 帧数, 缩放率, 光的Y轴, 色相] ["light1", 1, 0.5, 0, 0], ["light2", 1, 1.7, 0, 0], ["light3", 1, 1.7, 0, 0], ["light4", 1, 3.0, 0, 0], ["light5", 1, 5.0, -40, 50], ["light6", 1, 3.0, 0, 0], ["light7", 1, 3.0, 0, 0], ["light8", 1, 1.0, 0, 50], ["light9", 1, 1.5, 0, 10], ["light10", 1, 4.0, 0, 0], ["light11", 1, 1.0, 0, 0], ["light11", 1, 1.0, 0, 0], ["light12", 1, 1.0, 0, 0], ["light11", 1, 1.0, 0, 0], ] end # ----- △ 設定ここまで △ ----- module HN_Light # イベントへのmix-in用 module LightEvent attr_reader :light_type def initialize super() @light_type = 0 end def check_light @light_type = 0 return if @list.nil? @list.each do |command| break if @light_type > 0 if command.code == 108 or command.code == 408 command.parameters.each do |line| if line =~ REGEX_LIGHT @light_type = $1.to_i break end end end end # END @list.each end end # END module LightEvent class Light attr_reader :bitmap attr_reader :cells attr_reader :width attr_reader :height attr_reader :ox attr_reader :oy def initialize(light_type, s_zoom = 1) light = LIGHTS[light_type - 1] if light.nil? # 本来ならここには来ないはず @bitmap = Bitmap.new(32, 32) @cels = 1 [url=home.php?mod=space&uid=98379]@zoom[/url] = 1.0 @oy = 16 @ox = 16 @width = 32 [url=home.php?mod=space&uid=291977]@height[/url] = 32 else @bitmap = Bitmap.new(LIGHT_IMG_DIR + light[0]) @bitmap.invert() @cells = light[1].to_i @cells = 1 if (@cells < 1 or @cells > @bitmap.width) @zoom = light[2].to_f @zoom = 1.0 if @zoom <= 0.0 @zoom /= s_zoom @width = @bitmap.width / @cells @height = @bitmap.height # 拡大縮小処理 if @zoom != 1.0 new_width = (@width * @zoom).round new_height = (@height * @zoom).round if new_width * new_height < 1 @zoom = 1.0 else @width = new_width @height = new_height new_bitmap = Bitmap.new(@width * @cells, @height) new_bitmap.stretch_blt(new_bitmap.rect,@bitmap, @bitmap.rect) @bitmap.dispose @bitmap = new_bitmap end end @ox = @width / 2 @oy = @height / 2 - light[3].to_i / s_zoom # 色相変換 if ( (hue = light[4].to_i) != 0) @bitmap.hue_change(hue) end end end # End def initialize # 終了処理 def dispose @bitmap.dispose @bitmap = nil end end end class Game_Event include HN_Light::LightEvent alias :_hn_light__setup :setup unless method_defined?(:_hn_light__setup) def setup(new_page) _hn_light__setup(new_page) check_light() end end class Game_Player def light_type return $game_variables[HN_Light::PLAYER_LIGHT_TYPE] end end class Game_Map attr_reader :light_events # 灯りイベントリストの更新 def refresh_lights @light_events = [] @events.values.each do |event| if (event.light_type > 0) @light_events.push(event) end end end alias :_hn_light__setup_events :setup_events unless method_defined?(:_hn_light__setup_events) def setup_events _hn_light__setup_events() refresh_lights() end alias :_hn_light__refresh :refresh unless method_defined?(:_hn_light__refresh) def refresh _hn_light__refresh() refresh_lights() end end class Sprite_Dark < Sprite @@base_color = Color.new(255,255,255) def initialize(viewport = nil) super(viewport) @width = Graphics.width @height = Graphics.height case HN_Light::SIMPLIFY when 1 @zoom = 2 when 2 @zoom = 4 else @zoom = 1 end @width /= @zoom @height /= @zoom self.zoom_x = @zoom.to_f self.zoom_y = @zoom.to_f self.bitmap = Bitmap.new(@width, @height) self.bitmap.fill_rect(self.bitmap.rect, @@base_color) self.blend_type = 2 # ブレンドタイプ(減算) self.z = 500 self.visible = false @light_cache = {} end # 灯りを追加する def add_light(charactor) light_type = charactor.light_type return if (light_type < 1 or light_type > HN_Light::LIGHTS.size) unless @light_cache.key?(light_type) @light_cache[light_type] = HN_Light::Light.new(light_type, @zoom) end light = @light_cache[light_type] # 画面外の場合は何もしない if @zoom == 1 return if (charactor.screen_x < 0 - light.width + light.ox) return if (charactor.screen_x > @width + light.ox) return if (charactor.screen_y < 0 - light.height + light.oy) return if (charactor.screen_y > @height + light.oy) else return if (charactor.screen_x < 0 - (light.width + light.ox) * @zoom) return if (charactor.screen_x > (@width + light.ox) * @zoom) return if (charactor.screen_y < 0 - (light.height + light.oy) * @zoom) return if (charactor.screen_y > (@height + light.oy) * @zoom) end # アニメーション判定 if light.cells > 1 index = (Graphics.frame_count / 4) % light.cells rect = Rect.new(index * light.width , 0, light.width, light.height) else rect = light.bitmap.rect end if @zoom != 1 p_x = charactor.screen_x / @zoom - light.ox p_y = (charactor.screen_y - 16) / @zoom - light.oy else p_x = charactor.screen_x - light.ox p_y = charactor.screen_y - 16 - light.oy end # 乗算合成(3) self.bitmap.blend_blt(p_x, p_y, light.bitmap, rect, 3) end def refresh self.bitmap.fill_rect(self.bitmap.rect, @@base_color) $game_map.light_events.each do |event| next if HN_Light::LIGHTS[event.light_type - 1].nil? add_light(event) end add_light($game_player) end # 更新 def update super refresh() end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose self.bitmap.dispose @light_cache.values.each do |light| light.dispose end super end end class Spriteset_Map # 暗闇スプライトの作成 def create_dark @dark_sprite = Sprite_Dark.new(@viewport1) end # 暗闇スプライトの更新 def update_dark if (@dark_sprite.visible = $game_switches[HN_Light::DARK_SWITCH]) @dark_sprite.update $game_switches[8] = false end end # 暗闇スプライトの破棄 def dispose_dark @dark_sprite.dispose end # 初期化 alias :_dark__initialize :initialize unless private_method_defined?(:_dark__initialize) def initialize _dark__initialize() create_dark() update_dark() end # 更新 alias :_dark__update :update unless method_defined?(:_dark__update) def update _dark__update() update_dark() if !@dark_sprite.nil? and !@dark_sprite.disposed? end # 終了処理 alias :_dark__dispose :dispose unless method_defined?(:_dark__dispose) def dispose dispose_dark() _dark__dispose() end end
=begin
HN_Light version 0.0.0.4
by 半生
[url]http://www11.atpages.jp/namahanka/[/url]
要HN_RG_BITMAP(ver 0.1.2.1以降)
ver 0.0.0.4
イベント条件を満たすページが無い状態に移行する時に落ちるバグを修正
=end
# ----- ▽ 设定 ▽ -----
module HN_Light
# 分辨率 0:(高清)~2:(流畅)
SIMPLIFY = 2
# 玩家的灯光类型使用变量号码
PLAYER_LIGHT_TYPE = 1
# 开关
DARK_SWITCH = 2
# 灯光活动识别用的正规表达式
REGEX_LIGHT = /灯光(\d+)/
# 灯光图像的目录
LIGHT_IMG_DIR = "Graphics/Pictures/"
# 灯光Bitmap设定
LIGHTS = [
# [文件名称, 帧数, 缩放率, 光的Y轴, 色相]
["light1", 1, 0.5, 0, 0],
["light2", 1, 1.7, 0, 0],
["light3", 1, 1.7, 0, 0],
["light4", 1, 3.0, 0, 0],
["light5", 1, 5.0, -40, 50],
["light6", 1, 3.0, 0, 0],
["light7", 1, 3.0, 0, 0],
["light8", 1, 1.0, 0, 50],
["light9", 1, 1.5, 0, 10],
["light10", 1, 4.0, 0, 0],
["light11", 1, 1.0, 0, 0],
["light11", 1, 1.0, 0, 0],
["light12", 1, 1.0, 0, 0],
["light11", 1, 1.0, 0, 0],
]
end
# ----- △ 設定ここまで △ -----
module HN_Light
# イベントへのmix-in用
module LightEvent
attr_reader :light_type
def initialize
super()
@light_type = 0
end
def check_light
@light_type = 0
return if @list.nil?
@list.each do |command|
break if @light_type > 0
if command.code == 108 or command.code == 408
command.parameters.each do |line|
if line =~ REGEX_LIGHT
@light_type = $1.to_i
break
end
end
end
end # END @list.each
end
end # END module LightEvent
class Light
attr_reader :bitmap
attr_reader :cells
attr_reader :width
attr_reader :height
attr_reader :ox
attr_reader :oy
def initialize(light_type, s_zoom = 1)
light = LIGHTS[light_type - 1]
if light.nil?
# 本来ならここには来ないはず
@bitmap = Bitmap.new(32, 32)
@cels = 1
[url=home.php?mod=space&uid=98379]@zoom[/url] = 1.0
@oy = 16
@ox = 16
@width = 32
[url=home.php?mod=space&uid=291977]@height[/url] = 32
else
@bitmap = Bitmap.new(LIGHT_IMG_DIR + light[0])
@bitmap.invert()
@cells = light[1].to_i
@cells = 1 if (@cells < 1 or @cells > @bitmap.width)
@zoom = light[2].to_f
@zoom = 1.0 if @zoom <= 0.0
@zoom /= s_zoom
@width = @bitmap.width / @cells
@height = @bitmap.height
# 拡大縮小処理
if @zoom != 1.0
new_width = (@width * @zoom).round
new_height = (@height * @zoom).round
if new_width * new_height < 1
@zoom = 1.0
else
@width = new_width
@height = new_height
new_bitmap = Bitmap.new(@width * @cells, @height)
new_bitmap.stretch_blt(new_bitmap.rect,@bitmap, @bitmap.rect)
@bitmap.dispose
@bitmap = new_bitmap
end
end
@ox = @width / 2
@oy = @height / 2 - light[3].to_i / s_zoom
# 色相変換
if ( (hue = light[4].to_i) != 0)
@bitmap.hue_change(hue)
end
end
end # End def initialize
# 終了処理
def dispose
@bitmap.dispose
@bitmap = nil
end
end
end
class Game_Event
include HN_Light::LightEvent
alias :_hn_light__setup :setup unless method_defined?(:_hn_light__setup)
def setup(new_page)
_hn_light__setup(new_page)
check_light()
end
end
class Game_Player
def light_type
return $game_variables[HN_Light::PLAYER_LIGHT_TYPE]
end
end
class Game_Map
attr_reader :light_events
# 灯りイベントリストの更新
def refresh_lights
@light_events = []
@events.values.each do |event|
if (event.light_type > 0)
@light_events.push(event)
end
end
end
alias :_hn_light__setup_events :setup_events unless method_defined?(:_hn_light__setup_events)
def setup_events
_hn_light__setup_events()
refresh_lights()
end
alias :_hn_light__refresh :refresh unless method_defined?(:_hn_light__refresh)
def refresh
_hn_light__refresh()
refresh_lights()
end
end
class Sprite_Dark < Sprite
@@base_color = Color.new(255,255,255)
def initialize(viewport = nil)
super(viewport)
@width = Graphics.width
@height = Graphics.height
case HN_Light::SIMPLIFY
when 1
@zoom = 2
when 2
@zoom = 4
else
@zoom = 1
end
@width /= @zoom
@height /= @zoom
self.zoom_x = @zoom.to_f
self.zoom_y = @zoom.to_f
self.bitmap = Bitmap.new(@width, @height)
self.bitmap.fill_rect(self.bitmap.rect, @@base_color)
self.blend_type = 2 # ブレンドタイプ(減算)
self.z = 500
self.visible = false
@light_cache = {}
end
# 灯りを追加する
def add_light(charactor)
light_type = charactor.light_type
return if (light_type < 1 or light_type > HN_Light::LIGHTS.size)
unless @light_cache.key?(light_type)
@light_cache[light_type] = HN_Light::Light.new(light_type, @zoom)
end
light = @light_cache[light_type]
# 画面外の場合は何もしない
if @zoom == 1
return if (charactor.screen_x < 0 - light.width + light.ox)
return if (charactor.screen_x > @width + light.ox)
return if (charactor.screen_y < 0 - light.height + light.oy)
return if (charactor.screen_y > @height + light.oy)
else
return if (charactor.screen_x < 0 - (light.width + light.ox) * @zoom)
return if (charactor.screen_x > (@width + light.ox) * @zoom)
return if (charactor.screen_y < 0 - (light.height + light.oy) * @zoom)
return if (charactor.screen_y > (@height + light.oy) * @zoom)
end
# アニメーション判定
if light.cells > 1
index = (Graphics.frame_count / 4) % light.cells
rect = Rect.new(index * light.width , 0, light.width, light.height)
else
rect = light.bitmap.rect
end
if @zoom != 1
p_x = charactor.screen_x / @zoom - light.ox
p_y = (charactor.screen_y - 16) / @zoom - light.oy
else
p_x = charactor.screen_x - light.ox
p_y = charactor.screen_y - 16 - light.oy
end
# 乗算合成(3)
self.bitmap.blend_blt(p_x, p_y, light.bitmap, rect, 3)
end
def refresh
self.bitmap.fill_rect(self.bitmap.rect, @@base_color)
$game_map.light_events.each do |event|
next if HN_Light::LIGHTS[event.light_type - 1].nil?
add_light(event)
end
add_light($game_player)
end
# 更新
def update
super
refresh()
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
self.bitmap.dispose
@light_cache.values.each do |light|
light.dispose
end
super
end
end
class Spriteset_Map
# 暗闇スプライトの作成
def create_dark
@dark_sprite = Sprite_Dark.new(@viewport1)
end
# 暗闇スプライトの更新
def update_dark
if (@dark_sprite.visible = $game_switches[HN_Light::DARK_SWITCH])
@dark_sprite.update
$game_switches[8] = false
end
end
# 暗闇スプライトの破棄
def dispose_dark
@dark_sprite.dispose
end
# 初期化
alias :_dark__initialize :initialize unless private_method_defined?(:_dark__initialize)
def initialize
_dark__initialize()
create_dark()
update_dark()
end
# 更新
alias :_dark__update :update unless method_defined?(:_dark__update)
def update
_dark__update()
update_dark() if !@dark_sprite.nil? and !@dark_sprite.disposed?
end
# 終了処理
alias :_dark__dispose :dispose unless method_defined?(:_dark__dispose)
def dispose
dispose_dark()
_dark__dispose()
end
end
|
|