| 赞 | 301 |
| VIP | |
| 好人卡 | |
| 积分 | 340 |
| 经验 | |
| 最后登录 | 2026-9-27 |
| 在线时间 | 1744 小时 |
- 梦石
- 20
- 星屑
- 13965
- 在线时间
- 1744 小时
- 注册时间
- 2017-1-12
- 回帖
- 1667
 
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
是这样,使用这个脚本时灯光会覆盖在图片及对话框上层。
如图,闪光的地方是原本设定在地图上的照明处,显示图片以后直接覆盖在上面了。
这是烛光图片
以下是该脚本以及相应辅助的脚本。
想问一下应该改哪里的设定让这个光不要透过图片和对话框。
[pre lang="ruby"]#◆◇◆◇◆ 明かりスクリプトVXA ver 1.00 ◇◆◇◆◇
# サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
# by みんと
=begin
※ 導入場所の注意
すべてモジュールで管理されていますので、
マスタースクリプトより下であれば導入場所は関係ありません。
■ 更新履歴
○ ver 1.00(2012/01/16)
公開
■ 説明
イベントに明かりを設定出来るようにします。
明かりは画面の色調よりも全面に出るため、
明かりの範囲内は明るく表示されます。
◆ 設定方法及び仕様
設定にはイベントの内容に
「どこでもいいので」注釈を置きます。
そして、注釈の内容を
◆ 明かり設定1
といったように"明かり設定の後"に"半角の数字"を記入してください。
記入した数字が、明かりデータの管理IDとなります。
明かりはイベントの不透明度と同期して強さが変化します。
イベントが完全に透明になれば明かりも完全に消えますので、
明かりを個別に消したい場合は、
移動ルートなどで対象イベントの不透明度を0にしてください。
また、新しいページに注釈で設定されていない場合も明かりは消えます。
◆ 画像の規格
明かりに使用する画像の規格は任意です。
ただし、1コマの規格は「画像の全体の横幅を4で割った値」となります。
つまり、640*160ピクセルの画像の場合、
1コマの規格は160*160となります。
画像は全て左から順に 0→1→2→3→0 と4コマループします。
明かり用の画像はピクチャーフォルダにインポートしてください。
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# 明かりスクリプトVXAを有効化 ( true で有効 / false で無効 )
RGSS["明かりスクリプトVXA"] = true
end
# 明かりスクリプトVXAが有効な場合に以降の処理を実行する
if MINTO::RGSS["明かりスクリプトVXA"] == true then
#==============================================================================
# ☆ カスタマイズ
#------------------------------------------------------------------------------
# 機能のカスタマイズをここで行います。
#==============================================================================
module MINTO
#--------------------------------------------------------------------------
# ● 明かりのセット
# belong_id : 明かりの管理ID
#--------------------------------------------------------------------------
def self.light_set(belong_id)
# 明かりの管理IDに応じて分岐
case belong_id
when 1 then
# data = [画像ファイル名, Y座標修正値, 大きさ(通常2。 小数点可)]
data = ["stove", 0, 6]
when 2 then
data = ["Light_Sprite02", -16, 2]
# それ以外の名前の場合
else
data = ["", 0, 1]
end
# 設定データを返す
return data.dup
end
end
#==============================================================================
# ☆ Add_Light_Sprite
#------------------------------------------------------------------------------
# Sprite_Characterクラスに機能を追加するモジュールです。
# 明かりの機能を追加します。
#==============================================================================
module Add_Light_Sprite
#--------------------------------------------------------------------------
# ● 解放(明かり)
#--------------------------------------------------------------------------
def dispose_light
# 明かりが存在する場合
if @light_sprite != nil then
# 明かりを解放
@light_sprite.bitmap.dispose
@light_sprite.dispose
@light_sprite = nil
end
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
# 明かりを解放
dispose_light
# 明かり可視フラグをクリア
@character.light_visible = false
# 明かり作成フラグをクリア
@character.call_light = false
# 最終ページ情報を解放
@character.dispose_data
# スーパークラスの処理に移行
super
end
#--------------------------------------------------------------------------
# ● 明かりの設定
# id : 明かりのID
#--------------------------------------------------------------------------
def light_set(id)
# 明かりを解放
dispose_light
# 明かりを作成
@light_sprite = Light_Sprite.new(self, id)
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# スーパークラスの処理に移行
super
# キャラクターが無効な場合
if @character == nil then
# メソッドを返す
return
end
# 明かりデータを取得
@character.get_light_data
# 明かり可視フラグが無効な場合
if @character.light_visible != true then
# 明かりを解放
dispose_light
# メソッドを返す
return
end
# 明かり作成フラグが有効な場合
if @character.call_light == true then
# 明かり作成フラグをオフにする
@character.call_light = false
# 明かりを作成
light_set(@character.light_id)
end
# 明かりが無効な場合
if @light_sprite == nil then
# メソッドを返す
return
end
# 明かりを更新
@light_sprite.update
end
end
#==============================================================================
# ☆ Add_Game_Event_Light
#------------------------------------------------------------------------------
# Game_Eventクラスに機能を追加するモジュールです。
# 明かりの機能を追加します。
#==============================================================================
module Add_Game_Event_Light
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
# スーパークラスの処理に移行
super
@last_page_light = {}
end
#--------------------------------------------------------------------------
# ● データのリセット
#--------------------------------------------------------------------------
def self.reset
@last_page_light = {}
end
#--------------------------------------------------------------------------
# ● データ解放
#--------------------------------------------------------------------------
def dispose_data
# 無効なデータの場合
if @last_page_light == nil then
# データを初期化
@last_page_light = {}
# メソッドを返す
return
end
# 自身のデータをクリア
@last_page_light[self] = nil
end
#--------------------------------------------------------------------------
# ● 拡張データの取得
#--------------------------------------------------------------------------
def get_light_data
# 無効なデータの場合
if @last_page_light == nil then
# データを初期化
@last_page_light = {}
end
# イベントページが更新されていない場合
if @last_page_light[self] == @page then
# データ未定義の場合
if self.light_visible == nil then
# 自身のデータをクリア
@last_page_light[self] = nil
end
# メソッドを返す
return
end
# 明かり可視フラグをクリア
self.light_visible = false
# 明かり作成フラグをクリア
self.call_light = false
# 最新のイベントページを記憶
@last_page_light[self] = @page
# イベントページが有効な場合
if @page != nil then
# イベントページに内容が存在する場合
if @page.list != nil then
# ループ処理(ページ内容)
(0...@page.list.size).each do |i|
# 注釈の場合
if @page.list.code == 108 or @page.list.code == 408 then
# 注釈内ループ処理
(0...@page.list.parameters.size).each do |id|
# 注釈のコードを取得
code = @page.list.parameters[id].dup.to_s
code.gsub!(/明かり設定/) {""}
# 明かりのIDを取得
light_id = code.to_i
# 明かりのIDが有効な場合
if light_id >= 1 then
# 明かりIDを記憶
self.light_id = light_id
# 明かり可視フラグをオンにする
self.light_visible = true
# 明かりを作成フラグをオンにする
self.call_light = true
# メソッドを返す
return
end
end
end
end
end
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# スーパークラスの処理に移行
super
end
end
#==============================================================================
# ■ Light_Sprite
#------------------------------------------------------------------------------
# マップでの明かりを管理するスプライトクラスです。
#==============================================================================
class Light_Sprite < Sprite
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :name # 明かりに使う画像
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# character : 対象キャラクター
# event_name : イベントの名前
#--------------------------------------------------------------------------
def initialize(character, event_name)
# スーパークラスを実行
super()
# 明かりのデータを取得
@data = MINTO.light_set(event_name)
# ファイルネームを読み込む
@name = @data[0].dup
# スプライトを保存
@character = character
# 明かり用のビットマップを作成
self.bitmap = Cache.picture(@name).dup
@width = self.bitmap.width / 4
@height = self.bitmap.height
# 基本座標をセット
self.x = @character.x
self.y = @character.y
self.z = 999
# 転移座標をセット
self.ox = @width / 2
self.oy = @height / 2
# 透明でない限りは明かりを表示させる
self.visible = (@character.opacity != 0)
# 明かりの不透明度を設定
self.opacity = (@character.opacity / 2) + 32
# 明かりを加算表示にする
self.blend_type = 1
# 明かりをズームさせる
self.zoom = @data[2]
# ブリンクカウントを初期化
@blink_count = 0
# フレーム更新
update
end
#--------------------------------------------------------------------------
# ● データのセット
# name : 設定データの名前
#--------------------------------------------------------------------------
def set_data(name)
# 設定データを更新
@data = MINTO.light_set(name)
# 明かり用のビットマップを再作成
self.bitmap = Cache.picture(@data[0]).dup
self.oy = @data[1]
self.zoom = @data[2]
end
#--------------------------------------------------------------------------
# ● ズーム
# n : ズーム倍率
#--------------------------------------------------------------------------
def zoom=(n)
self.zoom_x = n
self.zoom_y = n
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
# スーパークラスを実行
super
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# 基本情報を更新
self.x = @character.character.screen_x
self.y = @character.character.screen_y + @data[1]
# 透明でない限りは明かりを表示させる
self.visible = (@character.character.opacity != 0)
# 明かりの不透明度を設定
self.opacity = (@character.character.opacity / 2) + 32
# 点滅カウントを更新
@blink_count = (@blink_count + 1) % 48
# 転送元の矩形を設定
case @blink_count
when 0...12 then
self.src_rect.set(@width * 0, 0, @width, @height)
when 12...24 then
self.src_rect.set(@width * 1, 0, @width, @height)
when 24...36 then
self.src_rect.set(@width * 2, 0, @width, @height)
else
self.src_rect.set(@width * 3, 0, @width, @height)
end
end
end
#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
# イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
# イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Game_Event_Light) # 明かり管理モジュール
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
attr_accessor :light_id # 明かりのID
attr_accessor :light_visible # 明かり可視フラグ
attr_accessor :call_light # 明かり実行フラグ
end
#==============================================================================
# ■ Game_Vehicle
#------------------------------------------------------------------------------
# 乗り物を扱うクラスです。このクラスは Game_Map クラスの内部で使用されます。
# 現在のマップに乗り物がないときは、マップ座標 (-1,-1) に設定されます。
#==============================================================================
class Game_Vehicle < Game_Character
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Game_Event_Light) # 明かり管理モジュール
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
attr_accessor :light_id # 明かりのID
attr_accessor :light_visible # 明かり可視フラグ
attr_accessor :call_light # 明かり実行フラグ
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
# 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Game_Event_Light) # 明かり管理モジュール
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
attr_accessor :light_id # 明かりのID
attr_accessor :light_visible # 明かり可視フラグ
attr_accessor :call_light # 明かり実行フラグ
end
#==============================================================================
# ■ Game_Follower
#------------------------------------------------------------------------------
# フォロワーを扱うクラスです。フォロワーとは、隊列歩行で表示する、先頭以外の
# 仲間キャラクターのことです。Game_Followers クラスの内部で参照されます。
#==============================================================================
class Game_Follower < Game_Character
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Game_Event_Light) # 明かり管理モジュール
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
attr_accessor :light_id # 明かりのID
attr_accessor :light_visible # 明かり可視フラグ
attr_accessor :call_light # 明かり実行フラグ
end
#==============================================================================
# ■ Game_Subplayer
#------------------------------------------------------------------------------
# サブプレイヤーを扱うクラスです。
# このクラスのインスタンスは $game_subplayer1~3で参照されます。
# Game_Playerクラスを元に作っています
#==============================================================================
class Game_Subplayer < Game_Character
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Game_Event_Light) # 明かり管理モジュール
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
attr_accessor :light_id # 明かりのID
attr_accessor :light_visible # 明かり可視フラグ
attr_accessor :call_light # 明かり実行フラグ
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
# イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 場所移動
#--------------------------------------------------------------------------
alias :command_201_Light_Sprite :command_201
def command_201
# 元の処理を実行
bool = command_201_Light_Sprite
# 明かりのデータを初期化
Add_Game_Event_Light.reset
# フラグを返す
return bool
end
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
# キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを
# 監視し、スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include(Add_Light_Sprite) # 明かりモジュール
end
end
[/pre]
[pre lang="ruby"]#◆◇◆◇◆ マスタースクリプト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 p2(info)
# pメソッドを疑似的に前の仕様に戻す
msgbox(info)
end
#--------------------------------------------------------------------------
# ● 深い複製の作成
#--------------------------------------------------------------------------
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, data[j] = data[j], data
end
return data
end
#--------------------------------------------------------------------------
# ● 要素のシャッフル(破壊的)
#--------------------------------------------------------------------------
def shuffle!
# 要素をランダムに並び替える
self.each_index do |i|
j = rand(i+1)
self, self[j] = self[j], self
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
data = self[a]
return data
end
#--------------------------------------------------------------------------
# ● 要素の交換(破壊的)
# a : 要素1
# b : 要素2
#--------------------------------------------------------------------------
def change!(a, b)
# 要素を交換する(selfを直接書き換える)
self[a], self = self, 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[/pre] |
|