Project1
标题:
【默认素材】 这个阴影图片素材怎么好像系统没有使用……
[打印本页]
作者:
Ceopal
时间:
2013-8-11 11:54
标题:
【默认素材】 这个阴影图片素材怎么好像系统没有使用……
本帖最后由 Ceopal 于 2013-8-11 13:28 编辑
Shadow.jpg
(955 Bytes, 下载次数: 21)
下载附件
保存到相册
2013-8-11 11:53 上传
主角NPC好像都没有带阴影吧?
@喵呜喵5
原来如此!
@gaogs123456
好的……
(我问一句话你就这么详尽的答……辛苦了``)
作者:
喵呜喵5
时间:
2013-8-11 12:05
飞行船有
作者:
gaogs123456
时间:
2013-8-11 13:19
本帖最后由 gaogs123456 于 2013-8-11 13:24 编辑
脚本:环境主脚本(加入的原因是单独只有影描写会出错,把这个脚本放在影描写上面)
#◆◇◆◇◆ マスタースクリプトVXA ver 1.00 ◇◆◇◆◇
# サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
# by みんと
=begin
■ 更新履歴
○ Ver 1.00(2012/01/16)
公開
■ 説明
全てのみんとRGSSより上に導入してください。
(基本的にシステム上部に導入してください)
これがないと全てのみんとRGSS3は動作いたしません。
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# VXRGSSの導入環境ハッシュを初期化
RGSS = {}
end
#==============================================================================
# ☆ MINTO_System
#------------------------------------------------------------------------------
# 様々な機能を扱うシステムモジュールです。
#==============================================================================
module MINTO_System
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
@tone_rate = 0
# シーンスプライトを作成
@scene_sprite = Sprite_Base.new
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● トランジション実行
#--------------------------------------------------------------------------
def perform_transition
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● 開始後処理
#--------------------------------------------------------------------------
def post_start
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# シーンスプライトを更新
@scene_sprite.update
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● 終了前処理
#--------------------------------------------------------------------------
def pre_terminate
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
def terminate
# シーンスプライトを解放
@scene_sprite.bitmap.dispose if @scene_sprite.bitmap
@scene_sprite.dispose
@scene_sprite = nil
# スーパークラスを実行
super
end
end
# ☆ 開発用メソッド追加 ☆
#==============================================================================
# ■ Scene_Base
#------------------------------------------------------------------------------
# ゲーム中のすべてのシーンのスーパークラスです。
#==============================================================================
class Scene_Base
#--------------------------------------------------------------------------
# ● 暗転モード処理
#--------------------------------------------------------------------------
def blackout(type = 0, power = 10, max = 100, sprite = nil)
@tone_power = power
@tone_type = type
@tone_max = max
update_blackout(sprite)
end
#--------------------------------------------------------------------------
# ● フレーム更新 (暗転処理)
#--------------------------------------------------------------------------
def update_blackout(sprite)
case @tone_type
when 0
if @tone_rate != -@tone_max
@tone_rate = [@tone_rate - @tone_power, -@tone_max].max
sprite.tone.red = @tone_rate
sprite.tone.green = @tone_rate
sprite.tone.blue = @tone_rate
end
when 1
if @tone_rate != 0
@tone_rate = [@tone_rate + @tone_power, 0].min
sprite.tone.red = @tone_rate
sprite.tone.green = @tone_rate
sprite.tone.blue = @tone_rate
end
end
end
end
#==============================================================================
# ■ Object
#------------------------------------------------------------------------------
# 全てのクラスのスーパークラス。オブジェクトの一般的な振舞いを定義します。
#==============================================================================
class Object
#--------------------------------------------------------------------------
# ● 深い複製の作成
#--------------------------------------------------------------------------
def dec
# Marshalもモジュールを経由して、完全な複製を作成
return Marshal.load(Marshal.dump(self))
end
end
#==============================================================================
# ■ NilClass
#------------------------------------------------------------------------------
# nil のクラス。nil は NilClass クラスの唯一のインスタンスです。
#==============================================================================
class NilClass
#--------------------------------------------------------------------------
# ● デバイスの取得
#--------------------------------------------------------------------------
def to_d
return "BGM"
end
end
#==============================================================================
# ■ String
#------------------------------------------------------------------------------
# 文字列クラス。任意の長さのバイト列を扱うことができます。
#==============================================================================
class String
#--------------------------------------------------------------------------
# ● デバイスの取得
#--------------------------------------------------------------------------
def to_d
return self
end
end
#==============================================================================
# ■ Audio
#------------------------------------------------------------------------------
# ミュージック、サウンドにかかわる処理を行うモジュールです。
#==============================================================================
module Audio
#--------------------------------------------------------------------------
# ● 音楽の解放
#--------------------------------------------------------------------------
def self.dispose
#self.bgs_stop
self.me_stop
self.bgm_stop
end
end
#==============================================================================
# ■ Sprite
#------------------------------------------------------------------------------
# スプライト表示を扱う組み込みクラスです。
#==============================================================================
class Sprite
#--------------------------------------------------------------------------
# ● 座標の設定
#--------------------------------------------------------------------------
def rect_set(x, y, z = 100)
self.x = x if x
self.y = y if y
self.z = z if z
end
#--------------------------------------------------------------------------
# ● データの取得
#--------------------------------------------------------------------------
def data_copy(data)
return if data.disposed? or self.disposed?
# 各データをコピー
self.x = data.x
self.y = data.y
self.z = data.z-1
self.visible = data.visible
self.ox = data.ox
self.oy = data.oy
self.angle = data.angle
self.mirror = data.mirror
self.src_rect = data.src_rect.dup
self.zoom_x = data.zoom_x
self.zoom_y = data.zoom_y
end
#--------------------------------------------------------------------------
# ● 残像用の複製の作成
#--------------------------------------------------------------------------
def blink
# 各データをコピー
sprite = Sprite.new(self.viewport)
sprite.bitmap = self.bitmap.dup if self.bitmap
sprite.x = self.x
sprite.y = self.y
sprite.z = self.z-1
sprite.visible = false
sprite.ox = self.ox
sprite.oy = self.oy
sprite.angle = self.angle
sprite.mirror = self.mirror
sprite.opacity = self.opacity - 95
sprite.blend_type = 1
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
#--------------------------------------------------------------------------
# ● 複製の作成
#--------------------------------------------------------------------------
def dup
# 各データをコピー
sprite = Sprite.new(self.viewport)
sprite.bitmap = self.bitmap.dup if self.bitmap
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
#--------------------------------------------------------------------------
# ● センタリング
#--------------------------------------------------------------------------
def centering
return if self.bitmap == nil
self.x = (640 - (self.bitmap.width * self.zoom_x)) / 2
self.y = (480 - (self.bitmap.height * self.zoom_y)) / 2
end
#--------------------------------------------------------------------------
# ● ズーム
#--------------------------------------------------------------------------
def zoom=(n)
zoom_x = n
zoom_y = n
end
#--------------------------------------------------------------------------
# ● エフェクト表示中判定
#--------------------------------------------------------------------------
def effect?
return false
end
end
#==============================================================================
# ■ Array
#------------------------------------------------------------------------------
# 配列全般を扱う組み込みクラスです。
#==============================================================================
class Array
#--------------------------------------------------------------------------
# ● 要素の一次元化
#--------------------------------------------------------------------------
def divide
array = []
# データを複製
data = self.dup
# 要素の一次元化
data.each do |i|
if i.is_a?(Array)
for a in i
array.push(a)
end
else
array.push(i)
end
end
return array
end
#--------------------------------------------------------------------------
# ● 要素のシャッフル
#--------------------------------------------------------------------------
def shuffle
# データを複製
data = self.dup
# 要素をランダムに並び替える
data.each_index do |i|
j = rand(i+1)
data[i], data[j] = data[j], data[i]
end
return data
end
#--------------------------------------------------------------------------
# ● 要素のシャッフル(破壊的)
#--------------------------------------------------------------------------
def shuffle!
# 要素をランダムに並び替える
self.each_index do |i|
j = rand(i+1)
self[i], self[j] = self[j], self[i]
end
end
#--------------------------------------------------------------------------
# ● 要素をランダムに返す
#--------------------------------------------------------------------------
def get_rand
return self[rand(self.size)]
end
#--------------------------------------------------------------------------
# ● 要素の交換
# a : 要素1
# b : 要素2
#--------------------------------------------------------------------------
def change(a, b)
# データを複製
data = self.dup
# 要素を交換する(self自体には変化がない)
data[a] = self[b]
data[b] = self[a]
return data
end
#--------------------------------------------------------------------------
# ● 要素の交換(破壊的)
# a : 要素1
# b : 要素2
#--------------------------------------------------------------------------
def change!(a, b)
# 要素を交換する(selfを直接書き換える)
self[a], self[b] = self[b], self[a]
end
end
#==============================================================================
# ■ Numeric
#------------------------------------------------------------------------------
# 数値全般を扱う組み込みクラスです。
#==============================================================================
class Numeric
#--------------------------------------------------------------------------
# ● 乱数の設定
# n : 乱数値
#--------------------------------------------------------------------------
def amp(n)
amp = (self.abs * n / 100).to_min(1)
return self + rand(amp+1) + rand(amp+1) - amp
end
#--------------------------------------------------------------------------
# ● 値の調整
# order : 求められた値
# size : 最大サイズ
#--------------------------------------------------------------------------
def select(order, size)
if self - order <= -1
return size
elsif self + order >= size
return 0
else
return self + order
end
end
#--------------------------------------------------------------------------
# ● 最大値の設定
# max : 求められた最大の数値
#--------------------------------------------------------------------------
def to_max(min, max)
if self > max
return max
elsif self < min
return min
else
return self
end
end
#--------------------------------------------------------------------------
# ● 最大値の設定
# max : 求められた最大の数値
#--------------------------------------------------------------------------
def to_m(max)
if self > max
return max
else
return self
end
end
#--------------------------------------------------------------------------
# ● 最小値の設定
# min : 求められた最小の数値
#--------------------------------------------------------------------------
def to_min(min)
if self < min
return min
else
return self
end
end
#--------------------------------------------------------------------------
# ● 範囲内から乱数を得る
# min : 求められた最小の数値
#--------------------------------------------------------------------------
def mm_rand(min)
return rand(self - min + 1) + min
end
#--------------------------------------------------------------------------
# ● 求めた数値に対するパーセンテージを返す
# order : 求められた数値
#--------------------------------------------------------------------------
def rate(order)
return 100 if order == 0
return (self * 100) / order
end
end
#==============================================================================
# ■ Window
#------------------------------------------------------------------------------
# ゲーム内の全てのウィンドウのスーパークラスです。
# 内部的には複数のスプライトで構成されています。
#==============================================================================
class Window
#--------------------------------------------------------------------------
# ● 暗転モード処理
#--------------------------------------------------------------------------
def blackout(type = 0, power = 10, max = 100, sprite = @win_viewport)
@tone_power = power
@tone_type = type
@tone_max = max
update_blackout(sprite)
end
#--------------------------------------------------------------------------
# ● フレーム更新 (暗転処理)
#--------------------------------------------------------------------------
def update_blackout(sprite = @win_viewport)
case @tone_type
when 0
if @tone_rate != -@tone_max
@tone_rate = [@tone_rate - @tone_power, -@tone_max].max
sprite.tone.red = @tone_rate
sprite.tone.green = @tone_rate
sprite.tone.blue = @tone_rate
end
when 1
if @tone_rate != 0
@tone_rate = [@tone_rate + @tone_power, 0].min
sprite.tone.red = @tone_rate
sprite.tone.green = @tone_rate
sprite.tone.blue = @tone_rate
end
end
end
#--------------------------------------------------------------------------
# ● ウィンドウの右寄せ
#--------------------------------------------------------------------------
def right(x)
# ウィンドウを画面の右に配置する
self.x = (x - self.width)
end
#--------------------------------------------------------------------------
# ● ウィンドウの下寄せ
#--------------------------------------------------------------------------
def down(y)
# ウィンドウを画面の右に配置する
self.y = (480 - self.height - y)
end
#--------------------------------------------------------------------------
# ● ウィンドウのセンタリング
#--------------------------------------------------------------------------
def centering
# ウィンドウを画面の中央に配置する
self.x = (640 - self.width) / 2
self.y = (480 - self.height) / 2
end
end
复制代码
脚本:影描写
#◆◇◆◇◆ 影描写スクリプトVXA ver 1.00 ◇◆◇◆◇
# 全マスタースクリプト共通スクリプト
# サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
# by みんと
=begin
■ 更新履歴
○ ver 1.00(2012/01/21)
公開
■ 説明
キャラクターに影を描写します。
プレイヤーの場合は自動で、
イベントの場合は名前に 影 の文字が含まれていれば影を描写します。
影はグラフィックが存在しない場合は描写しません。
画像はピクチャーフォルダにインポートしてください。
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# 影描写スクリプトVXAを有効化 ( true で有効 / false で無効 )
RGSS["影描写スクリプトVXA"] = true
end
# 影描写スクリプトVXAが有効な場合に以降の処理を実行する
if MINTO::RGSS["影描写スクリプトVXA"] == true then
#==============================================================================
# ■ Sprite_Shadow_Module
#------------------------------------------------------------------------------
# 影表示用のスプライトです。
# Game_Character クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================
module Sprite_Shadow_Module
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
# 影が存在する場合
unless @character_shadow.nil? then
# 影を解放
@character_shadow.bitmap.dispose
@character_shadow.dispose
end
# 継承先の処理に移行
super
end
#--------------------------------------------------------------------------
# ● 影の作成
#--------------------------------------------------------------------------
def character_shadow_set
# 影用のスプライトを生成
@character_shadow = Sprite.new(self.viewport)
# 影用の画像を読み込む
@character_shadow.bitmap = Cache.picture("Shadows")
# 影を半透明にする
@character_shadow.opacity = (self.character.opacity / 1)
# 座標を調節する
@shadow_size = @character_shadow.bitmap.width
@character_shadow.zoom_x = ((@cw * 100) / @shadow_size) / 100.0
@character_shadow.zoom_y = @character_shadow.zoom_x
ox_rate = ((32 * 100) / @cw) / 100.0
oy_rate = ((48 * 100) / @ch) / 100.0
@character_shadow.ox = self.ox * ox_rate
@character_shadow.oy = ((self.oy * oy_rate) / 2) - 4
@last_character_name = @character_name.dup
# 影を更新
update_character_shadow
end
#--------------------------------------------------------------------------
# ● 影の更新
#--------------------------------------------------------------------------
def update_character_shadow
# 元々影が存在しない場合
if @character_shadow == nil then
# 処理を終了
return
end
# 解放済みの場合
unless @character_shadow.bitmap.nil?
if @character_shadow.bitmap.disposed? then
# 処理を終了
return
end
end
# ジャンプ中の場合
if @character.jumping? then
# 影を非表示にする
@character_shadow.visible = false
# 処理を終了
return
end
# タイル ID、ファイル名、色相のどれかが現在のものと異なる場合
if @last_character_name_shadow != @character_name
@last_character_name_shadow = @character_name
# 座標を調節する
@shadow_size = @character_shadow.bitmap.width
@character_shadow.zoom_x = ((@cw * 100) / @shadow_size) / 100.0
@character_shadow.zoom_y = @character_shadow.zoom_x
@zoom_ox = @character_shadow.zoom_x
@zoom_oy = @character_shadow.zoom_y
ox_rate = ((32 * 100) / @cw) / 100.0
oy_rate = ((48 * 100) / @ch) / 100.0
@character_shadow.ox = self.ox * ox_rate
@character_shadow.oy = ((self.oy * oy_rate) / 2) - 4
end
# 各情報を更新する
@character_shadow.x = self.x
@character_shadow.y = self.y
@character_shadow.zoom_x = @zoom_ox * self.zoom_x
@character_shadow.zoom_y = @zoom_oy * self.zoom_y
@character_shadow.visible = (self.visible and @character_name != "")
@character_shadow.opacity = (self.character.opacity / 1)
end
end
#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
# イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
# イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
# キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを
# 監視し、スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Sprite_Shadow_Module) # 影描写モジュール
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# character : キャラクター (Game_Character)
#--------------------------------------------------------------------------
alias :MINTO_Character_Shadow_initialize :initialize
def initialize(viewport, character = nil)
# 元の処理を実行
MINTO_Character_Shadow_initialize(viewport, character)
# キャラクターのタイプに応じて分岐
case @character
# プレイヤー
when Game_Player then
# 影を作成
character_shadow_set
# フォロワー
when Game_Follower then
# 影を作成
character_shadow_set
# イベント
when Game_Event then
# イベントの名前に 影 が含まれている場合
if @character.event.name.include?("影") == true then
# 影を作成
character_shadow_set
end
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias :update_MINTO_Character_Shadow :update
def update
# 元の処理を実行
update_MINTO_Character_Shadow
# 影を更新
update_character_shadow
end
end
end
复制代码
主角的影子不用设置,脚本69行 @character_shadow.bitmap = Cache.picture("Shadows")
影子图放在picture文件夹里,括号里的文件夹名自己也可以定义。
给事件加影子的方法,左上角的名称里标上 ["影描写スクリプトVXA"] = true 是不是很长?我表示不知道该怎么改短。
如果想更改影子的显示位置,用PS上下左右移动影子图微调也行。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1