이미 아시는 분들은 양해를 부탁드릴게요.. 혹시 스크립트를 쓰는게 어려워서 손도 못 대신 분들을 위해 이렇게 짧게(?) 나마 작성하는 글입니다.
사실 '팁'이라고 한 이유는 기존 스크립트에 두세줄만 추가/수정 하면 되기 때문입니다.
전 루비 스크립트의 루비도 모르는 사람입니다. 그래서 지금 제작하고 있는 게임도 스크립트를 쓸 줄 몰라 100%이벤트로만 땜빵식으로 하고 있지요. -_-;;
근데 C언어나 자바 언어 같은 프로그래밍 언어는 다룬 적은 있습니다. 그래서 루비 스크립트에도 도전을 마침내 한 번 해봤죠.
준비물은 두 개 입니다. 하나는 스크립트 파일, 하나는 로고 파일입니다. 제가 사용한 스크립트는 첨부해 드릴게요. 구글링해서 구했습니다.
먼저 스크립트 파일을 열면
unless $DEBUG # 디버그(테스트 플레이)가 아닌 경우만 표시
# 개시시의 효과음아니개를 연주
# 스프라이트 작성
@sprite = Sprite.new
# 타이틀 로고 읽기
@sprite.bitmap = RPG::Cache.title("Logo.jpg") # 타이틀 로고의 화상
# 표시 위치를 화면 중앙으로 설정
@sprite.x = (640 - @sprite.bitmap.width) / 2
@sprite.y = (480 - @sprite.bitmap.height) / 2
# 불투명도 MAX(완전 표시)
@sprite.opacity = 255
# 트란지션 실행
Graphics.transition(40) # FPS를 만지작거려는 없는 경우, 이것으로 2초용명이 됩니다
# 2초간 그대로 표시한 후, 2초에 페이드아웃
for i in 0..160
@sprite.opacity =240 - (i - 40) * 6 if i >= 40
Graphics.update
end
# 스프라이트를 해방
@sprite.dispose
# 트란지션 준비
Graphics.freeze
end
이렇게 있습니다. 이 부분을 F11을 눌러 Scene_Title 스크립트의
$game_system = Game_System.new
이 바로 밑에 넣어주세요. 일단은 게임 시스템 개체를 생성하자마자 로고를 띄우기 위해 준비한다고 이해하시면 되겠습니다.
첨부한 스크립트에서 @sprite.bitmap = RPG::Cache.title("Logo.jpg") 의 "Logo.jpg"를 Graphics/Title에 가져온
개인 로고 파일의 이름을 넣어주면 되겠습니다. 가령 저의 경우엔
@sprite.bitmap = RPG::Cache.title("KEnt.png")
자, 이대로 실행하면 게임 시작할 때 로고 화면이 뜨고 메인이 뜹니다 (야호! 성공?) 근데 아뿔싸, 게임중 게임오버를 당하거나 해서 메인으로 돌아올려고 하면 로고가 다시 뜨는 걸 보실 수 있습니다. (-_-;;)
문제가 어디서 발생하냐 하면 로고를 화면에 이미 한 번 띄웠는지 게임은 알지 못하기 때문입니다. 그래서 다음과 같이 수정해줍시다.
unless $logo_count
$logo_count = true
# 개시시의 효과음아니개를 연주
# 스프라이트 작성
@sprite = Sprite.new
# 타이틀 로고 읽기
@sprite.bitmap = RPG::Cache.title("KEnt.png") # 타이틀 로고의 화상
# 표시 위치를 화면 중앙으로 설정
@sprite.x = (640 - @sprite.bitmap.width) / 2
@sprite.y = (480 - @sprite.bitmap.height) / 2
# 불투명도 MAX(완전 표시)
@sprite.opacity = 255
# 트란지션 실행
Graphics.transition(40) # FPS를 만지작거려는 없는 경우, 이것으로 2초용명이 됩니다
# 2초간 그대로 표시한 후, 2초에 페이드아웃
for i in 0..160
@sprite.opacity =240 - (i - 40) * 6 if i >= 40
Graphics.update
end
# 스프라이트를 해방
@sprite.dispose
# 트란지션 준비
Graphics.freeze
end
$logo_count는 불리언 타입의 전역 변수입니다. Scene_Title의 main 메서드를 호출할 때 전역 변수가 참인지 거짓인지 확인 후 참이 아니면 아직 화면에 띄우지 않았다는 말이죠. 그리고 로고를 띄웠으면 띄웠다고 표시를 해줍니다. 여기서 개인 프로그래밍 경험상 전역 변수가 아니라 static, 정적 변수라고 하는게 더 알맞을 것 같습니다. 전역 변수라도 클래스 밖으로 나가면 일반적인 프로그래밍 언어에선 인식을 못하거든요
그러면 이 $logo_count 변수는 대체 어디에서 만들어져 있느냐, 하면 Main 스크립트에 있습니다.
begin
# 트란지션 준비
Graphics.freeze
#로고 화면 표시 카운터
$logo_count = false
# 씬 오브젝트 (타이틀 화면)를 작성
$scene = Scene_Title.new
# $scene 가 유효한 한계 main 메소드를 호출한다
while $scene != nil
$scene.main
end
# 페이드아웃
Graphics.transition(20)
rescue Errno::ENOENT
# 예외 Errno::ENOENT 를 보충
# 파일을 오픈할 수 없었던 경우, 메세지를 표시해 종료한다
filename = $!.message.sub("No such file or directory - ", "")
print("파일 #{filename} 가 발견되지 않습니다.")
end
좋은 팁이네요~