Project1
标题:
这个标题脚本怎么用?
[打印本页]
作者:
江边酒家
时间:
2015-3-28 11:48
标题:
这个标题脚本怎么用?
#==============================================================================
# ■ VXAce-RGSS3-17 タイトルカスタマイズ [Ver.1.0.0] by Claimh
#------------------------------------------------------------------------------
# タイトル表示時の付属機能の詰め合わせ
#==============================================================================
module Title
#--------------------------------------------------------------------------
# ● 跳过标题
#--------------------------------------------------------------------------
# いつもニューゲームから始める
SKIP_ALL = false
# セーブファイルがなければニューゲームから始める
SKIP_NEWGAME = false
# セーブファイルがあればコンティニュー、なければニューゲームから始める
SKIP_CONTINUE = false
#--------------------------------------------------------------------------
# ● 一般设置标题显示
#--------------------------------------------------------------------------
# トランジション(nil:画像なし)
TITLE_TRN = nil #"Graphics/System/cc_transition2"
#--------------------------------------------------------------------------
# ● 设置主标题
#--------------------------------------------------------------------------
# 表示位置
# Rect#x, y : 表示位置(-1にすると中央表示)
# Rect#width : x=-1の時にずらす幅
# Rect#height : y=-1の時にずらす高さ
TM_RECT = Rect.new(-1, -1, 0, 0)
# 表示タイプ(true:テキスト false:画像)
TM_TYPE = true
# タイトル画像名(Graphics/System) ※TM_TYPE=falseの場合のみ
TM_NAME = "main_title"
# フォント設定
def self.set_main_bitmap(bitmap)
bitmap.font.size = 48
bitmap
end
#--------------------------------------------------------------------------
# ● 字幕设置
#--------------------------------------------------------------------------
# サブタイトル表示有効?(true:有効 false:無効)
TS = false
# 表示位置
# Rect#x, y : 表示位置(-1にすると中央表示)
# Rect#width : x=-1の時にずらす幅
# Rect#height : y=-1の時にずらす高さ
TS_RECT = Rect.new(-1, -1, 0, 40)
# 表示タイプ(true:テキスト false:画像)
# ※ フォントの設定はTitle#create_sub_bitmapに記述してください
TS_TYPE = true
# タイトル名 or タイトル画像名(Graphics/System)
TS_NAME = "sub_title"
# フォント設定
def self.set_sub_bitmap(bitmap)
bitmap.font.size = 48
bitmap
end
#--------------------------------------------------------------------------
# ● 命令设置标题
#--------------------------------------------------------------------------
# コマンドの表示順設定
# 0: ニューゲーム (Vocab::new_game)
# 1: コンティニュー (Vocab::continue)
# 2: シャットダウン (Vocab::shutdown)
# 3以降 : 拡張コマンド(EXCMDで設定)
CMD_BOX = [0, 1, 3, 2]
# 拡張コマンド設定
# ※ 表示ON・OFFは Title#excmd_enable? で設定して下さい
EXCMD = {
# コマンド番号 => ["コマンド名", シーンクラス名, シンボル名]
# 3 => ["ギャラリー", Scene_ExGarally, :garally]
# 4 => ["オプション", Scene_Option, :option]
}
# 拡張コマンドの表示可否設定
def self.excmd_enable?(cmd)
case cmd # コマンド番号
when 3; return true
when 4; return true
end
true
end
# 表示位置
# Rect#x, y : 表示位置(-1にすると中央表示)
# Rect#width : コマンド並びのズレ幅
# Rect#height : コマンドの高さ
CMD_RECT = Rect.new(-1, -1, 0, 24)
# 背景透明度設定
def self.cmd_window_opacity(window)
window.opacity = 255
window.back_opacity = 160
window
end
# スロット式表示
# (注) 文字かつカーソルフィット時は使用不可
CMD_SLOT = false
# スロット式表示時にすべての項目を表示する
CMD_SLOT_ALL = true
# コマンドタイプ(true:テキスト false:画像)
CMD_TYPE = true
#--<テキストコマンド設定>--#
# テキストの表示方法
# 0..左揃え 1..中央 2..右揃え
CT_ALIGN = 1
# カーソル幅を文字幅にフィットさせる
CT_CUR_FIT = false
# フォント設定
def self.set_cmd_bitmap(bitmap)
bitmap.font.size = 22
bitmap
end
#--<画像コマンド設定>--#
# カーゾルが当たってるときに画像チェンジ(true:有効 false:無効)
CMD_CHNG = true
# 画像ファイル(Graphics/System)
# (注)コマンド用の画像は全て同じサイズ(幅、高さ)にしてください。
CMD_GRPHIC = {
# コマンド番号 => [画像1, 画像2]
0 => ["newgame", "newgame_s"],
1 => ["continue", "continue_s"],
2 => ["shutdown", "shutdown_s"]
}
# カーゾル消去
DISABLE_CURSOR = false
#--------------------------------------------------------------------------
# ● 天气设定
#--------------------------------------------------------------------------
# 天候エフェクト
# :none ..なし(晴れ)
# :rain ..雨
# :storm ..嵐
# :snow ..雪
WEATHER_TYPE = :none
# 天候エフェクトの量(0..40)
WEATHER_POWER = 0
# タイトル表示時のBGS(nil:不要)
BGS = nil #RPG::BGS.new("Rain", 100, 100)
#--------------------------------------------------------------------------
# ● 淡入
#--------------------------------------------------------------------------
# フェードインパターン
# 0:フェードなし
# 1:メインタイトル+サブタイトル+コマンド
# 2:メインタイトル+サブタイトル → コマンド
FADEIN_PATTERN = 1
# フェードイン時間(フレーム数)
# (例1)60に設定した場合
# パターン0 => 60
# パターン1 => 60 + 60
FADEIN_TIME = 60
#--------------------------------------------------------------------------
# ● 超时设置
#--------------------------------------------------------------------------
# タイムアウト機能
TIME_OUT = false
# タイムアウト発生フレーム数
TIME_OUT_CNT = 6000
#--------------------------------------------------------------------------
# ● 背景图设置
#--------------------------------------------------------------------------
# タイトル背景にマップを使用する
TB_MAP = true
# 表示するマップID
TB_MAP_ID = 70
# 表示するマップ位置(Rect#width/heightは未参照)
TB_MAP_POS = Rect.new(19, 28, 0, 0)
# 背景2(手前)を表示する
TB_MAP_2 = false
#--------------------------------------------------------------------------
# ● 背景设定
#--------------------------------------------------------------------------
# 背景については [背景1(奥), 背景2(手前)] の形式で個々に指定して下さい。
#--------------------------------------------------------------------------
# (注) マップ背景のスクロール等はイベントで実行して下さい
#--------------------------------------------------------------------------
# タイトル背景のズーム
TB_FIT = [true, true]
# 背景原点
# 0, 5 : 中央
# 7(左上) | 8(上) | 9(右上)
# 4(左) | 5(―) | 6(右)
# 1(左下) | 2(下) | 3(右下)
TB_BASE = [5, 5]
# タイトルグラフィックのスクロール設定
# true : スクロール有り
# false : スクロール無し
SCROLL_TG = [false, false]
# スクロール方向
# 0, 5 : 変更なし
# 7(左上) | 8(上) | 9(右上)
# 4(左) | 5(―) | 6(右)
# 1(左下) | 2(下) | 3(右下)
SCROLL_DIR = [8, 5]
# スクロール速さ(1frame単位で移動させる位置)
SCROLL_SPD = [1, 1]
# 画像境界でスクロールを止める
# ※ 画面サイズより大きな画像を用意してください。
# また、TB_BASEとSCROLL_DIRの値は反対の位置に設定して下さい。
SCROLL_STOP = [true, false]
end
复制代码
作者:
江边酒家
时间:
2015-3-28 11:49
定制标题主要部分
#==============================================================================
# ■ VXAce-RGSS3-17 タイトルカスタマイズ [main] by Claimh
#==============================================================================
#==============================================================================
# ■ Title
#==============================================================================
module Title
#--------------------------------------------------------------------------
# ● スキップコマンド : C, B, 方向キー
#--------------------------------------------------------------------------
def self.skip_trigger?
(Input.trigger?(:C) or Input.trigger?(:B) or Input.dir4 > 0)
end
end
#==============================================================================
# ■ Title::Scene
#==============================================================================
module Title::Scene
S_START = 0 # 起動
S_LOGO = 1 # ロゴシーン
S_DEMO = 2 # イベントデモ
S_TITLE = 3 # タイトル
#--------------------------------------------------------------------------
# ● ロゴシーンの有無
#--------------------------------------------------------------------------
def self.enable_logo(timeout=false)
false
end
#--------------------------------------------------------------------------
# ● イベントシーンの有無
#--------------------------------------------------------------------------
def self.enable_demo(timeout=false)
false
end
end
#==============================================================================
# ■ TitleBack : 背景プレーン
#==============================================================================
class TitleBack < Plane
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(b, main=false)
@index = main ? 0 : 1
super(Viewport.new(0, 0, Graphics.width, Graphics.height))
self.bitmap = b
self.viewport.z = 100
fit_screen if Title::TB_FIT[@index]
@stop = false
reset_pos
stop_pos
end
def bwz; (bitmap.width * zoom_x).truncate; end # ズーム後のbitmap幅
def bhz; (bitmap.height* zoom_y).truncate; end # ズーム後のbitmap高さ
def vw; viewport.rect.width; end
def vh; viewport.rect.height; end
#--------------------------------------------------------------------------
# ● オブジェクト破棄
#--------------------------------------------------------------------------
def dispose
self.bitmap.dispose
self.viewport.dispose
super
end
#--------------------------------------------------------------------------
# ● 画面にフィットさせる
#--------------------------------------------------------------------------
def fit_screen
x_zoom = vw * 1.0 / bitmap.width
y_zoom = vh * 1.0 / bitmap.height
zoom = x_zoom > y_zoom ? x_zoom : y_zoom
self.zoom_x = self.zoom_y = zoom
end
#--------------------------------------------------------------------------
# ● 画像位置の設定
#--------------------------------------------------------------------------
def x4; 0; end
def x5; (bwz - vw) / 2; end
def x6; (bwz - vw); end
def y2; (bhz - vh); end
def y5; (bhz - vh) / 2; end
def y8; 0; end
def reset_pos
case Title::TB_BASE[@index]
when 1; self.ox = x4; self.oy = y2
when 2; self.ox = x5; self.oy = y2
when 3; self.ox = x6; self.oy = y2
when 4; self.ox = x4; self.oy = y5
when 6; self.ox = x6; self.oy = y5
when 7; self.ox = x4; self.oy = y8
when 8; self.ox = x5; self.oy = y8
when 9; self.ox = x6; self.oy = y8
else; self.ox = x5; self.oy = y5
end
end
#--------------------------------------------------------------------------
# ● 終端点の設定
#--------------------------------------------------------------------------
def stop_pos
case Title::TB_BASE[@index]
when 1,4,7; @x_gap = x6
when 3,6,9; @x_gap = x4
else; @x_gap = nil
end
case Title::TB_BASE[@index]
when 1,2,3; @y_gap = y8
when 7,8,9; @y_gap = y2
else; @y_gap = nil
end
end
#--------------------------------------------------------------------------
# ● スクロール判定
#--------------------------------------------------------------------------
def scroll?
Title::SCROLL_TG[@index]
end
#--------------------------------------------------------------------------
# ● スクロール終端判定
#--------------------------------------------------------------------------
def scroll_stop?
return unless Title::SCROLL_STOP[@index]
if !@x_gap.nil?
# p "#{self.ox}, #{@x_gap}"
case Title::SCROLL_DIR[@index]
when 1,4,7; x_end_stop if self.ox < @x_gap
when 3,6,9; x_end_stop if self.ox > @x_gap
end
end
if !@y_gap.nil?
# p "#{self.oy}, #{@y_gap}"
case Title::SCROLL_DIR[@index]
when 1,2,3; y_end_stop if self.oy > @y_gap
when 7,8,9; y_end_stop if self.oy < @y_gap
end
end
end
def x_end_stop
self.ox = @x_gap
@stop = true
end
def y_end_stop
self.oy = @y_gap
@stop = true
end
#--------------------------------------------------------------------------
# ● Xスクロール
#--------------------------------------------------------------------------
def scroll_x(n)
self.ox = self.ox + n * Title::SCROLL_SPD[@index]
end
def scroll_r; scroll_x( 1) end
def scroll_l; scroll_x(-1) end
#--------------------------------------------------------------------------
# ● Yスクロール
#--------------------------------------------------------------------------
def scroll_y(n)
self.oy = self.oy + n * Title::SCROLL_SPD[@index]
end
def scroll_u; scroll_y(-1) end
def scroll_d; scroll_y( 1) end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
return unless scroll?
return if @stop
case Title::SCROLL_DIR[@index]
when 1; scroll_l; scroll_d
when 2; scroll_d
when 3; scroll_r; scroll_d
when 4; scroll_l
when 6; scroll_r
when 7; scroll_l; scroll_u
when 8; scroll_u
when 9; scroll_r; scroll_u
end
scroll_stop?
self.ox %= viewport.rect.width
self.oy %= viewport.rect.height
end
end
#==============================================================================
# ■ Spriteset_TitleMap : タイトル背景マップ
#==============================================================================
class Spriteset_TitleMap < Spriteset_Map
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
$game_map.update(true)
end
end
#==============================================================================
# ■ Title::TitleName
#==============================================================================
class Title::TitleName
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(type)
@type = type
@name = @file = ""
@rect = Rect.new
@x_align = @y_align = 0
end
#--------------------------------------------------------------------------
# ● 描画対象の矩形
#--------------------------------------------------------------------------
def src_rect(name, file, bitmap)
if @type
@name = name
@srect = bitmap.text_size(name)
else
@file = file
b = Cache.system(file)
@srect = Rect.new(0, 0, b.width, b.height)
end
end
#--------------------------------------------------------------------------
# ● タイトル矩形の計算
#--------------------------------------------------------------------------
def calc_rect(config, half=true)
if config.x < 0
@rect.x += config.width
@rect.width = Graphics.width - config.width
@x_align = 1
else
@rect.x = config.x
@rect.width = @srect.width
end
if config.y < 0
@rect.y += config.height
@rect.height = half ? Graphics.height / 2 : Graphics.height
@y_align = 1
else
@rect.y = config.y
@rect.height = @srect.height
end
end
#--------------------------------------------------------------------------
# ● タイトル描画
#--------------------------------------------------------------------------
def draw_tile(bitmap)
if @type
bitmap.draw_text(@rect, @name, @x_align)
else
b = Cache.system(@file)
@rect.x = ((@rect.width - b.width) / 2) if @x_align == 1
@rect.y = ((@rect.height - b.height) / 2) if @y_align == 1
bitmap.blt(@rect.x, @rect.y, b, @srect)
end
end
end
#==============================================================================
# ■ Sprite_TitleName : タイトル名スプライト
#==============================================================================
class Sprite_TitleName < Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(main)
@main = main
super(Viewport.new(0, 0, Graphics.width, Graphics.height))
self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
self.viewport.z = 200
main ? Title.set_main_bitmap(self.bitmap) : Title.set_sub_bitmap(self.bitmap)
end
#--------------------------------------------------------------------------
# ● オブジェクト破棄
#--------------------------------------------------------------------------
def dispose
self.bitmap.dispose
self.viewport.dispose
super
end
#--------------------------------------------------------------------------
# ● タイトル描画
#--------------------------------------------------------------------------
def draw_title
@main ? draw_main_title : draw_sub_title
end
#--------------------------------------------------------------------------
# ● メインタイトル描画
#--------------------------------------------------------------------------
def draw_main_title
title = Title::TitleName.new(Title::TM_TYPE)
title.src_rect($data_system.game_title, Title::TM_NAME, self.bitmap)
title.calc_rect(Title::TM_RECT)
title.draw_tile(self.bitmap)
end
#--------------------------------------------------------------------------
# ● サブタイトル描画
#--------------------------------------------------------------------------
def draw_sub_title
title = Title::TitleName.new(Title::TS_TYPE)
title.src_rect(Title::TS_NAME, Title::TS_NAME, self.bitmap)
title.calc_rect(Title::TS_RECT)
title.draw_tile(self.bitmap)
end
end
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
# タイトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Title < Scene_Base
include Title::Scene
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super
prepare(S_START)
@timecnt = 0
end
#--------------------------------------------------------------------------
# ● 準備
#--------------------------------------------------------------------------
def prepare(scene=S_TITLE, timeout=false, index=-1)
@pre_scene = scene
@timeout = timeout
@index = index
end
#--------------------------------------------------------------------------
# ● トランジション実行
#--------------------------------------------------------------------------
def perform_transition
Title::TITLE_TRN.nil? ? super : Graphics.transition(transition_speed, Title::TITLE_TRN)
end
#--------------------------------------------------------------------------
# ● 開始前シーン制御
#--------------------------------------------------------------------------
def check_pre_scene
if Title::SKIP_ALL
return skip_start
end
if Title::SKIP_NEWGAME
return skip_start unless DataManager.save_file_exists?
end
if Title::SKIP_CONTINUE
return DataManager.save_file_exists? ? SceneManager.call(Scene_Load) : skip_start
end
if Title::Scene.enable_logo(@timeout) and @pre_scene < S_LOGO
return call_new_scene(Scene_Logo)
end
if Title::Scene.enable_demo(@timeout) and @pre_scene < S_DEMO
return call_new_scene(Scene_EvDemo)
end
end
#--------------------------------------------------------------------------
# ● 開始前シーン制御
#--------------------------------------------------------------------------
def call_new_scene(scene)
SceneManager.call(scene)
SceneManager.scene.prepare(@timeout)
Graphics.freeze
end
#--------------------------------------------------------------------------
# ● Skip New Game
#--------------------------------------------------------------------------
def skip_start
DataManager.setup_new_game
fadeout_all
$game_map.autoplay
SceneManager.goto(Scene_Map)
Graphics.freeze
end
#--------------------------------------------------------------------------
# ● Skip Continue
#--------------------------------------------------------------------------
def skip_continue
play_title_music
SceneManager.call(Scene_Load)
Graphics.freeze
end
#--------------------------------------------------------------------------
# ● メイン
#--------------------------------------------------------------------------
def main
check_pre_scene
return if scene_changing?
super
end
#--------------------------------------------------------------------------
# ● 開始後処理
#--------------------------------------------------------------------------
def post_start
setup_fadein if Title::FADEIN_PATTERN > 0
super
exec_fadein if Title::FADEIN_PATTERN > 0
end
#--------------------------------------------------------------------------
# ● フェードin処理準備
#--------------------------------------------------------------------------
def setup_fadein
@text_sprites.each { |s| s.opacity = 0 }
@command_window.open
end
#--------------------------------------------------------------------------
# ● フェードin処理
#--------------------------------------------------------------------------
def exec_fadein
case Title::FADEIN_PATTERN
when 1 # メインタイトル+サブタイトル+コマンド
Title::FADEIN_TIME.times do |i|
@text_sprites.each { |s| s.opacity += 255/Title::FADEIN_TIME }
@command_window.update_open
break if update_fade
end
when 2 # メインタイトル+サブタイトル → コマンド
Title::FADEIN_TIME.times do |i|
@text_sprites.each { |s| s.opacity += 255/Title::FADEIN_TIME }
break if update_fade
end
Title::FADEIN_TIME.times do |i|
@command_window.update_open
break if update_fade
end
end
@text_sprites.each { |s| s.opacity = 255 }
@command_window.update_open while !@command_window.open?
end
#--------------------------------------------------------------------------
# ● フェードinのフレーム更新
#--------------------------------------------------------------------------
def update_fade
update_background
Graphics.update
Input.update
@command_window.process_cursor_move
Title.skip_trigger?
end
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
alias start_title start
def start
start_title
create_message_window if Title::TB_MAP
create_scroll_text_window if Title::TB_MAP
end
#--------------------------------------------------------------------------
# ● 背景の作成 [再定義]
#--------------------------------------------------------------------------
def create_background
@back_sprites = []
if Title::TB_MAP
DataManager.create_game_objects
$game_map.setup(Title::TB_MAP_ID)
$game_player.moveto(Title::TB_MAP_POS.x, Title::TB_MAP_POS.y)
@back_sprites.push(Spriteset_TitleMap.new)
@back_sprites[0].update
@back_sprites.push(TitleBack.new(Cache.title2($data_system.title2_name))) if Title::TB_MAP_2
else
@back_sprites.push(TitleBack.new(Cache.title1($data_system.title1_name), true))
@back_sprites.push(TitleBack.new(Cache.title2($data_system.title2_name)))
end
create_weather
end
#--------------------------------------------------------------------------
# ● 背景のフレーム更新
#--------------------------------------------------------------------------
def update_background
@back_sprites.each { |s| s.update }
update_weather
end
#--------------------------------------------------------------------------
# ● 前景の作成 [再定義]
#--------------------------------------------------------------------------
def create_foreground
@text_sprites = []
return unless $data_system.opt_draw_title
(Title::TS ? 2 : 1).times {|i| @text_sprites.push(Sprite_TitleName.new(i==0))}
draw_game_title
end
#--------------------------------------------------------------------------
# ● ゲームタイトルの描画 [再定義]
#--------------------------------------------------------------------------
def draw_game_title
@text_sprites.each { |s| s.draw_title }
end
#--------------------------------------------------------------------------
# ● 背景の解放 [再定義]
#--------------------------------------------------------------------------
def dispose_background
dispose_weather
@back_sprites.each { |s| s.dispose }
end
#--------------------------------------------------------------------------
# ● 前景の解放 [再定義]
#--------------------------------------------------------------------------
def dispose_foreground
@text_sprites.each { |s| s.bitmap.dispose; s.dispose }
end
#--------------------------------------------------------------------------
# ● メッセージウィンドウの作成
#--------------------------------------------------------------------------
def create_message_window
@message_window = Window_Message.new
end
#--------------------------------------------------------------------------
# ● スクロール文章ウィンドウの作成
#--------------------------------------------------------------------------
def create_scroll_text_window
@scroll_text_window = Window_ScrollText.new
end
#--------------------------------------------------------------------------
# ● コマンドウィンドウの作成
#--------------------------------------------------------------------------
alias create_command_window_title create_command_window
def create_command_window
create_command_window_title
Title::CMD_BOX.select { |i| i > 2 }.each do |c|
@command_window.set_handler(Title::EXCMD[c][3], method(:command_extra))
end
@command_window.select(@index) if @index >= 0
end
#--------------------------------------------------------------------------
# ● コマンド[ニューゲーム]
#--------------------------------------------------------------------------
alias command_new_game_title command_new_game
def command_new_game
map_clear if Title::TB_MAP
command_new_game_title
end
#--------------------------------------------------------------------------
# ● コマンド[拡張コマンド]
#--------------------------------------------------------------------------
def command_extra
close_command_window
map_clear if Title::TB_MAP
SceneManager.call(Title::EXCMD[@command_window.cmd_no][1])
end
#--------------------------------------------------------------------------
# ● 天候スプライトの作成
#--------------------------------------------------------------------------
def create_weather
@w_viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
@w_viewport.z = 100
@weather = Spriteset_Weather.new(@w_viewport)
@weather.type = Title::WEATHER_TYPE
@weather.power = Title::WEATHER_POWER
@weather.update
end
#--------------------------------------------------------------------------
# ● 天候スプライトの解放
#--------------------------------------------------------------------------
def dispose_weather
@w_viewport.dispose
@weather.dispose
end
#--------------------------------------------------------------------------
# ● 天候スプライトのフレーム更新
#--------------------------------------------------------------------------
def update_weather
@weather.update
end
#--------------------------------------------------------------------------
# ● タイトル画面の音楽演奏
#--------------------------------------------------------------------------
alias play_title_music_title play_title_music
def play_title_music
play_title_music_title
Title::BGS.play unless Title::BGS.nil?
end
#--------------------------------------------------------------------------
# ● マップ表示のクリア(マップ使用時はfreezeして、画面をクリアする)
#--------------------------------------------------------------------------
def map_clear
Graphics.freeze
$game_map.screen.clear
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
update_background
update_timeout
end
#--------------------------------------------------------------------------
# ● タイムアウト
#--------------------------------------------------------------------------
def update_timeout
@timecnt += 1
if @timecnt >= Title::TIME_OUT_CNT
map_clear if Title::TB_MAP
fadeout_all
SceneManager.goto(Scene_Title)
SceneManager.scene.prepare(Title::Scene::S_START, true)
end
end
end
#==============================================================================
# ■ Window_TitleCommand
#------------------------------------------------------------------------------
# タイトル画面で、ニューゲーム/コンティニューを選択するウィンドウです。
#==============================================================================
class Window_TitleCommand < Window_Command
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_title initialize
def initialize
@slot_n = 0
@slot_chg = false
@cmds = enable_cmd_list
initialize_title
Title.cmd_window_opacity(self)
Title.set_cmd_bitmap(self.contents)
end
#--------------------------------------------------------------------------
# ● 行の高さを取得
#--------------------------------------------------------------------------
def line_height
Title::CMD_TYPE ? Title::CMD_RECT.height : Cache.system(Title::CMD_GRPHIC[0][0]).height
end
#--------------------------------------------------------------------------
# ● ウィンドウ内容の作成
#--------------------------------------------------------------------------
def create_contents
super
Title.set_cmd_bitmap(self.contents)
end
#--------------------------------------------------------------------------
# ● カーソルの移動処理
#--------------------------------------------------------------------------
def process_cursor_move
return unless cursor_movable?
@slot_chg = false
super
Sound.play_cursor if @slot_chg
end
#--------------------------------------------------------------------------
# ● アライメントの取得
#--------------------------------------------------------------------------
def alignment
Title::CT_ALIGN
end
#--------------------------------------------------------------------------
# ● コマンド番号取得
#--------------------------------------------------------------------------
def command_no(index)
@list[index][:ext]
end
def cmd_no
@list[@index][:ext]
end
#--------------------------------------------------------------------------
# ● テキスト幅
#--------------------------------------------------------------------------
def cmd_width_max(add_w=0)
sizes = []
item_max.times{ |i| sizes.push(cmd_text_w(i) + (i * add_w)) }
return sizes.max + 8
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
[160, cmd_width_max(Title::CMD_RECT.width) + standard_padding * 2].max
end
#--------------------------------------------------------------------------
# ● 項目を描画する矩形の取得
#--------------------------------------------------------------------------
def align_x(index, x=0)
if Title::CMD_TYPE
case alignment
when 0; #non
when 1; return (cmd_width_max + x - cmd_text_w(command_no(index))) / 2
when 2; return cmd_width_max + x - cmd_text_w(command_no(index))
end
end
return 0
end
#--------------------------------------------------------------------------
# ● 項目を描画する矩形の取得
#--------------------------------------------------------------------------
def item_rect(index)
rect = super(index)
rect.x += index * Title::CMD_RECT.width
if Title::CT_CUR_FIT
rect.x += align_x(index, -8)
rect.width = cmd_text_w(command_no(index)) + 8
end
rect
end
#--------------------------------------------------------------------------
# ● 項目を描画する矩形の取得(テキスト用)
#--------------------------------------------------------------------------
def item_rect_for_text(index)
rect = super(index)
if Title::CT_CUR_FIT
rect.x -= align_x(index, 8)
rect.width = cmd_width_max + 8
end
rect
end
#--------------------------------------------------------------------------
# ● ウィンドウ位置の更新
#--------------------------------------------------------------------------
def update_placement
self.x = Title::CMD_RECT.x < 0 ? (Graphics.width - width) / 2 : Title::CMD_RECT.x
self.y = Title::CMD_RECT.y < 0 ? (Graphics.height * 1.6 - height) / 2 : Title::CMD_RECT.y
end
#--------------------------------------------------------------------------
# ● 表示対象のコマンドリスト
#--------------------------------------------------------------------------
def enable_cmd_list
Title::CMD_BOX.uniq.select { |c| Title.excmd_enable?(c) }
end
def cmd_list
slot_shift
end
#--------------------------------------------------------------------------
# ● コマンドごとのテキスト幅
#--------------------------------------------------------------------------
def cmd_text_w(index)
if Title::CMD_TYPE
if disposed?
b = Title.set_cmd_bitmap(Bitmap.new(1,1))
w = b.text_size(command_name(index)).width
b.dispose
else
w = contents.text_size(command_name(index)).width
end
else
w = Cache.system(Title::CMD_GRPHIC[command_no(index)][0]).width
end
return w
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
cmd_list.each do |c|
case c
when 0; add_command(Vocab::new_game, :new_game, true, c)
when 1; add_command(Vocab::continue, :continue, continue_enabled, c)
when 2; add_command(Vocab::shutdown, :shutdown, true, c)
else; add_command(Title::EXCMD[c][0],Title::EXCMD[c][3], true, c)
end
end
end
#--------------------------------------------------------------------------
# ● スロット式の固定Index
#--------------------------------------------------------------------------
def slot_i
((@cmds.size-1)/2).truncate
end
#--------------------------------------------------------------------------
# ● カーソル位置の設定
#--------------------------------------------------------------------------
def index=(index)
if Title::CMD_SLOT
@slot_n = (slot_i - index) % item_max
@slot_chg = @slot_n != 0
super(slot_i)
refresh
else
super(index)
end
end
#--------------------------------------------------------------------------
# ● 項目の選択
#--------------------------------------------------------------------------
def select(index)
old_index = @index
super(index)
if !Title::CMD_SLOT and Title::CMD_CHNG
redraw_item(old_index)
redraw_item(index)
end
end
#--------------------------------------------------------------------------
# ● スロットシフト
#--------------------------------------------------------------------------
def slot_shift
if Title::CMD_SLOT
@slot_n.abs.times do |i|
@cmds.unshift(@cmds.pop) if @slot_n > 0
@cmds.push(@cmds.shift) if @slot_n < 0
end
end
@cmds
end
#--------------------------------------------------------------------------
# ● スロット表示時の不透明化
#--------------------------------------------------------------------------
def slot_alpha(index)
return 0 if Title::CMD_SLOT_ALL
(@index-index).abs < 2 ? 0 : 255
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item(index)
Title::CMD_TYPE ? draw_item_text(index) : draw_cmd(index)
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item_text(index)
change_color(normal_color, command_enabled?(index))
contents.font.color.alpha -= slot_alpha(index) if Title::CMD_SLOT
draw_text(item_rect_for_text(index), command_name(index), alignment)
end
#--------------------------------------------------------------------------
# ● 画像描画
#--------------------------------------------------------------------------
def draw_cmd(index)
g = Title::CMD_GRPHIC[command_no(index)]
b = Cache.system((Title::CMD_CHNG and index != @index) ? g[1] : g[0])
rect = item_rect_for_text(index)
opacity = command_enabled?(index) ? 255 : translucent_alpha
opacity -= slot_alpha(index) if Title::CMD_SLOT
contents.blt(rect.x, rect.y, b, Rect.new(0,0,b.width,b.height), opacity)
end
#--------------------------------------------------------------------------
# ● カーソルの更新
#--------------------------------------------------------------------------
def update_cursor
Title::DISABLE_CURSOR ? cursor_rect.empty : super
end
end
复制代码
作者:
江边酒家
时间:
2015-3-28 11:50
标题logo
#==============================================================================
# ■ VXAce-RGSS3-17 タイトルカスタマイズ [Logo] by Claimh
#------------------------------------------------------------------------------
# タイトル表示前にロゴ画面を表示します。
#------------------------------------------------------------------------------
# ●セクション
# タイトルカスタマイズより下に配置して下さい。
#------------------------------------------------------------------------------
# ●動作について
# ロゴ表示中Title.skip_trigger?内のボタンが押された場合はスキップします
# ただし、動画再生の場合はスキップできません。
#==============================================================================
module Title::LOGO
# ME
LOGO_ME = RPG::ME.new("Item")
# トランジション(nil:画像なし)
LOGO_TRN = nil #"Graphics/System/cc_transition2"
# ロゴタイプ
# 0..画像
# 1..テキスト
# 2..ogv動画
LOGO_TYPE = 0
# ロゴ名(画像ファイル or テキスト or 動画ファイル)
# 画像ファイル : Graphics/System/
# 動画ファイル : Movies/
LOGO = "logo"
# ロゴ表示位置(Rect#width,heightは未参照)
# Rect#x : -1を指定すると中央
# Rect#y : -1を指定すると中央
# (注)動画再生は常に中央表示になります
L_RECT = Rect.new(-1, -1, 0, 0)
# フォント設定
def self.logo_font(bitmap)
bitmap.font.size = 48
bitmap
end
# ロゴ表示時間(フレーム数)
# (注)動画再生では無効(動画終端まで再生されます)
L_TIME = 90
# タイムアウト発生時にもロゴ表示する
L_TOUT = false
end
#==============================================================================
# ■ Title::Scene
#==============================================================================
module Title::Scene
#--------------------------------------------------------------------------
# ● ロゴシーンの有無
#--------------------------------------------------------------------------
def self.enable_logo(timeout=false)
timeout ? Title::LOGO::L_TOUT : true
end
end
class Scene_Logo < Scene_Base
include Title::LOGO
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super
prepare
end
#--------------------------------------------------------------------------
# ● 準備
#--------------------------------------------------------------------------
def prepare(timeout=false)
@timeout = timeout
end
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
LOGO_ME.play unless LOGO_ME.nil?
@time = 0
@sprite = Sprite.new
@sprite.bitmap = Title::LOGO.logo_font(Bitmap.new(Graphics.width, Graphics.height))
draw_logo if LOGO_TYPE < 2
end
#--------------------------------------------------------------------------
# ● トランジション実行
#--------------------------------------------------------------------------
def perform_transition
LOGO_TRN.nil? ? super : Graphics.transition(transition_speed, LOGO_TRN)
end
#--------------------------------------------------------------------------
# ● トランジション速度の取得
#--------------------------------------------------------------------------
def transition_speed
return 20
end
#--------------------------------------------------------------------------
# ● ロゴ描画
#--------------------------------------------------------------------------
def draw_logo
logo = Title::TitleName.new(LOGO_TYPE==1)
logo.src_rect(LOGO, LOGO, @sprite.bitmap)
logo.calc_rect(L_RECT, false)
logo.draw_tile(@sprite.bitmap)
end
#--------------------------------------------------------------------------
# ● 開始後処理
#--------------------------------------------------------------------------
def post_start
super
play_movie if LOGO_TYPE == 2
end
#--------------------------------------------------------------------------
# ● 動画再生
#--------------------------------------------------------------------------
def play_movie
Graphics.play_movie('Movies/' + LOGO)
return_scene
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
def terminate
super
@sprite.bitmap.dispose
@sprite.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
@time += 1
return return_scene if @time > L_TIME
return return_scene if Title.skip_trigger?
end
#--------------------------------------------------------------------------
# ● 呼び出し元のシーンへ戻る
#--------------------------------------------------------------------------
def return_scene
super
fadeout_all
SceneManager.scene.prepare(Title::Scene::S_LOGO, @timeout)
end
end
复制代码
作者:
江边酒家
时间:
2015-3-28 11:50
==============================================================================
# ■ VXAce-RGSS3-17 タイトルカスタマイズ [EvDemo] by Claimh
#------------------------------------------------------------------------------
# タイトル表示前後にイベントによるデモンストレーションを表示します。
#------------------------------------------------------------------------------
# ●セクション
# タイトルカスタマイズより下に配置して下さい。
#------------------------------------------------------------------------------
# ●イベントからタイトルに戻る場合は以下の実行してください
# SceneManager.scene.return_scene
#------------------------------------------------------------------------------
# ●注意事項
# ・メッセージの自動送りは行いません
# ・デモのイベント内で操作したスイッチ、変数等の変更はゲーム内には継承しません
# ・デモ中にTitle.skip_trigger?内のボタンが押された場合はスキップします
# ・動画再生を行った場合、動画再生中はスキップできません
#==============================================================================
module Title::EvDemo
# トランジション(nil:画像なし)
DEMO_TRN = nil #"Graphics/System/cc_transition2"
# 表示するマップID
D_MAP_ID = 24
# 表示するマップ位置(Rect#width/heightは未参照)
D_MAP_POS = Rect.new(10, 14, 0, 0)
# 表示するタイミング
# 0..タイトル前
# 1..タイトル後(タイムアウト時)
# 2..タイトル前後
D_SHOW = 2
end
#==============================================================================
# ■ Title::Scene
#==============================================================================
module Title::Scene
#--------------------------------------------------------------------------
# ● イベントシーンの有無
#--------------------------------------------------------------------------
def self.enable_demo(timeout=false)
case Title::EvDemo::D_SHOW
when 0; return !timeout
when 1; return timeout
when 2; return true
end
false
end
end
class Scene_EvDemo < Scene_Base
include Title::EvDemo
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super
prepare
end
#--------------------------------------------------------------------------
# ● 準備
#--------------------------------------------------------------------------
def prepare(timeout=false)
@timeout = timeout
end
#--------------------------------------------------------------------------
# ● トランジション実行
#--------------------------------------------------------------------------
def perform_transition
DEMO_TRN.nil? ? super : Graphics.transition(transition_speed, DEMO_TRN)
end
#--------------------------------------------------------------------------
# ● トランジション速度の取得
#--------------------------------------------------------------------------
def transition_speed
return 20
end
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_message_window
create_scroll_text_window
DataManager.create_game_objects
$game_map.setup(D_MAP_ID)
$game_map.autoplay
$game_player.moveto(D_MAP_POS.x, D_MAP_POS.y)
@spriteset = Spriteset_TitleMap.new
end
#--------------------------------------------------------------------------
# ● メッセージウィンドウの作成
#--------------------------------------------------------------------------
def create_message_window
@message_window = Window_Message.new
end
#--------------------------------------------------------------------------
# ● スクロール文章ウィンドウの作成
#--------------------------------------------------------------------------
def create_scroll_text_window
@scroll_text_window = Window_ScrollText.new
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
@spriteset.update
return_scene if Title.skip_trigger?
end
#--------------------------------------------------------------------------
# ● 呼び出し元のシーンへ戻る
#--------------------------------------------------------------------------
def return_scene
super
fadeout_all
$game_map.screen.clear
@spriteset.update_pictures
Graphics.update
SceneManager.scene.prepare(Title::Scene::S_DEMO, @timeout)
end
end
复制代码
作者:
taroxd
时间:
2015-3-28 12:04
图书馆Q&A -> 插件脚本如何使用?
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1