Project1
标题:
迷宫旅人那样的迷雾如何实现?
[打印本页]
作者:
bloodyliao
时间:
2015-10-4 17:09
标题:
迷宫旅人那样的迷雾如何实现?
视野的话是用一张图片实现这个我会了,并且图片的Z值要高于地图的Z值
但是,视野黑暗部分的迷雾是怎么做的呢?
似乎可以用一些天气脚本、雾气脚本来做,但是雾气的Z值应该高于视野图片的Z值,这样才能显示在视野图片的前端
然而雾气又不能跑到视野图片透明部分(地图)上面,因此似乎迷雾的Z值要低于地图的Z值
这样要如何实现呢?
作者:
tseyik
时间:
2015-10-4 17:19
#==============================================================================
# 「近景スクリプト」(ACE) ver2.2
#
# 製作者:奈々(なな)
# へぷたなすくろーる http://heptanas.mamagoto.com/
#
# ◇使用規約
# 使用される場合はスクリプト作成者として「奈々」を明記して下さい。
# このスクリプトを改変したり、改変したものを配布するなどは自由ですが
# その場合も元のスクリプトの作成者として名前は載せて下さい。
#
#------------------------------------------------------------------------------
#
# マップの遠景とは逆に、マップ手前に表示される「近景」を設定できます。
# 設定によってフォグや二重遠景なども表現可能です。
# 近景用の画像ファイルは遠景と同じくParallaxesフォルダに入れます。
#
# ・マップのメモ欄に設定
# <近景画像 ファイル名>
# :近景として表示する画像ファイルの指定
# <近景ループ横 数値>
# <近景ループ縦 数値>
# :ループと、自動スクロール速度の指定
# :遠景と同じなのでそちらを参考に(0でスクロールなしループ)
# <近景不透明度 数値>
# :不透明度を0~255で指定、デフォルトは255
# <近景合成方法 加算/減算>
# :合成方法を加算タイプや減算タイプに変更する
# <近景表示位置 数値>
# :0 遠景の上、マップチップの下
# :1 マップチップの上、キャラチップの下
# :2 キャラチップの上、ピクチャの下(デフォルト値)
# :3 ピクチャの上、メッセージの下
#
# ・イベントコマンドのスクリプトから変更
# change_lid
# :近景を削除する
#
# change_lid("ファイル名")
# :指定したファイルを近景として表示する
#
# change_lid("ファイル名", ループ横, ループ縦)
# ループの設定をしたい場合はスクロール速度を指定する。
#
# change_lid("ファイル名", ループ横, ループ縦, 不透明度, 合成方法)
# 更に不透明度を0~255で、合成方法を「通常」「加算」「減算」で指定可能。
#
#==============================================================================
module Cache
#--------------------------------------------------------------------------
# ● 近景グラフィックの取得
#--------------------------------------------------------------------------
def self.lid(filename)
load_bitmap("Graphics/Parallaxes/", filename)
end
end
class RPG::Map
#--------------------------------------------------------------------------
# ● 近景情報の取得
#--------------------------------------------------------------------------
def lid_name
@note[/<近景画像\s?(\w+)>/] ? $1.to_s : ""
end
def lid_loop_x
@note.include?("<近景ループ横")
end
def lid_loop_y
@note.include?("<近景ループ縦")
end
def lid_sx
@note[/<近景ループ横\s?([-]?\d+)>/] ? $1.to_i : 0
end
def lid_sy
@note[/<近景ループ縦\s?([-]?\d+)>/] ? $1.to_i : 0
end
def lid_opacity
@note[/<近景不透明度\s?(\d+)>/] ? $1.to_i : 255
end
def lid_blend_type
if @note[/<近景合成方法\s?(加算|減算)>/]
if $1.to_s == "加算"
return 1
else
return 2
end
else
return 0
end
end
def lid_height_level
@note[/<近景表示位置\s?(\d)>/] ? $1.to_i : 2
end
end
class Game_Map
attr_reader :lid_name # 近景 ファイル名
attr_reader :lid_opacity # 近景 不透明度
attr_reader :lid_blend_type # 近景 合成方法
attr_reader :lid_height_level # 近景 表示位置
#--------------------------------------------------------------------------
# ● 遠景のセットアップ
#--------------------------------------------------------------------------
alias lid_setup_parallax setup_parallax
def setup_parallax
lid_setup_parallax
setup_lid
end
#--------------------------------------------------------------------------
# ● 近景のセットアップ
#--------------------------------------------------------------------------
def setup_lid
@lid_name = @map.lid_name
@lid_opacity = @map.lid_opacity
@lid_blend_type = @map.lid_blend_type
@lid_height_level = @map.lid_height_level
@lid_loop_x = @map.lid_loop_x
@lid_loop_y = @map.lid_loop_y
@lid_sx = @map.lid_sx
@lid_sy = @map.lid_sy
@lid_x = 0
@lid_y = 0
end
#--------------------------------------------------------------------------
# ● 表示位置の設定
#--------------------------------------------------------------------------
alias lid_set_display_pos set_display_pos
def set_display_pos(x, y)
x = [0, [x, width - screen_tile_x].min].max unless loop_horizontal?
y = [0, [y, height - screen_tile_y].min].max unless loop_vertical?
lid_set_display_pos(x, y)
@lid_x = x
@lid_y = y
end
#--------------------------------------------------------------------------
# ● 遠景表示の原点 X 座標の計算
#--------------------------------------------------------------------------
def lid_ox(bitmap)
if @lid_loop_x
@lid_x * 16
else
w1 = [bitmap.width - Graphics.width, 0].max
w2 = [width * 32 - Graphics.width, 1].max
@lid_x * 16 * w1 / w2
end
end
#--------------------------------------------------------------------------
# ● 遠景表示の原点 Y 座標の計算
#--------------------------------------------------------------------------
def lid_oy(bitmap)
if @lid_loop_y
@lid_y * 16
else
h1 = [bitmap.height - Graphics.height, 0].max
h2 = [height * 32 - Graphics.height, 1].max
@lid_y * 16 * h1 / h2
end
end
#--------------------------------------------------------------------------
# ● 下にスクロール
#--------------------------------------------------------------------------
def scroll_down(distance)
if loop_vertical?
@display_y += distance
@display_y %= @map.height
@parallax_y += distance if @parallax_loop_y
@lid_y += distance if @lid_loop_y
else
last_y = @display_y
@display_y = [@display_y + distance, height - screen_tile_y].min
@parallax_y += @display_y - last_y
@lid_y += @display_y - last_y
end
end
#--------------------------------------------------------------------------
# ● 左にスクロール
#--------------------------------------------------------------------------
def scroll_left(distance)
if loop_horizontal?
@display_x += @map.width - distance
@display_x %= @map.width
@parallax_x -= distance if @parallax_loop_x
@lid_x -= distance if @lid_loop_x
else
last_x = @display_x
@display_x = [@display_x - distance, 0].max
@parallax_x += @display_x - last_x
@lid_x += @display_x - last_x
end
end
#--------------------------------------------------------------------------
# ● 右にスクロール
#--------------------------------------------------------------------------
def scroll_right(distance)
if loop_horizontal?
@display_x += distance
@display_x %= @map.width
@parallax_x += distance if @parallax_loop_x
@lid_x += distance if @lid_loop_x
else
last_x = @display_x
@display_x = [@display_x + distance, (width - screen_tile_x)].min
@parallax_x += @display_x - last_x
@lid_x += @display_x - last_x
end
end
#--------------------------------------------------------------------------
# ● 上にスクロール
#--------------------------------------------------------------------------
def scroll_up(distance)
if loop_vertical?
@display_y += @map.height - distance
@display_y %= @map.height
@parallax_y -= distance if @parallax_loop_y
@lid_y -= distance if @lid_loop_y
else
last_y = @display_y
@display_y = [@display_y - distance, 0].max
@parallax_y += @display_y - last_y
@lid_y += @display_y - last_y
end
end
#--------------------------------------------------------------------------
# ● 遠景の更新
#--------------------------------------------------------------------------
alias lid_update_parallax update_parallax
def update_parallax
lid_update_parallax
update_lid
end
#--------------------------------------------------------------------------
# ● 近景の更新
#--------------------------------------------------------------------------
def update_lid
@lid_x += @lid_sx / 64.0 if @lid_loop_x
@lid_y += @lid_sy / 64.0 if @lid_loop_y
end
#--------------------------------------------------------------------------
# ● 近景の変更
#--------------------------------------------------------------------------
def change_lid(name, loop_x, loop_y, sx, sy, opacity, blend_type)
@lid_name = name
@lid_x = 0 if @lid_loop_x && !loop_x
@lid_y = 0 if @lid_loop_y && !loop_y
@lid_loop_x = loop_x
@lid_loop_y = loop_y
@lid_sx = sx
@lid_sy = sy
@lid_opacity = opacity
@lid_blend_type = blend_type
end
end
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 近景の変更
#--------------------------------------------------------------------------
def change_lid(name = "", loop_sx = false, loop_sy = false, opacity = 255, blend_type = "通常")
if loop_sx
loop_x = true
sx = loop_sx
else
loop_x = false
sx = 0
end
if loop_sy
loop_y = true
sy = loop_sy
else
loop_y = false
sy = 0
end
if blend_type == "加算"
blend_type = 1
elsif blend_type == "減算"
blend_type = 2
else
blend_type = 0
end
$game_map.change_lid(name, loop_x, loop_y, sx, sy, opacity, blend_type)
end
end
class Spriteset_Map
#--------------------------------------------------------------------------
# ● 遠景の作成
#--------------------------------------------------------------------------
alias lid_create_parallax create_parallax
def create_parallax
lid_create_parallax
create_lid
end
#--------------------------------------------------------------------------
# ● 近景の作成
#--------------------------------------------------------------------------
def create_lid
case $game_map.lid_height_level
when 0
@lid = Plane.new(@viewport1)
@lid.z = -90
when 1
@lid = Plane.new(@viewport1)
@lid.z = 10
when 2
@lid = Plane.new(@viewport1)
@lid.z = 250
when 3
@lid = Plane.new(@viewport2)
@lid.z = 120
end
end
#--------------------------------------------------------------------------
# ● 遠景の解放
#--------------------------------------------------------------------------
alias lid_dispose_parallax dispose_parallax
def dispose_parallax
lid_dispose_parallax
dispose_lid
end
#--------------------------------------------------------------------------
# ● 近景の解放
#--------------------------------------------------------------------------
def dispose_lid
@lid.bitmap.dispose if @lid.bitmap
@lid.dispose
end
#--------------------------------------------------------------------------
# ● 遠景の更新
#--------------------------------------------------------------------------
alias lid_update_parallax update_parallax
def update_parallax
lid_update_parallax
update_lid
end
#--------------------------------------------------------------------------
# ● 近景の更新
#--------------------------------------------------------------------------
def update_lid
if @lid_name != $game_map.lid_name
@lid_name = $game_map.lid_name
@lid.bitmap.dispose if @lid.bitmap
@lid.bitmap = Cache.lid(@lid_name)
Graphics.frame_reset
end
@lid.ox = $game_map.lid_ox(@lid.bitmap)
@lid.oy = $game_map.lid_oy(@lid.bitmap)
@lid.opacity = $game_map.lid_opacity
@lid.blend_type = $game_map.lid_blend_type
end
end
复制代码
作者:
bloodyliao
时间:
2015-10-4 17:49
tseyik 发表于 2015-10-4 17:19
能说下使用方法吗?看不懂~~~~(>_<)~~~~
作者:
tseyik
时间:
2015-10-4 18:33
bloodyliao 发表于 2015-10-4 17:49
能说下使用方法吗?看不懂~~~~(>_
# ・地圖的附註欄に設定
# <近景画像 文件名>
# :指定近景として表示する画像文件
# <近景ループ横 数値>
# <近景ループ縦 数値>
# :設定捲動、自動捲動速度
# :遠景同方法設定(0不捲動)
# <近景不透明度 数値>
# :指定不透明度0~255、預設255
# <近景合成方法 加算/減算>
# :合成方法;加算/減算変更
# <近景表示位置 数値>
# :0 遠景之上、地圖元件以下
# :1 地圖元件以上、人物元件以下
# :2 人物元件以上、圖片以下(預設値)
# :3 圖片以上、文字以下
#
# ・可在事件指令中的脚本変更
# change_lid
# :削除近景画像
#
# change_lid("ファイル名")
# :指定表示近景用近景画像
#
# change_lid("ファイル名", ループ横, ループ縦)
# 指定捲動速度。
#
# change_lid("ファイル名", ループ横, ループ縦, 不透明度, 合成方法)
# 指定不透明度0~255、指定合成方法「通常」「加算」「減算」。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1