[스크립트 003] 타이틀 화면 없애고 맵부터 시작하기
전 시간 자료 : http://doublsb.tistory.com/56
저번 시간에는 타이틀에 선택지를 추가하고, 삭제해 보았다.
이번 시간에는 아예 타이틀 화면 없이, 맵에서부터 게임을 시작할 수 있게 해 보자.
Scene_Title 스크립트가 어떻게 시작하는지 기억하는가? 기억나지 않아도 좋다.
한번 구문을 하나씩 보면서, 어떻게 해야 맵부터 게임을 시작할 수 있을지 보도록 하자.
def start super : Scene_Base의 start 메소드를 불러온다. SceneManager.clear : SceneManager를 초기화한다. Graphics.freeze : 그래픽을 잠시 멈춘다. create_background : 배경화면을 생성한다. create_foreground : 전경화면을 생성한다. create_command_window : 타이틀 커맨드 선택지를 만든다. play_title_music : 타이틀 음악을 재생한다. end |
이 중 맵부터 시작한다고 하면, 필요 없는 부분은 어떤 부분일까?
배경화면 생성하기, 전경화면 생성하기, 타이틀 커맨드 선택지 만들기, 타이틀 음악 재생하기는 전부 필요 없는 부분이다.
그래서 이 네가지 구문은 지우기로 한다.
def start super SceneManager.clear Graphics.freeze end |
안타깝게도, 이대로 실행하면 그저 검은 화면만 나오고, 어떠한 조작도 하지 못한다.
이 상태에서 바로 맵으로 넘어가려면 어떻게 해야 하는 걸까?
답은 command_new_game에 있다.
우리가 게임을 처음 시작하는 선택지를 눌렀을 때를 start 메소드에 집어넣으면 된다.
우선 command_new_game의 내용을 보자.
def command_new_game DataManager.setup_new_game : 데이터매니저가 새 게임을 실행하도록 한다. close_command_window : 윈도우 커맨드를 닫는다. fadeout_all : 모든 화면을 보이지 않게 한다. $game_map.autoplay : 게임 시작 맵의 시작 BGM등을 재생한다. SceneManager.goto(Scene_Map) : 씬매니저에게 Scene_Map으로 이동하라 명령한다. end |
이를 start 메소드에 집어넣을 때, 필요 없는 내용은 무엇일까?
윈도우 커맨드를 닫는 close_command_window가 필요 없다. 커맨드를 만들지도 않았는데 닫을 수는 없으니 말이다.
모든 화면을 잠시 보이지 않게 하는 fadeout_all도 필요 없다.
그럼 이를 start 메소드에 넣어 수정하자.
def start super SceneManager.clear Graphics.freeze DataManager.setup_new_game $game_map.autoplay SceneManager.goto(Scene_Map) end |
아쉽게도 이대로 수정하면 문제가 생긴다. 오류의 내용은 다음과 같다.
Script 'Scene_Title' line 70: NoMethodError occurred.
undefined method 'bitmap' for nil:NilClass
Scene_Title 스크립트의 70번째 줄에 메소드 에러가 생겼다는 오류이다. (수정한 스크립트마다 줄은 다를 수 있다)
bitmap을 찾을 수가 없다고 한다. 이게 무슨 말이야? 하면서 70번째 줄로 달려가 보자.
def dispose_background @sprite1.bitmap.dispose @sprite1.dispose @sprite2.bitmap.dispose @sprite2.dispose end |
오류는 sprite1의 bitmap을 없앨 때 일어났다. 우리가 sprite1을 선언하지도 않은 채로 bitmap을 없애라고 하니까, 문제가 생긴 거다.
'근데 이상하네? 나는 dispose_background라는 명령을 내린 적이 없는데.' 라고 생각할 수 있다.
하지만 스크립트는 사실 명령을 내렸다. 바로 terminate 메소드에서 내렸다.
안타깝게도 씬은 다른 씬으로 전환할 때 자동적으로 terminate 메소드를 실행한다. 그러니 terminate 메소드를 수정하러 가야 한다.
def terminate super SceneManager.snapshot_for_background dispose_background dispose_foreground end |
terminate 메소드는 다음과 같이 이루어져 있다. 이 중 dispose_background와 dispose_foreground가 문제가 되는 부분이다.
우리는 배경화면과 전경화면을 만들지도 않았는데, 자동으로 없애라고 하니 문제가 생긴 것이다.
그럼 저 부분만 삭제하면 우리의 문제는 해결된다.
def terminate super SceneManager.snapshot_for_background end |
완벽하군! 이제 수정이 끝났으니 게임을 실행해 보자.
타이틀 화면은 나오지도 않고, 새 게임을 맵에서부터 시작할 수 있을 것이다.
요약
1. Scene_Title 스크립트의 start 메소드를 다음과 같이 수정한다.
def start
super
SceneManager.clear
Graphics.freeze
DataManager.setup_new_game
$game_map.autoplay
SceneManager.goto(Scene_Map)
end
2. terminate 메소드를 다음과 같이 수정한다.
def terminate
super
SceneManager.snapshot_for_background
end
'프로그래밍 > RPG Maker VXACE' 카테고리의 다른 글
[스크립트 005] 맵 씬 스크립트 - 해부편 (1) (0) | 2018.01.17 |
---|---|
[스크립트 004] 게임 도중 타이틀 이미지 변경하기 (0) | 2018.01.16 |
[스크립트 002] 타이틀 선택지 추가/삭제하기 (0) | 2018.01.14 |
[스크립트 001] 타이틀 씬 스크립트 - 해부편 (2) | 2018.01.07 |
[004] 아이템을 주웠다가 다시 내려놓아보자 (0) | 2016.03.17 |
댓글
이 글 공유하기
다른 글
-
[스크립트 005] 맵 씬 스크립트 - 해부편 (1)
[스크립트 005] 맵 씬 스크립트 - 해부편 (1)
2018.01.17 -
[스크립트 004] 게임 도중 타이틀 이미지 변경하기
[스크립트 004] 게임 도중 타이틀 이미지 변경하기
2018.01.16 -
[스크립트 002] 타이틀 선택지 추가/삭제하기
[스크립트 002] 타이틀 선택지 추가/삭제하기
2018.01.14 -
[스크립트 001] 타이틀 씬 스크립트 - 해부편
[스크립트 001] 타이틀 씬 스크립트 - 해부편
2018.01.07