#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
# 타이틀 화면의 처리를 실시하는 클래스입니다.
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# ● 메인 처리
#--------------------------------------------------------------------------
def main
# 전투 테스트의 경우
if $BTEST
battle_test
return
end
# 데이타베이스를 로드
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
# 시스템 오브젝트를 작성
$game_system = Game_System.new
# 타이틀 그래픽을 작성
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# 커멘드 윈도우를 작성
s1 = "시작하기"
s2 = "불러오기"
s3 = "게임종료"
@command_window = Window_Command.new(192, [s1, s2])
@command_window.back_opacity = 160
@command_window.x = 550 - @command_window.width / 2
@command_window.y = 400
# 콘티 뉴 유효 판정
# 세이브 파일이 하나에서도 존재할지를 조사한다
# 유효하면 @continue_enabled 를 true, 무효라면 false 로 한다
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Save#{i+1}.rxdata")
@continue_enabled = true
end
end
# 콘티 뉴가 유효한 경우, 커서를 콘티 뉴에 맞춘다
# 무효인 경우, 콘티 뉴의 문자를 그레이 표시로 한다
if @continue_enabled
@command_window.index = 1
else
@command_window.disable_item(1)
end
# 타이틀 BGM 를 연주
$game_system.bgm_play($data_system.title_bgm)
# ME, BGS 의 연주를 정지
Audio.me_stop
Audio.bgs_stop
# 트란지션 실행
Graphics.transition
# 메인 루프
loop do
# 게임 화면을 갱신
Graphics.update
# 입력 정보를 갱신
Input.update
# 프레임 갱신
update
# 화면이 바뀌면 루프를 중단
if $scene != self
break
end
end
# 트란지션 준비
Graphics.freeze
# 커멘드 윈도우를 해방
@command_window.dispose
# 타이틀 그래픽을 해방
@sprite.bitmap.dispose
@sprite.dispose
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
def update
# 커멘드 윈도우를 갱신
@command_window.update
# C 버튼이 밀렸을 경우
if Input.trigger?(Input::C)
# 커멘드 윈도우의 커서 위치에서 분기
case @command_window.index
when 0 # 뉴 게임
command_new_game
when 1 # 콘티 뉴
command_continue
when 2 # 슛다운
command_shutdown
end
end
end
#--------------------------------------------------------------------------
# ● 커멘드 : 뉴 게임
#--------------------------------------------------------------------------
def command_new_game
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# BGM 를 정지
Audio.bgm_stop
# 플레이 시간 계측용의 프레임 카운트를 리셋트
Graphics.frame_count = 0
# 각종 게임 오브젝트를 작성
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# 초기 파티를 셋업
$game_party.setup_starting_members
# 초기 위치의 맵을 셋업
$game_map.setup($data_system.start_map_id)
# 플레이어를 초기 위치에 이동
$game_player.moveto($data_system.start_x, $data_system.start_y)
# 플레이어를 리프레쉬
$game_player.refresh
# 맵으로 설정되어 있는 BGM 와 BGS 의 자동 변환을 실행
$game_map.autoplay
# 맵을 갱신 (병렬 이벤트 실행)
$game_map.update
# 맵 화면으로 전환해
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# ● 커멘드 : 콘티 뉴
#--------------------------------------------------------------------------
def command_continue
# 콘티 뉴가 무효의 경우
unless @continue_enabled
# 버저 SE 를 연주
$game_system.se_play($data_system.buzzer_se)
return
end
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 로드 화면으로 전환해
$scene = Scene_Load.new
end
#--------------------------------------------------------------------------
# ● 커멘드 : 슛다운
#--------------------------------------------------------------------------
def command_shutdown
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# BGM, BGS, ME 를 페이드아웃
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
# 슛다운
$scene = nil
end
#--------------------------------------------------------------------------
# ● 전투 테스트
#--------------------------------------------------------------------------
def battle_test
# 데이타베이스 (전투 테스트용)를 로드
$data_actors = load_data("Data/BT_Actors.rxdata")
$data_classes = load_data("Data/BT_Classes.rxdata")
$data_skills = load_data("Data/BT_Skills.rxdata")
$data_items = load_data("Data/BT_Items.rxdata")
$data_weapons = load_data("Data/BT_Weapons.rxdata")
$data_armors = load_data("Data/BT_Armors.rxdata")
$data_enemies = load_data("Data/BT_Enemies.rxdata")
$data_troops = load_data("Data/BT_Troops.rxdata")
$data_states = load_data("Data/BT_States.rxdata")
$data_animations = load_data("Data/BT_Animations.rxdata")
$data_tilesets = load_data("Data/BT_Tilesets.rxdata")
$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
$data_system = load_data("Data/BT_System.rxdata")
# 플레이 시간 계측용의 프레임 카운트를 리셋트
Graphics.frame_count = 0
# 각종 게임 오브젝트를 작성
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# 전투 테스트용의 파티를 셋업
$game_party.setup_battle_test_members
# 무리 ID, 도주 가능 플래그, 배틀 가방을 설정
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
# 배틀 개시 SE 를 연주
$game_system.se_play($data_system.battle_start_se)
# 배틀 BGM 를 연주
$game_system.bgm_play($game_system.battle_bgm)
# 배틀 화면으로 전환해
$scene = Scene_Battle.new
end
end
--------------------------------------------------------
이 스크립트 에서요
$game_player.refresh
이부분이 오류나는데 문제점이 뭐에요?
---------------------------------------------------------
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
# 게임중의 모든 윈도우의 슈퍼 클래스입니다.
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
# x : 윈도우의 X 좌표
# y : 윈도우의 Y 좌표
# width : 윈도우의 폭
# height : 윈도우의 높이
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super()
@windowskin_name = $game_system.windowskin_name
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
self.x = x
self.y = y
self.width = width
self.height = height
self.z = 100
Font.default_size = 20
Font.default_name = ["바보","바보"]
end
#--------------------------------------------------------------------------
# ● 해방
#--------------------------------------------------------------------------
def dispose
# 윈도우 내용의 비트 맵이 설정되어 있으면 해방
if self.contents != nil
self.contents.dispose
end
super
end
#--------------------------------------------------------------------------
# ● 문자색취득
# n : 문자색번호 (0~7)
#--------------------------------------------------------------------------
def text_color(n)
case n
when 0
return Color.new(255, 255, 255, 255)
when 1
return Color.new(128, 128, 255, 255)
when 2
return Color.new(255, 128, 128, 255)
when 3
return Color.new(128, 255, 128, 255)
when 4
return Color.new(128, 255, 255, 255)
when 5
return Color.new(255, 128, 255, 255)
when 6
return Color.new(255, 255, 128, 255)
when 7
return Color.new(192, 192, 192, 255)
else
normal_color
end
end
#--------------------------------------------------------------------------
# ● 통상 문자색의 취득
#--------------------------------------------------------------------------
def normal_color
return Color.new(255, 255, 255, 255)
end
#--------------------------------------------------------------------------
# ● 무효 문자색의 취득
#--------------------------------------------------------------------------
def disabled_color
return Color.new(255, 255, 255, 128)
end
#--------------------------------------------------------------------------
# ● 시스템 문자색의 취득
#--------------------------------------------------------------------------
def system_color
return Color.new(192, 224, 255, 255)
end
#--------------------------------------------------------------------------
# ● 핀치 문자색의 취득
#--------------------------------------------------------------------------
def crisis_color
return Color.new(255, 255, 64, 255)
end
#--------------------------------------------------------------------------
# ● 전투 불능 문자색의 취득
#--------------------------------------------------------------------------
def knockout_color
return Color.new(255, 64, 0)
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
def update
super
# 윈도우 스킨이 변경되었을 경우, 재설정
if $game_system.windowskin_name != @windowskin_name
@windowskin_name = $game_system.windowskin_name
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
end
end
#--------------------------------------------------------------------------
# ● 그래픽의 묘화
# actor : 엑터
# x : 묘화처 X 좌표
# y : 묘화처 Y 좌표
#--------------------------------------------------------------------------
def draw_actor_graphic(actor, x, y)
bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
cw = bitmap.width / 4
ch = bitmap.height / 4
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end
#--------------------------------------------------------------------------
# ● 이름의 묘화
# actor : 엑터
# x : 묘화처 X 좌표
# y : 묘화처 Y 좌표
#--------------------------------------------------------------------------
def draw_actor_name(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 120, 32, actor.name)
end
#--------------------------------------------------------------------------
# ● 클래스의 묘화
# actor : 엑터
# x : 묘화처 X 좌표
# y : 묘화처 Y 좌표
#--------------------------------------------------------------------------
def draw_actor_class(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 236, 32, actor.class_name)
end
#--------------------------------------------------------------------------
# ● 레벨의 묘화
# actor : 엑터
# x : 묘화처 X 좌표
# y : 묘화처 Y 좌표
#--------------------------------------------------------------------------
def draw_actor_level(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, 32, "Lv")
self.contents.font.color = normal_color
self.contents.draw_text(x + 32, y, 24, 32, actor.level.to_s, 2)
end
#--------------------------------------------------------------------------
# ● 묘화용의 스테이트 캐릭터 라인 작성
# actor : 엑터
# width : 묘화처의 폭
# need_normal : [정상] 이 필요한가 어떤가 (true / false)
#--------------------------------------------------------------------------
def make_battler_state_text(battler, width, need_normal)
# 괄호의 폭을 취득
brackets_width = self.contents.text_size("[]"). width
# 스테이트명의 캐릭터 라인을 작성
text = ""
for i in battler.states
if $data_states[i]. rating >= 1
if text == ""
text = $data_states[i]. name
else
new_text = text + "/" + $data_states[i]. name
text_width = self.contents.text_size(new_text). width
if text_width > width - brackets_width
break
end
text = new_text
end
end
end
# 스테이트명의 캐릭터 라인이 하늘의 경우는 "[정상]" 으로 한다
if text == ""
if need_normal
text = "[정상]"
end
else
# 괄호를 붙인다
text = "[" + text + "]"
end
# 완성한 캐릭터 라인을 돌려준다
return text
end
#--------------------------------------------------------------------------
# ● 스테이트의 묘화
# actor : 엑터
# x : 묘화처 X 좌표
# y : 묘화처 Y 좌표
# width : 묘화처의 폭
#--------------------------------------------------------------------------
def draw_actor_state(actor, x, y, width = 112)
text = make_battler_state_text(actor, width, true)
self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
self.contents.draw_text(x, y, width, 32, text)
end
#--------------------------------------------------------------------------
# ● EXP 의 묘화
# actor : 엑터
# x : 묘화처 X 좌표
# y : 묘화처 Y 좌표
#--------------------------------------------------------------------------
def draw_actor_exp(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 24, 32, "E")
self.contents.font.color = normal_color
self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
self.contents.draw_text(x + 108, y, 12, 32, "/", 1)
self.contents.draw_text(x + 120, y, 84, 32, actor.next_exp_s)
end
#--------------------------------------------------------------------------
# ● HP 의 묘화
# actor : 엑터
# x : 묘화처 X 좌표
# y : 묘화처 Y 좌표
# width : 묘화처의 폭
#--------------------------------------------------------------------------
def draw_actor_hp(actor, x, y, width = 144)
# 캐릭터 라인 "HP" 를 묘화
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
# MaxHP 를 묘화 하는 스페이스가 있을까 계산
if width - 32 >= 108
hp_x = x + width - 108
flag = true
elsif width - 32 >= 48
hp_x = x + width - 48
flag = false
end
# HP 를 묘화
self.contents.font.color = actor.hp == 0 ? knockout_color :
actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2)
# MaxHP 를 묘화
if flag
self.contents.font.color = normal_color
self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
end
end
#--------------------------------------------------------------------------
# ● SP 의 묘화
# actor : 엑터
# x : 묘화처 X 좌표
# y : 묘화처 Y 좌표
# width : 묘화처의 폭
#--------------------------------------------------------------------------
def draw_actor_sp(actor, x, y, width = 144)
# 캐릭터 라인 "SP" 를 묘화
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
# MaxSP 를 묘화 하는 스페이스가 있을까 계산
if width - 32 >= 108
sp_x = x + width - 108
flag = true
elsif width - 32 >= 48
sp_x = x + width - 48
flag = false
end
# SP 를 묘화
self.contents.font.color = actor.sp == 0 ? knockout_color :
actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2)
# MaxSP 를 묘화
if flag
self.contents.font.color = normal_color
self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
end
end
#--------------------------------------------------------------------------
# ● 파라미터의 묘화
# actor : 엑터
# x : 묘화처 X 좌표
# y : 묘화처 Y 좌표
# type : 파라미터의 종류 (0~6)
#--------------------------------------------------------------------------
def draw_actor_parameter(actor, x, y, type)
case type
when 0
parameter_name = $data_system.words.atk
parameter_value = actor.atk
when 1
parameter_name = $data_system.words.pdef
parameter_value = actor.pdef
when 2
parameter_name = $data_system.words.mdef
parameter_value = actor.mdef
when 3
parameter_name = $data_system.words.str
parameter_value = actor.str
when 4
parameter_name = $data_system.words.dex
parameter_value = actor.dex
when 5
parameter_name = $data_system.words.agi
parameter_value = actor.agi
when 6
parameter_name = $data_system.words.int
parameter_value = actor.int
end
self.contents.font.color = system_color
self.contents.draw_text(x, y, 120, 32, parameter_name)
self.contents.font.color = normal_color
self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
end
#--------------------------------------------------------------------------
# ● 아이템명의 묘화
# item : 아이템
# x : 묘화처 X 좌표
# y : 묘화처 Y 좌표
#--------------------------------------------------------------------------
def draw_item_name(item, x, y)
if item == nil
return
end
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = normal_color
self.contents.draw_text(x + 28, y, 212, 32, item.name)
end
end
----------------------------------------------------------------------------
여기는
self.contents.font.color = actor.hp == 0 ? knockout_color :
이부분이 오류나네요