프로그래머/개발자가 아닌 나, 야매코더는 늘 삽질한다.
1. IOError
렌파이 런처에서 실행할 때는 됐는데, PC 버전이나 안드로이드 배포를 하면 이 에러가 났다!
image not found (이미지를 찾을 수 없음) 오류였는데, 해당 경로에 해당 파일이 있는데 왜 오류가 날까 찾아봤더니...
이미지나 오디오 등 파일의 경로를 지정할 때,
"./경로/파일명.확장자" 또는 "/경로/파일명.확장자"로 설정되어 있는지 확인해야 한다.
렌파이는 "경로/파일명.확장자" 형태로 저장해야 한다.
2. Persistent - 데이터 보관
1) define 변수명
2) define persistent.변수명
변수를 두 가지 방법으로 선언했을 때,
1)은 게임을 재실행하면 초기화된다.
2)는 초기화 persistent._clear() 하기 전까지는 값이 계속 보관된다.
재설치 후에 persistent 데이터가 계속 남아있는지는 확인이 필요하다.
렌파이는 파이썬 기능을 사용할 수 있기 때문에, list 형식으로도 변수를 보관할 수 있다.
예를 들어, 4명의 캐릭터의 호감도가 있을 때, 변수_캐릭터1, 변수_캐릭터2, 변수_캐릭터3, 변수_캐릭터4로 저장하는 것이 아니라 아래와 같이 리스트로 만들어 저장할 수 있다.
# 4명의 캐릭터 호감도를 모두 0으로 정의
list1 = [0, 0, 0, 0]
# 사용
list1[0] = 30 # 캐릭터1의 호감도
list1[1] = 23 # 캐릭터2의 호감도
list1[2] = 12 # 캐릭터3의 호감도
list1[3] = 42 # 캐릭터4의 호감도
# 캐릭터1의 호감도 +3 증가
list1[0] += 3
# 4명의 캐릭터 엔딩을 다 봤는지 확인
# 파이썬의 all 사용
# 4명의 데이터가 보관된 list1이 모두 True (또는 1) 이면, 하위 구문으로 넘어감
if all(list1):
액션
# 추가로 이런 것도 있음; enumerate
# 호감도가 100이 넘어가지 않게 설정
for i, val in enumerate(list1): # list1의 인덱스(i)와 값(val)을 차례대로 호출
if val > 100: # i번째 값이 100보다 크면 (i번째 캐릭터의 호감도가 100보다 크면)
list1[i] = 100 # i번째 값을 100으로 설정
3. 변수 선언 시, define과 default를 잘 생각해보자
Ctrl+D > View Variable를 통해서 화면에서 어떤 변수들을 load 하고 있는지 확인 가능하다. default를 쓰면 화면에서 변수가 계속 로딩되어 있다. 반면 define을 쓰면 해당 변수를 call 할 때만 변수가 로딩되어 있다.
if 명령문을 쓸 때 $ 기호는 빼야 한다. 스크립트 내에서 파이썬 변수는 '$ 변수명'으로 사용하지만 if 구문에서는.
if $ 변수명 > 조건
이 아닌
if 변수명 > 조건
으로 사용해야 한다.
4. 웹 버전
용량이 100MB 넘어가고 BGM을 여러 개 올리면서, 선택지가 뜰 때나 배경음악과 효과음이 겹칠 때 렉이 걸리는 현상이 나타났다. (audio glitches으로 검색) 비디오 재생도 안 되었다.
웹 버전 포팅 기능을 개발한 개발자의 github에 가보면 브라우저 스레드 때문인 것으로 알려졌다. 스레드는 잘 모르니 추가 언급은 안 하겠다.
하지만 개발자는 이 부분을 고치려면 렌파이의 많은 부분을 수정해야 한다며 방법만 소개해준다.
참고로 캐시는 보통 50MB 저장한다고 함... (PC 브라우저는 설정 가능함)
https://github.com/renpy/renpywebgithub.com/renpy/renpyweb#performances
5. iOS 빌드
안드로이드도 하루 동안 삽질해서 빌드를 만들었으니 이왕 하는 김에 iOS도 해보려고 했다. 근데 Mac OS (맥 PC) 없이는 안 되나 보다... 그래서 포기.
6. 안드로이드, 웹 버전에서 UI 변경
포팅했더니 사이드 이미지가 안 보이거나 선택지 창이 더 길다거나 텍스트 박스 사이즈가 달라지는 등의 경우가 있었다.
screens.rpy 에서 다음 variant 값들을 확인해보자.
variant "medium"
variant "small"
renpy.variant("pc")
위의 명령어들은 인식하는 장치가 PC인지 모바일인지 웹인지 정의해준다.
www.renpy.org/doc/html/screens.html#screen-variants
해당 구문이 있는 곳을 주석처리해주면 UI가 PC와 동일해진다.
7. 색상 - Hex Code 8자리 (투명도)
렌파이에서는 색상을 정의할 때 헥스 코드를 사용한다. 색상값을 지정할 때 6자리까지는 흔히 봤을 것이다. 앞에 6자리에서 각 2자리는 R, G, B를 나타낸다.
post.naver.com/viewer/postView.nhn?volumeNo=20632340&memberNo=43589165
그런데 8자리도 있다. 뒤에 추가되는 2자리는 투명도(alpha, opacity, 또는 transparency)를 나타낸다.
투명도(백분율)는 아래 참고
stackoverflow.com/questions/5445085/understanding-colors-on-android-six-characters/11019879#11019879
8. Frame
퀵메뉴 아이콘을 만드는데, 아이콘 하나를 특정 조건을 만족하면 추가로 생기게 만들었다. 근데 기존 메뉴 아이콘들이 미세하게 위치가 바뀌는 것이 아닌가? 이유는 frame 지정 없이 여러 개의 vbox로 만들어서 그렇다. frame을 지정하고 그 위에 vbox를 올렸더니, 아이콘이 추가로 생겨도 위치가 변경되지 않았다. 참고로 frame에서 background를 지정하지 않으면 경계선이 생긴다. 아이콘만 보여주고 배경을 투명하게 하고 싶을 땐, 헥스 코드에서 투명도를 0%로 지정해주면 된다.
background "#00000000"
9. .rpy 파일 실행(?)
script.rpy 파일에 추가 구현 기능이나 이미지 정의 등을 대사와 같이 저장하기에는 무리일 것이다. script 이외의 .rpy 파일에 있는 함수나 각종 정의들을 call 할 때는 그냥 짓고 싶은 이름의 .rpy 파일을 만들면 알아서 같이 컴파일된다. 렌파이는 .rpy 파일을 동시에 실행하는 것 같다. 코드에서 간혹 init -999 python와 같이 음수의 숫자를 볼 수 있는데, 이 숫자가 코드의 실행 우선순위를 정한다. 숫자가 낮으면 코드의 실행 우선순위가 높다.
10. 스크린 언어
렌파이는 파이썬 기반의 게임 엔진인 건 기본적인 사실이다. 렌파이는 파이썬과 파이썬 기반으로 만들어진 스크린 언어(screen language)를 지원한다. 파이썬이 친근하신 분들은 파이썬으로 각종 UI를 구현해도 되지만, 간단한 UI는 스크린 언어로도 구현이 가능하다.
11. 메시지 기능
미연시 게임이다 보니 메신저로 연락하는 경우가 있을 것이다. 구글에 renpy telegram을 치면, 메신저 창을 구현한 사람이 있다. 그거 가져다 쓰면 된다. 비모 카페에도 카톡 창을 비슷하게 구현하신 분이 있는데, 캐릭터의 stats 데이터를 보관하는 별도의 기능이 있어 나는 중간에 telegram으로 교체했다.
12. UUID 발급 (32자리의 랜덤 아이디)
렌파이 개발자인 파이톰PyTom이 requests 모듈을 github에 올렸다. 거기서 uuid.py 파일을 확인할 수 있다. 사용법도 파일에 적혀있으니 해당 파일을 게임 디렉토리에 넣어놓고 uuid 함수를 가져다 쓰면 된다.
13. requests ... 그리고 third-party 파이썬 모듈
렌파이는 third-party 파이썬 모듈의 경우, 순수하게 파이썬으로만 작성된 모듈을 지원한다. pc 버전에서는 문제가 없는데, 웹/안드에서는 근데 잘 안 되더라. 나중에 다시 해봐야지...
웹 버전 참고는 여기 renpy.beuc.net/
14. 데이터베이스 연동
하고 싶었다. 시간도 없었고 무엇보다 PC 버전은 상관이 없는데, 안드로이드나 웹에서는 requests 라이브러리 사용이 안 먹혀서 넣지 못했다. 게임 프로젝트 경로에 python-package 파일 추가하면 된다는데 잘 모르겠음.
디비에 연동 성공하신 분이 있긴 하다. (검색하면 나옴) 그런데 PC버전이었던 걸로 기억한다.
15. pass
menu나 if문을 사용하다 보면 아무 액션 안 하고 넘어가야 할 때가 있다. pass를 쓰면 된다.
16. modal True
스크린에 이미지 버튼을 만들어서 캐릭터 선택 메뉴를 만들고 싶었다. modal True를 쓰지 않으면, 이미지 버튼 외에 배경을 누를 경우 다음 장면으로 넘어간다. (이미지 버튼 다음에 구현되어있는 코드를 실행한다는 뜻)
modal True 사용 시, 이미지 버튼만 활성화된다. imagemap을 써서 다시 만들어야 하나 했는데, 저 한 줄만 추가하면 돼서 알고 나니 좀 허탈했다.
17. MS Office Icons 그리고 파워포인트
UI를 구성할 때 메뉴 아이콘을 넣고 싶을 때가 있다. 나는 MS 오피스에서 Insert Icon을 사용하여 만들었다. 오피스에서 제공하는 아이콘의 저작권은 무료라고 한다.
안에 톱니바퀴는 아이콘이고, 뒤에 원은 도형으로 그려 넣었다. 하나는 idle(평상시용), 하나는 hover(마우스 올렸을 때 용) 2개 만들었다.
=====================
predict, has, viewport 기능을 익히고 싶었는데 시간이...
이젠 친숙해진 렌파이 캐릭터...
'IT' 카테고리의 다른 글
[렌파이] 배포 준비 전 확인 사항 (0) | 2020.09.29 |
---|---|
[렌파이] 움짤(Animated Image) 넣기 (0) | 2020.09.13 |
[렌파이] 퀵메뉴(Quick Menu) UI 커스텀 (1) | 2020.09.13 |
[Python] json 파일을 csv 파일로 변환하기 (1) | 2020.06.05 |
[Python] Web Crawling for Melon (0) | 2020.06.04 |