Project1
标题:
关于視界制限脚本
[打印本页]
作者:
gz29767562
时间:
2012-2-26 23:45
标题:
关于視界制限脚本
本帖最后由 gz29767562 于 2012-2-27 11:53 编辑
#==============================================================================
# ★ RGSS3_視界制限 Ver1.1
#==============================================================================
=begin
作者:tomoaky
首發網站:ひきも記 (http://hikimoki.sakura.ne.jp/)
設定號碼的地圖限制視野。
寫在角色,職業,是在武器(防護具)的備註中的標籤
能補正視野限制的尺寸。
例)<視界補正 32>
視界32點擴大広。
只有戰鬥成員進行視野補正價值的計算。
遊戲變量(默認情況下,#9),可以調整大小使用視圖領域。
加入上述所有設置,將獲得的實際大小限制的能見度。
然而,如果尚未設置能見度限制的地圖上都是無效的。
因為每幀都會重繪整個屏幕的Sprite
將會有所加重。
操作所需的圖像
Graphics/System/sight_shadow.png
遊戲變量使用(默認設置)
0009
2012.02.05 Ver1.1
・調整Z坐標使計時器使不被遮住
・加使用遊戲變量補正視野限制尺寸的功能(通過變量可做成開/関效果)
2012.01.20 Ver1.0
公開
=end
#==============================================================================
# □ 設定項目
#==============================================================================
module TMBLSIGHT
# 指定幾號的地圖進行視界制限
# 例)SIGHT[3] = 128 # 設置地圖號碼3的視野能見度128点矩形
SIGHT = {}
SIGHT[15] = 100
VN_SIGHT = 9 # 設定尺寸大小補正在遊戲中使用的遊戲變量
end
#==============================================================================
# □ RPG::BaseItem
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# ○ 視界制限補正値
#--------------------------------------------------------------------------
def sight_power
unless @sight_power
@sight_power = /<視界補正\s*(\-*\d+)\s*>/ =~ @note ? $1.to_i : 0
end
@sight_power
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor
#--------------------------------------------------------------------------
# ○ 視界制限補正値
#--------------------------------------------------------------------------
def sight_power
result = 0
feature_objects.each {|object| result += object.sight_power}
result
end
end
#==============================================================================
# □ Sprite_SightShadow
#==============================================================================
class Sprite_SightShadow < Sprite
#--------------------------------------------------------------------------
# ● 物件初期化
#--------------------------------------------------------------------------
def initialize(viewport = nil)
super(viewport)
self.z = 199
self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
@bitmap_shadow = Bitmap.new("Graphics/System/sight_shadow")
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
self.bitmap.dispose
@bitmap_shadow.dispose
super
end
#--------------------------------------------------------------------------
# ● 幀更新
#--------------------------------------------------------------------------
def update
super
if TMBLSIGHT::SIGHT[$game_map.map_id]
self.visible = true
self.bitmap.clear
w = TMBLSIGHT::SIGHT[$game_map.map_id]
$game_party.battle_members.each{|actor| w = [w + actor.sight_power, 48].max}
w = [w + $game_variables[TMBLSIGHT::VN_SIGHT], 48].max
x = $game_player.screen_x - w / 2
y = $game_player.screen_y - w / 2 - 16
rect = Rect.new(x, y, w, w)
self.bitmap.stretch_blt(rect, @bitmap_shadow, @bitmap_shadow.rect)
color = Color.new(0, 0, 0)
self.bitmap.fill_rect(0, 0, Graphics.width, y, color)
self.bitmap.fill_rect(0, y + w, Graphics.width, Graphics.height - y - w,
color)
self.bitmap.fill_rect(0, y, x, w, color)
self.bitmap.fill_rect(x + w, y, Graphics.width - x - w, w, color)
else
self.visible = false
end
end
end
#==============================================================================
# ■ Spriteset_Map
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● 物件初期化
#--------------------------------------------------------------------------
alias tmblsight_spriteset_map_initialize initialize
def initialize
tmblsight_spriteset_map_initialize
create_sight_shadow
end
#--------------------------------------------------------------------------
# ○ 作成視界制限Sprite
#--------------------------------------------------------------------------
def create_sight_shadow
@sight_shadow_sprite = Sprite_SightShadow.new(@viewport2)
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias tmblsight_spriteset_map_dispose dispose
def dispose
tmblsight_spriteset_map_dispose
dispose_sight_shadow
end
#--------------------------------------------------------------------------
# ○ 解放視界制限Sprites
#--------------------------------------------------------------------------
def dispose_sight_shadow
@sight_shadow_sprite.dispose
end
#--------------------------------------------------------------------------
# ● 幀更新
#--------------------------------------------------------------------------
alias tmblsight_spriteset_map_update update
def update
update_sight_shadow
tmblsight_spriteset_map_update
end
#--------------------------------------------------------------------------
# ○ 更新視界制限Sprites
#--------------------------------------------------------------------------
def update_sight_shadow
@sight_shadow_sprite.update if @sight_shadow_sprite
end
end
复制代码
我想问下这个脚本可以支持多张地图視界制限吗?可以的话,怎么操作呢,谢谢。哈哈
作者:
tseyik
时间:
2012-2-27 09:22
本帖最后由 tseyik 于 2012-2-27 13:45 编辑
可以
SIGHT[15] = 100多幾句就可以了
如 SIGHT[5] = 100
SIGHT[1] = 32
那地図1的視界基本制限是32
那地図5的視界基本制限是100
這裏有個灯光系統、可以用事件指定地図光/暗切換
更好用
半生@Page(仮)
‘‘──tseyik于2012-2-27 13:45补充以下内容
灯光 sample_beta.zip
http://115.com/file/c24ir9an#
這會用到Bitmap功能拡張DLL(tktk_bitmap.dll)
和這二個脚本
Bitmapクラスの拡張
HN_Light
…………………………………………………………………………
Bitmap功的效果可到覷看
http://www.tktkgame.com/tkool/rgss_common/bitmap_extension.html
’’
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1