| 赞 | 7 |
| VIP | |
| 好人卡 | |
| 积分 | 8 |
| 经验 | |
| 最后登录 | 2026-7-28 |
| 在线时间 | 2068 小时 |
- 梦石
- 0
- 星屑
- 803
- 在线时间
- 2068 小时
- 注册时间
- 2011-10-3
- 回帖
- 1620
|
发表于 2014-3-31 00:09:18
|
显示全部楼层
水面反射和墙壁反射,LS提到的超级整合里的脚本
水面反射
[pre lang="ruby" line="1"]#◆◇◆◇◆ 鏡床スクリプトVXA ver 1.00 ◇◆◇◆◇
# サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
# by みんと
=begin
■ 更新履歴
○ ver 1.00(2010/11/23)
公開
■ 説明
現在キャラクターが立っている
「一歩下」のタイルが、特定のタイルだった場合、
一歩下のタイルにキャラクターの半透明の映像を映し出します。
水面などの演出に向いています。
鏡床とみなされるタイルの登録には地形タグを使用します。
タイルセットの地形タグを任意の値に設定してください。
イベントの場合は、「最初の」実行内容が
「注釈」で、注釈の内容が 鏡床描写 のみの場合、同様に映し出します。
設定していない場合は映し出さないので、
映し出したいイベントにだけ設定してください。
導入場所の注意
エイリアスで構成されていますので、
出来るだけ下のほうに導入してください。
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# 鏡床スクリプトVXを有効化 ( true で有効 / false で無効 )
RGSS["鏡床スクリプトVX"] = true
# 鏡床のタイルとして扱う地形タグのID
# キャラクターが立っている一歩下のレイヤー1~3の中で、
# 1つでも該当する地形タグがあれば鏡床を作成します
Mirror_Tile_ID = 1
# 鏡床無効のタイルとして扱う地形タグのID
# キャラクターが立っている一歩下のレイヤー1~3の中で、
# 1つでも該当する地形タグがあれば鏡床を無効化します
# 無効化タイルを使用しない場合は nil を収納してください
Not_Mirror_Tile_ID = 2
# 機能を一時的に無効化するスイッチ
# このスイッチが オン の時、機能を無効化します
Not_Mirror_Switch = 0
end
# 鏡床スクリプトVXが有効な場合に以降の処理を実行する
if MINTO::RGSS["鏡床スクリプトVX"] == true then
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
# マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
# このクラスのインスタンスは $game_map で参照されます。
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :map # マップの情報
#--------------------------------------------------------------------------
# ● 地形タグの取得
# x : 指定 X 座標
# y : 指定 Y 座標
# tag : 指定地形タグ
#--------------------------------------------------------------------------
def terrain_tag_include?(x, y, tag)
# 無効なタイルの場合
unless valid?(x, y)
# メソッドを返す
return false
end
# 全レイヤーを検索
for tile_id in layered_tiles(x, y) do
# タグを取得
t = tileset.flags[tile_id] >> 12
# 地系タグが一致した場合
if tag == t
# メソッドを返す
return true
end
end
# メソッドを返す
return false
end
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
# キャラクター表示用のスプライトです。
# Game_Character クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# ● 解放
# alias : dispose_MINTO_Mirror_Tile
#--------------------------------------------------------------------------
alias :dispose_MINTO_Mirror_Tile :dispose
def dispose
# 鏡床が存在する場合
if @mirror_tile_sprite != nil then
# 鏡床を解放
@mirror_tile_sprite.bitmap.dispose
@mirror_tile_sprite.dispose
end
# 元の処理を実行
dispose_MINTO_Mirror_Tile
end
#--------------------------------------------------------------------------
# ● 鏡床有効判定
# x : X 座標
# y : Y 座標
#--------------------------------------------------------------------------
def mirror_tile_include?(x, y)
# 目標のタイルが鏡床の場合
if $game_map.terrain_tag_include?(x, y, MINTO::Mirror_Tile_ID)
# 鏡床無効化タイルが有効な場合
unless MINTO::Not_Mirror_Tile_ID.nil?
# 鏡床が無効化されていない場合
unless $game_map.terrain_tag_include?(x, y, MINTO::Not_Mirror_Tile_ID)
# メソッドを返す
return true
end
# 無効化タイルを使用していない場合
else
# メソッドを返す
return true
end
end
# メソッドを返す
return false
end
#--------------------------------------------------------------------------
# ● 鏡床の作成
#--------------------------------------------------------------------------
def mirror_tile_set
# 鏡床が存在する場合
if @mirror_tile_sprite != nil then
# 鏡床を解放
@mirror_tile_sprite.bitmap.dispose
@mirror_tile_sprite.bitmap = nil
@mirror_tile_sprite.dispose
@mirror_tile_sprite = nil
end
# 最終ファイル名を更新
@last_tile_id = @character.tile_id
@last_character_name = @character.character_name.dup
# 鏡床用のスプライトを生成
@mirror_tile_sprite = self.dup
# 座標を調節する
@mirror_tile_sprite.y = self.y - (self.oy / 6)
@mirror_tile_sprite.z = self.z
# 色を白っぽくする
@mirror_tile_sprite.tone.red = 64
@mirror_tile_sprite.tone.green = 64
@mirror_tile_sprite.tone.blue = 64
# 半透明にする
@mirror_tile_sprite.opacity = self.opacity * 62 / 100
# 180度回転させる
@mirror_tile_sprite.angle = 180
# 左右を反転させる
@mirror_tile_sprite.mirror = (not self.mirror == true)
end
#--------------------------------------------------------------------------
# ● 鏡床の更新
#--------------------------------------------------------------------------
def update_mirror_tile
# キャラクターの現在位置を取得
x = @character.x
y = @character.y
# 元々鏡床が存在しない場合
if @mirror_tile_sprite == nil then
# メソッドを返す
return
end
# 機能が無効化されている場合
if $game_switches[MINTO::Not_Mirror_Switch] == true then
# 不可視状態にする
@mirror_tile_sprite.visible = false
# メソッドを返す
return
end
# プレイヤーの場合
unless @character.is_a?(Game_Event) then
# 機能が無効化されている場合
if $game_map.airship.driving == true then
# 不可視状態にする
@mirror_tile_sprite.visible = false
# メソッドを返す
return
end
end
# 下のタイルが鏡床以外の場合
if mirror_tile_include?(x, (y + 1)) == false then
# 鏡床を不可視状態にする
@mirror_tile_sprite.visible = false
# メソッドを返す
return
# 下のタイルが鏡床の場合
else
# Y座標補正値を初期化する
@y_plus = 6
#@mirror_tile_sprite.wave_amp = 1
#@mirror_tile_sprite.wave_length = 60
#@mirror_tile_sprite.wave_speed = 320
end
# 各情報を更新する
@mirror_tile_sprite.src_rect = self.src_rect.dup
@mirror_tile_sprite.x = self.x
@mirror_tile_sprite.y = self.y - (self.oy / 6) + @y_plus
@mirror_tile_sprite.opacity = self.opacity * 62 / 100
@mirror_tile_sprite.z = self.z - 1
@mirror_tile_sprite.visible = self.visible
@mirror_tile_sprite.update
end
#--------------------------------------------------------------------------
# ● フレーム更新
# alias : update_MINTO_Mirror_Tile
#--------------------------------------------------------------------------
alias :update_MINTO_Mirror_Tile :update
def update
# ファイル名、色相のどれかが現在のものと異なる場合
if @last_tile_id != @character.tile_id or
@last_character_name != @character.character_name
# 鏡床が存在する場合
if @mirror_tile_sprite != nil then
# 元の処理を実行
update_MINTO_Mirror_Tile
# 鏡床を再作成
mirror_tile_set
# 鏡床を更新
update_mirror_tile
# メソッドを返す
return
end
end
# 元の処理を実行
update_MINTO_Mirror_Tile
# まだ鏡床を作成していない場合
if @mirror_tile == nil then
# キャラクターがイベントの場合
if @character.is_a?(Game_Event) == true then
# 有効なイベントの場合
if @character.list != nil then
# 最初の内容が注釈の場合
if @character.list[0].code == 108 then
# 注釈の内容が「鏡床描写」だった場合
if @character.list[0].parameters == ["鏡床描写"] then
# 鏡床を作成
mirror_tile_set
# 作成済みフラグをオン
@mirror_tile = true
end
end
end
# キャラクターがプレイヤーの場合
else
# 鏡床を作成
mirror_tile_set
# 作成済みフラグをオン
@mirror_tile = true
end
end
# 鏡床を更新
update_mirror_tile
end
end
end
[/pre]
墙壁
[pre lang="ruby" line="1"]#◆◇◆◇◆ 鏡の壁スクリプトVXA ver 1.00 ◇◆◇◆◇
# サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
# by みんと
=begin
■ 更新履歴
○ ver 1.00(2010/11/28)
公開
■ 説明
鏡床スクリプトVX専用の拡張スクリプトです。
このスクリプト素材を使用する場合は、
鏡床スクリプトVXが必須となります。
キャラクターの「一歩上」のタイルが特定のタイルだった場合、
そのタイルにキャラクターの鏡写し映像を描写します。
イベントの場合は、鏡床スクリプトのものをそのまま継承します。
氷のダンジョン等に向いているかもしれません。
鏡の壁とみなされるタイルの登録には、専用のマップを別に使います。
詳しい設定方法はスクリーンショットを参照してください。
◆ 鏡の壁イベントの設定
鏡の壁とみなすイベントには、
まず移動タイプを 固定 にし、
名前に 鏡 の文字を含ませてください。
そのイベントは鏡の壁とみなされます。
(途中でそのイベントを動かしても、
鏡の壁の判定は更新されません。
あくまで絶対に動かないイベント専用の機能です)
導入場所の注意
エイリアスで構成されていますので、
出来るだけ下のほうに導入してください。
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# 鏡の壁スクリプトVXAを有効化 ( true で有効 / false で無効 )
RGSS["鏡の壁スクリプトVXA"] = true
# 鏡の壁タイルとして扱う地形タグのID
# キャラクターが立っている一歩上のレイヤー1~3の中で、
# 1つでも該当する地形タグがあれば鏡の壁を作成します
Mirror_Wall_ID = 3
# 鏡の壁無効化タイルとして扱う地形タグのID
# キャラクターが立っている一歩上のレイヤー1~3の中で、
# 1つでも該当する地形タグがあれば鏡の壁を無効化します
# 無効化タイルを使用しない場合は nil を収納してください
Not_Mirror_Wall_ID = nil
# 機能を一時的に無効化するスイッチ
# このスイッチが オン の時、機能を無効化します
Not_MirrorWall_Switch = 0
end
# 鏡の壁スクリプトVXAが有効な場合に以降の処理を実行する
if MINTO::RGSS["鏡の壁スクリプトVXA"] == true then
#==============================================================================
# ■ Game_Character (分割定義 1)
#------------------------------------------------------------------------------
# キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event
# クラスのスーパークラスとして使用されます。
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :move_type # 移動タイプ
end
#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
# イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
# イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
end
#==============================================================================
# ■ Spriteset_Map
#------------------------------------------------------------------------------
# マップ画面のスプライトやタイルマップなどをまとめたクラスです。このクラスは
# Scene_Map クラスの内部で使用されます。
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :mirror_wall # 鏡の壁イベントの位置情報
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# alias : initialize_Mirror_Wall
#--------------------------------------------------------------------------
alias :initialize_Mirror_Wall :initialize
def initialize
# 鏡の壁イベントの位置情報を定義
@mirror_wall = Table.new($game_map.map.width, $game_map.map.height)
# 元の処理を実行
initialize_Mirror_Wall
# ループ処理
for character in @character_sprites do
# キャラクターがイベントの場合
if character.character.class == Game_Event then
# キャラクターの移動タイプが固定の場合
if character.character.move_type == 0 then
# イベント名に 鏡 が含まれる場合
if character.character.event.name.include?("鏡") == true then
# 位置を取得
x = character.character.x
y = character.character.y
# 位置を保存
@mirror_wall[x, y] = 1
end
end
end
end
end
end
#==============================================================================
# ■ Sprite_Character (分割定義 2)
#------------------------------------------------------------------------------
# キャラクター表示用のスプライトです。
# Game_Character クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# ● 解放
# alias : dispose_Mirror_Wall
#--------------------------------------------------------------------------
alias :dispose_Mirror_Wall :dispose
def dispose
# 鏡が存在する場合
if @mirror_sprite != nil then
# 鏡を解放
@mirror_sprite.bitmap.dispose
@mirror_sprite.dispose
end
# 元の処理を実行
dispose_Mirror_Wall
end
#--------------------------------------------------------------------------
# ● 鏡床の作成
# alias : mirror_tile_set_Mirror_Wall
#--------------------------------------------------------------------------
alias :mirror_tile_set_Mirror_Wall :mirror_tile_set
def mirror_tile_set
# 元の処理を実行
mirror_tile_set_Mirror_Wall
# 鏡を作成
mirror_set
end
#--------------------------------------------------------------------------
# ● 鏡の作成
#--------------------------------------------------------------------------
def mirror_set
# 鏡用のスプライトを生成
@mirror_sprite = self.dup
# 座標を調節する
@mirror_sprite.y = self.y + (self.oy / 6)
@mirror_sprite.z = self.z
# 色を白っぽくする
@mirror_sprite.tone.red = 64
@mirror_sprite.tone.green = 64
@mirror_sprite.tone.blue = 64
# 不透明にする
@mirror_sprite.opacity = 0
# 左右を反転させる
@mirror_sprite.mirror = (self.mirror == false)
# タイル ID が有効な値の場合
if @tile_id >= 1 then
# メソッドを返す
return
end
# キャラクターの向きに応じて分岐
case @character.direction
# 下
when 2 then
direction = 8
# 左
when 4 then
direction = 6
# 右
when 6 then
direction = 4
# 上
when 8 then
direction = 2
end
index = @character.character_index
pattern = @character.pattern < 3 ? @character.pattern : 1
sx = (index % 4 * 3 + pattern) * @cw
sy = (index / 4 * 4 + (direction - 2) / 2) * @ch
@mirror_sprite.src_rect.set(sx, sy, @cw, @ch)
end
#--------------------------------------------------------------------------
# ● 鏡の壁有効判定
# x : X 座標
# y : Y 座標
#--------------------------------------------------------------------------
def mirror_wall_include?(x, y)
# 目標のタイルが鏡の壁の場合
if $game_map.terrain_tag_include?(x, y, MINTO::Mirror_Wall_ID)
# 鏡の壁無効化タイルが有効な場合
unless MINTO::Not_Mirror_Wall_ID.nil?
# 鏡の壁が無効化されていない場合
unless $game_map.terrain_tag_include?(x, y, MINTO::Not_Mirror_Wall_ID)
# メソッドを返す
return true
end
# 無効化タイルを使用していない場合
else
# メソッドを返す
return true
end
end
# メソッドを返す
return false
end
#--------------------------------------------------------------------------
# ● 影の更新
# alias : update_mirror_tile_Mirror_Wall
#--------------------------------------------------------------------------
alias :update_mirror_tile_Mirror_Wall :update_mirror_tile
def update_mirror_tile
# 元の処理を実行
update_mirror_tile_Mirror_Wall
# 鏡を更新
update_mirror
end
#--------------------------------------------------------------------------
# ● 鏡の更新
#--------------------------------------------------------------------------
def update_mirror
# 現在の位置を取得
x = @character.x
y = @character.y
@z_plus = -1
# 元々鏡が存在しない場合
if @mirror_sprite == nil then
# 処理を終了
return
end
# 機能が無効化されている場合
if $game_switches[MINTO::Not_MirrorWall_Switch] == true then
# 不可視状態にする
@mirror_sprite.visible = false
# メソッドを返す
return
end
# マップで無い場合
unless SceneManager.scene.is_a?(Scene_Map)
# メソッドを返す
return
end
# スプライトセットの有効判定
effective = (SceneManager.scene.spriteset != nil)
# スプライトセットが有効で、且つ一歩上に鏡の壁イベントが存在する場合
if effective and SceneManager.scene.spriteset.mirror_wall[x, y-1] == 1 then
# Y座標補正値を初期化する
@y_plus = -48
# 透明度を調節
@mirror_sprite.opacity = (@mirror_sprite.opacity + 6).to_m(160)
@z_plus = 999
#@mirror_sprite.wave_amp = 1
#@mirror_sprite.wave_length = 40
#@mirror_sprite.wave_speed = 320
# 一歩上のタイルが鏡の壁以外の場合
elsif mirror_wall_include?(x, (y - 1)) == false then
# 不透明にする
@mirror_sprite.opacity = 0
# 鏡を不可視状態にする
@mirror_sprite.visible = false
#@mirror_sprite.wave_amp = 0
#@mirror_sprite.wave_length = 0
#@mirror_sprite.wave_speed = 0
# 処理を終了
return
# 一歩上のタイルが鏡の壁の場合
else
# Y座標補正値を初期化する
@y_plus = -32
# 透明度を調節
@mirror_sprite.opacity = (@mirror_sprite.opacity + 6).to_m(160)
#@mirror_sprite.wave_amp = 0
#@mirror_sprite.wave_length = 0
#@mirror_sprite.wave_speed = 0
end
# タイル ID が有効な値の場合
if @tile_id >= 1 then
# 各情報を更新する
@mirror_sprite.src_rect = self.src_rect
@mirror_sprite.x = self.x
@mirror_sprite.y = self.y + (self.oy / 6) + @y_plus
@mirror_sprite.z = self.z - 1
@mirror_sprite.visible = self.visible
# メソッドを返す
return
end
# キャラクターの向きに応じて分岐
case @character.direction
# 下
when 2 then
direction = 8
# 左
when 4 then
direction = 6
# 右
when 6 then
direction = 4
# 上
when 8 then
direction = 2
end
# 各情報を更新する
index = @character.character_index
pattern = @character.pattern < 3 ? @character.pattern : 1
sx = (index % 4 * 3 + pattern) * @cw
sy = (index / 4 * 4 + (direction - 2) / 2) * @ch
@mirror_sprite.src_rect.set(sx, sy, @cw, @ch)
@mirror_sprite.x = self.x
@mirror_sprite.y = self.y + (self.oy / 6) + @y_plus
@mirror_sprite.z = self.z + @z_plus
@mirror_sprite.visible = self.visible
@mirror_sprite.update
end
end
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
# マップ画面の処理を行うクラスです。
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :spriteset # スプライトセット
end
end
[/pre]反射
|
|