목차

이전 항목

사이드 이미지

다음 항목

드래그 & 드롭

링크


원문 보러 가기
오역 신고하기
Created using Sphinx.

CG 갤러리, 음악 감상실, 다시보기 액션

음악 감상실

음악 감상실은 플레이어가 게임에서 사용된 음악을 감상할 수 있는 스크린입니다. 게임 음악은 게임을 시작하기 전에는 잠긴 상태로 있다가 플레이어가 게임을 하면서 음악을 들으면 잠금 해제 됩니다.

음악 감상실은 MusicRoom 클래스의 객체가 관리합니다. MusicRoom 객체는 한 게임에 여러 개를 만들 수 있어서 음악 감상실도 여러 개 만들 수 있습니다. 다음 네 단계를 거치면 음악 감상실을 만들 수 있습니다.:

  1. MusicRoom 의 객체를 만듭니다. MusicRoom 생성자는
음악을 재생할 채널과 음악의 페이드 인, 아웃 관리에 필요한 매개변수를 받습니다.
  1. 객체에 음악 파일을 추가합니다.
  2. MusicRoom 객체를 사용하는 스크린을 만들어

버튼, 이미지버튼, 핫스팟에 쓸 액션을 만듭니다. 이렇게 만들어진 액션을 이용하면 재생할 음악을 선택하거나, 이전, 다음 음악을 재생하거나 음악을 멈추거나 시작하게 만들 수 있습니다.

이 때 액션은 MusicRoom 객체의 일부이므로 예를 들어 MusicRoom 객체의 이름이 mr 이라면 mr.Play("track1.ogg") 처럼 적어야 Play 액션을 사용할 수 있습니다.
  1. 음악 감상실 스크린을 메인 메뉴나 보너스 메뉴에 추가합니다.

아래는 1~3단계에 대한 예제입니다.

init python:

    # 1. MusicRoom 객체를 만든다.
    mr = MusicRoom(fadeout=1.0)

    # 2. 음악 파일을 더한다.
    mr.add("track1.ogg", always_unlocked=True)
    mr.add("track2.ogg")
    mr.add("track3.ogg")


# 3. 음악 감상실 스크린을 만든다.
screen music_room:

    tag menu

    frame:
        has vbox

        # 각 음악을 재생하는 버튼.
        textbutton "Track 1" action mr.Play("track1.ogg")
        textbutton "Track 2" action mr.Play("track2.ogg")
        textbutton "Track 3" action mr.Play("track3.ogg")

        null height 20

        # 이전, 다음 음악을 재생하는 버튼.
        textbutton "Next" action mr.Next()
        textbutton "Previous" action mr.Previous()

        null height 20

        # 나가기 버튼.
        textbutton "Main Menu" action ShowMenu("main_menu")

    # 음악 감상실에 들어서면 음악을 자동 재생한다.
    on "replace" action mr.Play()

    # 음악 감상실에서 나가면 원래 재생하던 메인 메뉴 배경음악을 재생한다.
    on "replaced" action Play("music", "track1.ogg")

4 단계 예제는 게임 구조에 따라 달라집니다만 일단 다음과 같은 코드를:

textbutton "Music Room" action ShowMenu("music_room")

메인 메뉴 스크린 스크립트에 적는 것도 한 방법입니다.

Preferences() 함수, 특히 Preferences("music volume") 로 음악 감상실 스크린에 음량 조절 슬라이더를 추가할 수도 있습니다.

class MusicRoom(channel='music', fadeout=0.0, fadein=0.0, loop=True, single_track=False, shuffle=False, stop_action=None)

사용자가 잠금 해제할 수 있는 노래 여러가지와 리스트에 있는 순서대로 음악을 재생하는 액션을 사용할 수 있는 음악감상실.

channel
음악 감상실에서 사용할 채널.
fadeout
트랙을 바꿀 때 이전 음악이 페이드 아웃하기까지 소요될 초 단위 시간.
fadein
트랙을 바꿀 때 새 음악이 페이드 인하기까지 소요될 초 단위 시간.
loop
플레이리스트의 마지막에 도달했을 때 반복재생할 것인지 재생을 종료할 것인지 결정한다.
single_track
참이라면 한 곡만 재생한다. loop 가 참이라면 한 곡만 반복 재생한다. 그 외에는 한 곡이 재생을 마쳤을 때 재생도 종료한다.
shuffle
참이라면 곡 순서를 섞고, 섞인 순서대로 음악을 재생한다. 거짓이라면 MusicRoom 에 추가된 순서대로 음악을 재생한다.
stop_action
음악이 멈췄을 때 실행하는 액션.

single_track 과 shuffle 은 서로 충돌합니다. 둘 중 하나만 참이어야 합니다. (set single_track 과 shuffle 을 설정하는 액션들이 이것을 강제합니다.)

Next(self)

재생 목록에 있는 파일 중에서 잠금 해제된 다음 음악을 재생하는 액션.

Play(filename=None)

음악 감상실에서 음악을 재생한다. filename 을 받아서 해당 파일을 재생한다. 그 외에는 재생하려는 파일이 잠금해제된 상태라면 그 파일을 재생하거나 목록에 있는 첫 번째 음악 파일을 재생한다.

`filename`을 받았다면 이 액션을 사용하는 버튼은 `filename`이 잠긴 상태일 때는 비활성화 상태가 되고, `filename`이 재생 중일 때는 선택된 상태가 된다.

Previous(self)

재생 목록에 있는 파일 중에서 잠금 해제된 이전 음악을 재생하는 액션.

RandomPlay(self)

