모래게임 Sandrop TIL 21
하트 회복 시계
레벨에 들어갔다 나오면 30분이 다시 시작됐다
하트를 하나 쓰고 남은 시간을 보다가, 레벨에 들어갔다 아무것도 안 하고 나와 보니 30분이 처음부터 다시 돌고 있었다.
하트는 30분에 하나씩 찬다. 그 30분을 어디서부터 세느냐를 “하트에 관한 가장 최근 기록”으로 잡고 있었다. 레벨에 들어가면 하나 빠지고, 그냥 나오면 하나 돌아온다. 둘 다 하트에 관한 기록이라 들락거릴 때마다 기준이 지금으로 밀렸다. 들어가기만 해도 밀렸다.
두 가지를 한 값으로 다룬 게 원인이었다.
- 하트를 쓰고 받는 일
- 회복 시계가 도는 일
시계는 가득 찬 상태에서 내려온 순간부터 돌고, 그 사이에 하트를 쓰든 광고로 받든 박자가 바뀌면 안 된다. 기준을 “가득 찬 상태에서 내려온 순간”으로 바꿨다.
- 시간이 걸린 값은 “언제부터 세는가”가 규칙이다. 그 기준이 무엇에 흔들리는지 따로 본다
- 비슷해 보이는 두 사건(하트가 움직였다 / 시계가 시작됐다)을 한 신호로 묶으면, 한쪽이 일어날 때마다 다른 쪽이 흔들린다
고치자마자 표시가 크게 달라진다
이 게임은 앞선 TIL 1에서 정한 대로 하트 개수를 저장하지 않고 변화 기록만 쌓는다. 이번 수정은 저장된 기록은 그대로 두고 기록을 읽는 방식만 바꿨다. 그래서 이미 쌓인 기록에도 새 규칙이 소급된다.
- 옮기는 작업이 필요 없고 앱을 새로 깔 필요도 없다
- 대신 예전 규칙으로 밀려 있던 값이 제자리를 찾으면서 한 번은 남은 시간이 확 달라져 보인다. 버그처럼 보이지만 정상이다
기록은 사실이고, 거기서 무엇을 읽어낼지는 나중에 바꿀 수 있다. 그래서 이 구조에서 나는 실수는 무엇을 저장했느냐보다 무엇을 읽어냈느냐에서 나온다.
- 읽는 규칙만 바꾸면 과거에도 적용된다. 바꾼 직후 한 번 튀는 값은 미리 알고 있어야 버그로 오해하지 않는다
할 일 목록에 남아 있던 것
고치려던 것이 이미 고쳐져 있었다
할 일에 “광고가 나오는 동안 배경음악이 겹쳐 난다”가 남아 있었다. 원인 설명까지 적혀 있었다. “광고는 앱을 뒤로 보내지 않으니 소리가 자동으로 안 멈춘다.”
고치러 들어가기 전에 실기기에서 직접 확인해 보니 이미 멈췄다가 광고가 끝나면 다시 났다. 며칠 전 붓는 소리가 안 멈추던 문제를 고치면서, 앱이 앞에 없으면 소리를 멈추는 판정을 넓혀 둔 덕이었다. 전체화면 광고는 자기 화면을 띄우므로 앱이 앞에서 물러난 것으로 잡힌다. 적어 둔 원인 설명이 틀렸던 것이다.
계획대로 광고 쪽에 소리를 멈추고 다시 켜는 처리를 따로 붙였다면, 같은 일을 두 경로가 하면서 멈췄다 켜졌다 했을 것이다. 특히 보상형 광고는 닫히는 순간과 보상이 들어오는 순간이 얽혀 있어 사고가 날 자리였다.
- 오래 남은 할 일은 착수 전에 아직 재현되는지부터 본다. 그 사이에 관련된 곳을 손댔다면 더 그렇다
- 원인 설명이 그럴듯하게 적혀 있을수록 의심하기 어렵다. 적힌 원인은 적었을 때의 짐작이다
- 이 판정은 전체화면 광고에만 해당한다. 화면 한쪽에 붙는 배너 광고는 자기 화면을 안 띄우므로, 붙이게 되면 그때 따로 봐야 한다
자석 아이콘
알아볼 수 없는 자석이 그대로 나가 있었다
아이템 아이콘 셋 중 자석은 Claude가 처음에 알아서 그린 모양이 그대로 들어가 있었다. 가는 선으로 U자를 그리고 양 끝에 잔가지 네 개를 붙인 모양인데, 아이템 바에서 쓰는 크기에서는 뭔지 알아볼 수가 없었다. 잔가지 사이 여백이 선 두께보다 좁아져 한 덩어리로 뭉쳐 있었다. 다시 그려 달라고 했다.
다시 그린 자석은 선 대신 면으로, 속이 빈 두꺼운 고리 모양이다. 끝부분은 몸통에서 살짝 띄웠다. 붙이면 그냥 U자로 읽힌다. 전보다 확실히 나아서 마음에 든다.
되돌리기와 셔플 아이콘은 그대로 뒀다. 그쪽은 화살표라 획 자체가 뜻이다.
- 알아서 그려 넣은 것도 결국 내가 봐야 한다. 안 보고 넘긴 자리는 알아볼 수 없는 채로 나간다
- 획이 뜻을 나르는 아이콘은 선이 맞고, 덩어리 자체가 형태인 아이콘은 면이 맞다
- 아이콘은 실제로 쓰는 크기에서 본다. 큰 화면에서만 보면 뭉개지는 걸 못 본다
- 앞선 TIL 9에서 강조는 선보다 면이 세다고 했는데, 작은 아이콘의 형태도 같은 결이었다
Font Awesome을 쓰려다 직접 그리기로 했다
처음엔 Font Awesome(널리 쓰는 무료 아이콘 묶음)의 자석을 쓰고 싶었다. 출처만 밝히면 상업 앱에도 쓸 수 있는 조건이라 쓸 수는 있었지만, 표기 의무가 하나 더 생기는 게 걸려서 망설였다. Claude가 이 정도 모양은 직접 그리는 편이 간단하다고 해서 그러기로 했다.
- “무료”와 “조건 없음”은 다르다. 조건이 출처 표기 하나뿐이면 쓸 만하지만, 그 목록을 계속 관리해야 한다
- 직접 그릴 수 있는 단순한 모양이면 그리는 쪽이 가볍다