Project1
标题:
[求助]RGSS的使用
[打印本页]
作者:
jiejie596
时间:
2010-12-20 19:48
标题:
[求助]RGSS的使用
#◆◇◆◇◆ リアル・シャドウシステム ver 1.14 ◇◆◇◆◇
# サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
# by みんと
=begin
更新履歴
ver 1.14
RTAB(歯車の城)に再対応。
ver 1.13
RTAB(歯車の城)にも対応。
ver 1.12
前回更新時のミスを修正。
ver 1.11
途中出現のエネミーにも
影が表示されていたミスを修正。
ver 1.10
アクターにも設定できるように改良。
ver 1.01
スプライト解放時のミスを修正。
説明
バトラーのグラフィックから、
影を作成し、自動描写するスクリプトです。
通常タイプ、浮遊タイプ、影無しを敵ごとに設定できます。
浮遊タイプの場合、バトラーグラフィックは上下に動き
浮遊している感じに演出され、
影も、バトラーが下に動けば大きくなり、
上に動けば小さくなります。
通常タイプの場合はバトラーの動きにあわせて動きます。
セクション指定上下関係
コラプス改造α
↓
反転表示バトラー
↓
このスクリプト
導入場所の注意
上記の条件をクリアし、且つシステム下部推奨
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# リアル・シャドウシステムを有効化 ( true で有効 / false で無効 )
RGSS["Real_Shadow"] = true
# 影を描写しない背景の名前の配列
# 戦闘背景のグラフィック名がこの配列の中に存在する場合は、
# 影が描写されません。
Not_Shadow_Back_Array = []
end
if MINTO::RGSS["Real_Shadow"] == true then
#==============================================================================
# ☆ カスタマイズ
#------------------------------------------------------------------------------
# 機能のカスタマイズを行います。
#==============================================================================
module Battler_Shadow
#--------------------------------------------------------------------------
# ● 影の作成パターンの設定
#--------------------------------------------------------------------------
def shadow_pattern
# 説明
# @shadow_x と @shadow_y は影の倍率です。
# 1 の場合は本来のバトラーグラフィックと同じ大きさになります。
# @shadow_x は横ズーム率
# @shadow_y は縦ズーム率です。
# 設定がよく分からない場合は
# 浮遊敵でない場合は
# @shadow_x = 1.35
# @shadow_y = 0.25 を
# 逆に浮遊敵の場合は
# @shadow_x = 0.65
# @shadow_y = 0.12 が開発者的にベストです。
# @shadow_oy は影の縦の描写位置の補正値です
# 本来のバトラーグラフィックの「余白」次第では、
# 影の位置に違和感が生じるので、その際はここで微調節してください。
# 整数なら下に負数なら上に補正されます。
# 浮遊敵なら128と言った感じでかなり下の方に設定すれば、
# リアルな感じになります。
# @float は浮遊フラグです。
# true でオン false でオフです。
# オンにすると敵は上下に、ゆっくり移動を繰り返します。
# その際、影もそれに合わせて大きくなったり、小さくなったりします。
# 影そのものを表示したくない敵の場合は
# @float に nil を代入してください。
#在这里设定特例!!!!!!!!!!!!!!!!!!!!!!!
# エネミーの名前によって分岐
case @battler.name
# 通常タイプサンプル設定
when "幽灵" then
# 影のパターンを設定
@shadow_x = 1.35
@shadow_y = 0.25
@shadow_oy = 0
@float = false
# 浮遊敵サンプル設定
when "巨大蜂" then
# 影のパターンを設定
@shadow_x = 0.65
@shadow_y = 0.12
@shadow_oy = 128
@float = true
# それ以外のエネミーの場合
else
# 影のパターンを設定
@shadow_x = 1.35
@shadow_y = 0.25
@shadow_oy = 0
@float = false
end
end
end
#==============================================================================
# ■ Sprite
#------------------------------------------------------------------------------
# スプライト表示を扱う組み込みクラスです。
#==============================================================================
class Sprite
#--------------------------------------------------------------------------
# ● 複製の作成
#--------------------------------------------------------------------------
def dup
# 各データをコピー
sprite = Sprite.new(self.viewport)
sprite.bitmap = self.bitmap.dup if self.bitmap != nil
sprite.x = self.x
sprite.y = self.y
sprite.z = self.z
sprite.visible = self.visible
sprite.ox = self.ox
sprite.oy = self.oy
sprite.angle = self.angle
sprite.mirror = self.mirror
sprite.opacity = self.opacity
sprite.blend_type = self.blend_type
sprite.color = self.color.dup
sprite.src_rect = self.src_rect.dup
sprite.zoom_x = self.zoom_x
sprite.zoom_y = self.zoom_y
return sprite
end
end
#==============================================================================
# ☆ Battler_Shadow
#------------------------------------------------------------------------------
# 影の演出を管理するシステムモジュールです。
#==============================================================================
module Battler_Shadow
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
# 元の処理を実行
super
# 影が存在する場合
if @shadow_sprite != nil then
# 影を解放
@shadow_sprite.bitmap.dispose
@shadow_sprite.dispose
end
end
#--------------------------------------------------------------------------
# ● バトラーグラフィックの描写
#--------------------------------------------------------------------------
def bitmap_set
# ビットマップを取得、設定
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
@width = bitmap.width
@height = bitmap.height
self.ox = @width / 2
self.oy = @height
# バトラーがエネミーの場合
if @battler.is_a?(Game_Enemy) then
# 高さを設定
@battler.height = @height
end
# 戦闘不能または隠れ状態なら不透明度を 0 にする
if @battler.dead? or @battler.hidden then
self.opacity = 0
end
end
#--------------------------------------------------------------------------
# ● Y座標の取得
#--------------------------------------------------------------------------
def y
# スパークラスを実行
bool = super
# アニメーション表示中の場合
if (@_animation_duration >= 1) or (@_animation.to_a.size >= 1) then
# もともとのY座標を返す
return bool
end
# Y座標に補正値をプラスして返す
return bool + @y_plus
end
#--------------------------------------------------------------------------
# ● Y座標の変更
#--------------------------------------------------------------------------
def y=(n)
# アニメ表示中の場合で、且つ位置に変化がない場合
# 又はコラプス実行中で位置に変化がない場合
if ((@_animation_duration >= 1 or
@_animation.to_a.size >= 1) and n == @battler.screen_y) or
(@_collapse_duration >= 1 and n == @battler.screen_y)
# メソッドを返す
return
else
# スーパークラスを実行
super(n)
end
end
#--------------------------------------------------------------------------
# ● 影の更新可能フラグの取得
#--------------------------------------------------------------------------
def shadow_update_ok?
# バトラーが存在する場合
@battler.exist? or
# 又は、コラプス実行中かアニメ表示中でない場合
(@_collapse_duration > 0 or @_animation_duration == 0) or
(@_animation.to_a.size >= 1)
end
#--------------------------------------------------------------------------
# ● 影の作成
#--------------------------------------------------------------------------
def shadow_set
# バトラーがエネミーの場合
if @battler.is_a?(Game_Enemy) == true then
# パターンを取得
shadow_pattern
end
# @float が nil の場合
if @float == nil then
# 処理を返す
return
end
# 影用のスプライトを生成
@shadow_sprite = self.dup
# 座標を調節する
@shadow_sprite.y = @battler.screen_y - (self.oy / 8) + @shadow_oy
# 色を黒にする
@shadow_sprite.tone.red = -250
@shadow_sprite.tone.green = -250
@shadow_sprite.tone.blue = -250
# バトラーが存在しない場合
if not @battler.exist? then
# 不透明にする
@shadow_sprite.opacity = 0
# バトラーが存在する場合
else
# 半透明にする
@shadow_sprite.opacity = 160
end
# 180度回転させる
@shadow_sprite.angle = 180
# 左右を反転させる
@shadow_sprite.mirror = (!self.mirror == true)
# 横長にズームさせる
@shadow_sprite.zoom_x *= @shadow_x
@shadow_sprite.zoom_y *= @shadow_y
end
#--------------------------------------------------------------------------
# ● 影の更新(分岐)
# force : 強制更新フラグ( true / false )
#--------------------------------------------------------------------------
def update_shadow_base(force = false)
# 強制更新か、もしくは影の更新が可能な場合
if force == true or shadow_update_ok? then
# 浮遊フラグがオンの場合
if @float == true then
# 補正値が8以上の場合
if @y_plus >= 8 then
# 補正値を逆転
@plus *= -1
# 補正値が-8以下の場合
elsif @y_plus <= -8 then
# 補正値を逆転
@plus *= -1
end
# 浮遊補正値を加算
@y_plus += @plus
# アニメ表示中でない場合
if @_animation_duration == 0 then
# Y座標に補正値を加算
self.y += @plus - @y_plus / 2
end
# 影が存在する場合
if @shadow_sprite != nil then
# 影を更新(浮遊敵用)
update_shadow_float
end
else
# 影が存在する場合
if @shadow_sprite != nil then
# 影を更新(通常敵用)
update_shadow
end
end
end
end
#--------------------------------------------------------------------------
# ● 影の更新
#--------------------------------------------------------------------------
def update_shadow
# 各情報を更新する
@shadow_sprite.x = self.x
@shadow_sprite.y = self.y - (self.oy / 8) + @shadow_oy
@shadow_sprite.opacity = self.opacity - 95
@shadow_sprite.zoom_x = (self.zoom_x * @shadow_x)
@shadow_sprite.zoom_y = (self.zoom_y * @shadow_y)
end
#--------------------------------------------------------------------------
# ● 影の更新(浮遊敵)
#--------------------------------------------------------------------------
def update_shadow_float
# 本来のY座標との差を求める
plus = (self.y * 100) / @battler.screen_y
# 各情報を更新する
@shadow_sprite.x = self.x
@shadow_sprite.opacity = self.opacity - 95
@shadow_sprite.zoom_x = (self.zoom_x * @shadow_x) * plus / 100
@shadow_sprite.zoom_y = (self.zoom_y * @shadow_y) * plus / 100
end
end
#==============================================================================
# ■ Game_Battler (分割定義 1)
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :height # 高さ
end
#==============================================================================
# ■ Sprite_Battler
#------------------------------------------------------------------------------
# バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Battler_Shadow) # バトラーシャドウ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport : ビューポート
# battler : バトラー (Game_Battler)
# alias : initialize_MINTO_Real_Shadow
#--------------------------------------------------------------------------
alias initialize_MINTO_Real_Shadow initialize
def initialize(viewport, battler = nil)
# 影用の情報を初期化
@y_plus = 0
@plus = 1
# 元の処理を実行
initialize_MINTO_Real_Shadow(viewport, battler)
# 現在の戦闘背景の名前を取得
name = $game_temp.battleback_name
# 戦闘背景の条件をクリアしている場合
if not MINTO::Not_Shadow_Back_Array.include?(name) then
# バトラーが有効な場合
if (@battler != nil and @battler.is_a?(Game_Enemy)) then
# バトラーグラフィックを描写
bitmap_set
# 影を作成
shadow_set
end
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
# alias : update_MINTO_Real_Shadow
#--------------------------------------------------------------------------
alias update_MINTO_Real_Shadow update
def update
# 元の処理を実行
update_MINTO_Real_Shadow
# バトラーが有効な場合
if (@battler != nil and @battler.is_a?(Game_Enemy)) then
# 影を更新
update_shadow_base
end
end
#--------------------------------------------------------------------------
# ● バトラーの変更
# battler : 新しいバトラー
#--------------------------------------------------------------------------
def battler=(battler)
@battler = battler
# バトラーが有効な場合
if (@battler != nil and @battler.is_a?(Game_Enemy)) then
# バトラーグラフィックを描写
bitmap_set
# 影を作成
shadow_set
end
end
end
end
复制代码
例如这个脚本中的.
# リアル・シャドウシステムを有効化 ( true で有効 / false で無効 )
RGSS["Real_Shadow"] = true
我直接将此脚本放入我的游戏.可是会跳出错误窗口.
RGSS这里该怎么使用呢?
作者:
fux2
时间:
2010-12-20 23:03
回复
jiejie596
的帖子
这一句是判断是否缺少模块。= =.
直接放进去就可以了。。
作者:
jiejie596
时间:
2010-12-21 20:00
本帖最后由 jiejie596 于 2010-12-21 20:09 编辑
直接放进去会有错误诶~
+图:
error.JPG
(5.77 KB, 下载次数: 8)
下载附件
保存到相册
2010-12-21 20:09 上传
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1