본문 바로가기

렌파이/GUI 꾸미기

한국어 조사 자동으로 바꾸기 init python: finalConso = None name = '' #받침유무판별기 def finalChecker(name): import re name = name expr = re.compile(r'([a-zA-Z0-9\s~!@#$%^&*()_+|}{:"?`\-=\\\[\];\',./])') temp = expr.sub('', name) if temp == '': return False last_alphabet = repr(temp[-1]) dec = int(str(last_alphabet[4:-1]), 16) while dec < 0x3164: temp = temp[:-1] if not temp: return False last_alphabet=repr(temp[-1]) dec = int(st.. 더보기
바의 모양을 수정하기 개요바의 경우에는 한 UI에 여러 구성요소가 있어 스타일을 이용한 모양 수정이 조금 까다롭게 느껴질 수 있습니다. 그러나 일단 각 부분의 명칭을 알고 나면 어렵지 않습니다. 이것이 렌파이의 기본 바입니다. 테마를 무엇으로 설정했느냐에 따라 모양이 조금씩 다르기는 합니다만 구조는 동일합니다. 위 그림에서 각 부분의 명칭을 확인한 다음 스타일로 모양을 수정해봅니다. 스타일을 이용해 변경한 모습입니다. 스크립트 init python: style.newBar =Style(style.bar) # 썸 이미지 # 바보다 높은 곳에 나타나도록 하려면 # 바의 세로길이보다 더 긴 이미지를 만들고 그 윗부분에 썸이 나타나도록 하면 됩니다. # 무슨 의미인지는 첨부한 "thumb.png" 이미지를 참고하세요. style.n.. 더보기
호감도 표시창 만들기 연애 시뮬레이션에서 호감도 수치를 표시할 때에는 주로 텍스트/아이콘/막대그래프 형태로 표시합니다. 렌파이에서 이 작업을 어떻게 처리하는지 스크립트 예제를 적어봤습니다. 어려운 것은 없으니 설명은 주석을 참고하시고 더 자세한 설명은 매뉴얼을 참고하시면 되겠습니다. 수치로 표시하기init python: # 호감도 변수 eileenLove = 0 lucyLove = 0 billyLove = 0 init: screen lovePoint: vbox: # 세로로 hbox를 정렬 hbox: # 가로로 밑의 두 text를 정렬 text "아이린" text "[eileenLove]" # 변수를 텍스트에서 표시할 때에는 # "[변수이름]" hbox: text "루시" text "[lucyLove]" hbox: text ".. 더보기
루비 텍스트로 윗첨자를 쓰자 렌파이에서는 루비 텍스트 기능으로 후리가나 등 윗첨자를 표시할 수 있습니다. 사용 방법 먼저 스타일을 이용하여 문장과 문장 간격을 설정해 윗첨자가 표시될 공간을 설정합니다. 그 다음에는 윗첨자의 글씨 크기와 위치 등을 설정해줍니다. init python: style.say_thought.line_leading = 12 # ADV 내래이션 문장 간격 설정 # 루비 텍스트 스타일 style.ruby_style = Style(style.default) style.ruby_style.size = 12 # 스타일 크기 style.ruby_style.yoffset = -20 # 문장에서 윗첨자가 떨어진 간격. # -20이면 밑글자에서 위로 20픽셀 떨어진 곳에 윗첨자가 적힌다. style.default.ruby_s.. 더보기
퀵 메뉴를 수정해보자 퀵 메뉴퀵메뉴란 게임 화면에서 바로 세이브/로드/게임 종료 등의 기능을 수행할 수 있게 해주는 간편 메뉴입니다. 따로 만들어놓지 않아도 이미 기본 적용 상태이며 상세 설정은 screens.rpy 스크립트의 screen quick_menu: 블록을 수정하여 관리할 수 있습니다. screen quick_menu: hbox: # 스타일 그룹 설정 style_group "quick" # 위치 설정 xalign 1.0 yalign 1.0 # 퀵 세이브 (1) textbutton _("Q.Save") action QuickSave() # 퀵 로드 (2) textbutton _("Q.Load") action QuickLoad() # 세이브 메뉴 표시 (3) textbutton _("Save") action ShowM.. 더보기
대사창에 캐릭터의 얼굴 이미지를 띄우자 - 사이드 이미지 렌파이에서 사이드 이미지란 이렇게 대사창 옆에 표시되는 그림을 뜻합니다. 사이드 이미지는 캐릭터와 연결해서 사용하면 됩니다. 우선 사이드 이미지로 쓸 그림을 몇 장 준비합니다. 튜토리얼에도 사이드이미지용 아이린 그림이 하나 있으니 가져다 써도 됩니다만, 그거 한장만으로는 사이드이미지가 명령어에 따라 바뀌는지 확인하기는 힘드니까 되도록이면 서로 다른 그림을 몇 장 준비합니다. 먼저 init 블록에서 그림을 등록해주고 이미지 태그를 캐릭터와 연결해줍니다. 이 때 사이드 이미지로 등록할 그림에는 앞에 side 라고 적어줍니다. 그래야 렌파이가 "이것이 사이드 이미지로 사용할 그림"이라는 것을 알아채고 그림을 대사창 옆에 표시하기 때문입니다. 그리고 레이블 블록에서 이미지를 연결한 캐릭터와 함께 사이드 이미지를.. 더보기
스타일 환경설정 스타일 환경설정을 이용하면 플레이어가 게임의 모양을 바꿀 수 있도록 게임을 만들 수 있습니다. 정확히 말하자면 스타일 환경설정이란, 플레이어가 스타일을 게임내에서 마음대로 바꿀 수 있도록 만든다기 보다는, 미리 만들어둔 스타일 설정 중에서 하나를 선택하도록 만드는 시스템입니다. 그러니까 우선은 플레이어가 선택할 수 있는 스타일을 먼저 렌파이에 등록해야 합니다. 이때 renpy.register_style_preference 를 이용합니다. renpy.register_style_preference init python: # renpy.register_style_preference(스타일속성, 스타일 옵션 이름, 바꾸려고 하는 스타일의 이름. 스타일 이름 등, 바꾸려고 하는 스타일의 속성, 스타일 속성에 배정.. 더보기
스크린 언어 (7) 기타 편리한 UI 소개 타이머나 단축키 등 쓸만한 기능들은 눈에 보이지 않지만 스크린 언어의 명령문으로 만들 수 있습니다. key 단축키 단축키를 만들 때 사용하는 명령문입니다. 명령문 오른쪽에 단축키로 만들 키의 심볼을 적고 해당 키가 눌렸을 때 실행할 액션을 적으면 됩니다. 키심볼 자리에는 a,b, A, B, (, ) 처럼 막바로 키보드를 눌렀을 때 나타나는 글자로 적어줘도 됩니다. 펑션 키(f1~f12같은 것들)이나 insert, home, page up..등 눌러도 따로 글자같은 걸 볼 수 없는 키에는 해당 키의 명칭이 따로 있으니 그것을 적어주면 됩니다. 각 키의 명칭은 파이게임 매뉴얼에서 확인할 수 있습니다. screen keymap_screen: key "game_menu" action ShowMenu('save'.. 더보기
스크린 언어 (6) 게임 화면 꾸미기 앞서도 얘기했듯, 렌파이의 모든 게임 화면은 스크린 언어로 만들어진 것입니다. 고로 각 메뉴나 게임 화면마다에는 스크린 이름이 정해져 있습니다. 따라서 같은 이름으로 스크린 블럭을 만들면 아얘 새로 만들 수 있습니다. 아니면 프로젝트/game 폴더 안에 있는 screens.rpy 파일을 이용해서 수정할 수도 있습니다. 게임 화면 게임 화면이란 게임의 일부로 쓰이는 화면을 가리킵니다. say 대사창을 만드는 스크린입니다. 이 스크린은 Character()를 통해서 충분히 모양을 바꿔줄 수 있습니다. 그러니 스크립트를 잘 모르는채로 스크린 자체를 건드리는 것은 좋지 않습니다. 단축메뉴를 사용하지 않고 싶다면 블록 제일 밑의 use quick_menu 를 주석처리해버리시면 됩니다. screen say: # D.. 더보기
스크린 언어 (5) - 바 렌파이에서 바(bar)란 어떤 값을 막대모양으로 보여주는 GUI입니다. 수치를 막대로 나타내거나, 오른쪽 그림처럼 어떤 값을 설정하는 때에도 써먹을 수 있습니다. 값을 막대로 표시하기 먼저 스크린 블럭을 만듭니다. 그리고 bar 문을 적어줍시다. screen bartest: bar bar 문에는 두 가지 정보가 필요합니다. value 와 range 인데, 둘을 일단 적어둡니다. screen bartest: bar value range 그리고 value 오른쪽에는 현재 이 바가 표시해야할 값을, range에는 이 바에서 나타낼 값의 최대치를 적어둡니다. 그러니까 분수랑 비슷하다고 보시면 되는데, range 에는 분모 값을, value 에는 분자값을 적어주면 됩니다. ..더 쉽게 예를 들면, 바를 이용해 호.. 더보기
스크린 언어 (4) - 이미지맵 이미지맵 이미지맵이란 따로 버튼이나 바를 추가하지 않고 그림의 일부를 버튼이나 바처럼 만들 수 있는 GUI입니다. 지도를 이용한 이동 시스템이나, 범죄 현장을 뒤지는 변호사 게임을 만들고 싶다면, add 로 바탕 그림을 추가하고 버튼을 일일히 넣는 대신 이미지맵을 이용합시다. 이미지맵은 스크린 블록에서 imagemap 명령문으로 만듭니다. 이미지맵에는 많은 속성을 입력해야 하니 되도록 블럭형태로 만들어서 사용합시다. screen demo_imagemap: imagemap: ground 와 hover 이미지맵을 만들 때 필요한 그림은 최소 2장입니다. 위 그림은 렌파이 튜토리얼 게임에 있는 이미지맵 예제입니다. 이 그림을 보는 순간 한가지 정보를 알 수 있습니다. 바로 저 노란색으로 나타난 아이콘이 지금 .. 더보기
스크린 언어 (3) - 유용한 스크린 명령문 및 속성 유용한 스크린 명령문 및 속성 use 한 스크린을 다른 스크린의 일부로써 사용할 때나, 한 스크린이 다른 스크린의 작동을 제어하는 스크린일 때에는 use를 이용하면 됩니다. 예를 들어 A스크린에 있는 버튼은 눌릴 때마다 각기 다른 스크린을 띄운다면 각 스크린마다 use 를 써서 A스크린을 포함시켜야 합니다. 이 예에 적합한 스크린이 바로 네비게이션 스크린입니다. 네비게이션은 게임 중에 마우스를 오른쪽 클릭하면 나타나는 화면에서 볼 수 있습니다. 네비게이션에 있는 메뉴를 각각 클릭하면 뒤에 배경처럼 나타난 세이브 화면이 눌린 버튼에 따라 다른 화면으로 바뀌게 됩니다. screens.rpy 에서 게임 메뉴 스크린들의 스크립트(save, load, preference)를 살펴보면 모두 use navigatio.. 더보기
스크린 언어 (2) - 스크린 사용 예제와 정렬용 UI 예제 1 게임 화면에 특정한 수치를 계속해서 나타내는 글자, 여기서는 d-day를 표시하는 글자를 넣어보겠습니다. 우선 init 블럭에 dday를 저장할 변수와 새로운 스크린 블럭을 만듭니다. init: $ dday = 10 # screen 스크린이름: screen d_day: 그리고 스크린 블럭에 dday 를 띄울 수 있는 명령어를 추가해줍니다. 스크린에 글자를 띄우는 명령어는 text 고, 그 옆에는 대괄호 안에 변수이름을 적은 문자열을 적으면 변수를 글자로 나타낼 수 있습니다. init: $ dday = 12 screen d_day: text '수능까지 앞으로 [dday]일' 그리고 text 명령문 옆에는 위치 스타일 속성을 적어 dday 글자의 위치를 정해줍니다. init: $ dday = 12 .. 더보기
스크린 언어 (1) - 스크린 만들기 주 메뉴, 게임 메뉴, 세이브/로드 화면, 대사창 등, 렌파이에서 볼 수 있는 화면을 모두 가리켜 스크린이라고 합니다. 그리고 스크린이 작동하는 방식을 제어하는 데 쓰는 언어를 바로 스크린 언어라고 합니다. 스크린 언어를 이용하면 기존 스크린들을 바꿀 수도 있고, 새로운 스크린을 만들 수도 있습니다. 스크린 만들기 먼저 init 블록에서 screen 명령어를 이용해 스크린을 만듭니다. 그리고 screen 명령어를 블록으로 만든 후 그 안에 스크린 언어를 이용해 화면에 나타낼 것을 적어주면 됩니다. init: # hello_world 라는 이름으로 스크린을 하나 만듭니다. screen hello_world: # eileen_happy.png 그림을 추가합니다. add "eileen_happy.png" xa.. 더보기
대사 꾸미기 - Character init python: e = Character("아이린") envl = NVLCharacter(None) 캐릭터 이름 표시 기능 외에도 Character를 이용하면 클릭 대기 중에 보이는 커서 이미지를 바꾸거나, 대사 표시 속도를 캐릭터마다 달리한다거나, 캐릭터의 대사를 꾸밀 수 있습니다. 대사 넘기기 아이콘 넣기 대사 넘기기 아이콘이라는 건 위에서처럼 사용자의 입력(마우스 클릭 등)을 기다릴 때 대사창에 표시할 그림입니다. 이는 Character 에 다음처럼 ctc 를 이용하면 됩니다. init python: b = Character('백안시', ctc = "대사 넘기기 아이콘으로 사용할 디스플레이어블") # 예: baek = Character('백안시, ctc = "ctc_icon.png" * ct.. 더보기