이 액션은 잠금해제된 음악 중에서 임의로 선택한 음악을 재생한다.

SetLoop(value)

loop 속성의 값을 설정한다.

SetShuffle(value)

shuffle 속성의 값을 설정한다.

SetSingleTrack(value)

single_track 속성의 값을 설정한다.

Stop(self)

음악을 멈춘다.

ToggleLoop(self)

loop 속성의 값을 토글한다.

TogglePlay(self)

현재 재생하고 있는 음악이 없다면 잠금해제된 첫 번째 곡을 재생한다. 그 외에는 재생하고 있는 음악을 멈춘다.

이 액션을 사용하는 버튼은 음악이 재생되고 있다면 선택된 상태가 된다.

ToggleShuffle(self)

shuffle 속성 값을 토글한다.

ToggleSingleTrack(self)

single_track 속성 값을 토글한다.

add(filename, always_unlocked=False, action=None)

filename 음악을 음악 감상실에 더한다. 음악 감상실은 음악 감상실에 추가된 순서대로 잠금 해제된 음악을 재생한다.

always_unlocked
True 면 해당 음악은 항상 잠금 해제 상태이다. 게임에서 재생 되기 전에 음악 감상실에서 재생할 음악을 정할 때 사용할 수 있다.
action

액션이나 액션 리스트이다. 이 메소드로 추가한 음악 파일이 재생될 때 호출된다.

예를 들면 음악이 재생될 때 스크린이나 배경, 재생하고 있는 음악에 대한 설명을 교체할 때 사용할 수 있다.

is_unlocked(filename)

filename 이 (언제나 잠금 해제 상태이거나) 잠금 해제되었다면 True를 반환. 잠긴 상태라면 False를 반환한다.

다시보기

렌파이에는 메인 메뉴나 게임 메뉴에서 장면을 다시보기하는 기능이 있습니다. 이 기능은 중요한 장면을 플레이어가 다시 볼 수 있도록 "이벤트 갤러리"나 메모리 갤러리를 만들 때 사용할 수 있습니다. 다시 본 장면이 끝나면 렌파이는 다시보기를 실행했던 메뉴 스크린으로 돌아갑니다.

이벤트 다시보기 기능은 Start() 액션으로도 사용할 수 있습니다. 다시보기 모드와 Start() 로 만든 모드의 차이점은 다음과 같습니다.:

  • 다시보기는 어떤 스크린에서도 실행할 수 있으나 Start 는 메인 메뉴나 메인 메뉴에서 표시할 수 있는 스크린에서만 사용할 수 있습니다.
  • 다시보기가 끝나면 제어흐름은 다시보기를 실행했던 지점으로 돌아갑니다. 그 지점은 메인 메뉴나 게임 메뉴 내부가 될 수 있습니다. 다시보기가 호출되었을 때 게임이 진행중이라면 게임 상태는 보존됩니다.
  • 다시보기 모드에서는 세이브할 수 없습니다.
  • 다시보기 모드에서 renpy.end_replay() 를 호출하면 다시보기가 종료됩니다. 일반 모드에서 end_replay는 아무런 작동을 하지 않습니다.

다시보기 모드를 활용하려면 새로운 레이블에 장면을 만들어 마지막에 renpy.end_replay 를 호출해야합니다. 해당 장면에서는 레이어 상태나 변수를 건드리지 말아야 합니다. 일반 모드와 다시보기 모드에서는 작동이 달라질 수 있기 때문입니다. (다시보기 코드에서 레이블은 검은 화면으로 시작됩니다.)

다음은 예제입니다.:


     "마침내, 나는 마법사를 만났다."

label meaning_of_life:

     scene

    "마법사" "삶의 의미는 무엇이라 생각해?"

    "마법사" "나는 줄곧 열심히 그 생각만 해왔지. 줄곧,
            바로 그것만을 생각하며 시간을 보냈어."

    "마법사" "그리고 내 대답, 삶의 의미란
       바로..."

    "마법사" "43이다."

    $ renpy.end_replay()

    "마법사" "어쨌든 뭐 그런 거지."

위에서처럼 정의된 장면은 Replay 액션으로 다시보기 할 수 있습니다.:

textbutton "삶의 의미" action Replay("meaning_of_life")

아래의 저장 변수는 다시보기 모드에서 사용됩니다.:

_in_replay

다시보기 모드에서 이 변수는 다시보기 모드가 시작된 지점인 해당 레이블로 전달된다. 다시보기 모드 외부에서 이 값은 None이다.

그리고 config.enter_replay_transitionconfig.exit_replay_transition 가 각각 다시보기 모드로 진입하거나 빠져나올 때 사용됩니다.

아래의 변수와 액션은 다시보기 모드에서 사용됩니다.

EndReplay()

현재의 다시보기를 종료하는 액션.

Replay(label, scope={}, locked=None)

label 을 다시보기로 실행시키는 액션.

scope
변수 이름에 값을 매핑하는 딕셔너리. 이 변수들은 다시보기 모드에 진입했을 때 값이 설정된다.
locked
True면 이 다시보기는 잠긴다. False면 잠금해제된다. None이면 게임 플레이하면서 해당 레이블을 발견하지 못했을 경우 다시보기를 잠긴 상태로 만든다.
renpy.call_replay(label, scope={})

label 을 다시보기로서 호출한다.

키워드 인수는 다시보기 상황에서 변수에 초기값을 설정할 때 사용된다.

renpy.end_replay()

다시보기 중이라면 다시보기를 즉시 종료한다. 아니라면 작동하지 않는다.