스프라이트
client/sprites/<이름>.json. 몸이 어떻게 생겼는지입니다.
{
"image": "client/art/hero.png",
"frameWidth": 24, "frameHeight": 32,
"columns": 4, "margin": 1, "spacing": 2,
"frameCount": 8,
"offsetY": 2,
"animations": {
"idle": { "frames": [1, 1, 1, 2], "fps": 3 },
"run": { "frames": [5, 6, 7, 8], "fps": 10 },
"jump": { "frames": [3], "loop": false },
"fall": { "frames": [4], "loop": false }
}
}
client/ 아래에 있습니다. 서버는 이 파일을 열지 않습니다 — 어떻게 생겼는지는
어디에 설 수 있는지와 아무 상관이 없고, 그림이 있어야 점프를 판정할 수 있는
게임 서버는 그래픽 카드 없이는 못 도는 게임 서버입니다.
image |
시트 경로 |
frameWidth frameHeight |
한 프레임의 크기 |
columns margin spacing frameCount |
시트를 어떻게 자르는지. 타일셋과 같습니다 |
offsetX offsetY |
몸의 위치가 프레임 안 어디인지 |
어느 애니메이션이 도는지는 말하지 않습니다
이름이 솔버의 상태 이름입니다: idle run jump fall climb dash
wallSlide swim. 서버가 이미 몸이 무엇을 하는 중인지 보내고 있으므로,
run 이라는 애니메이션을 그려 두면 몸이 달릴 때 그것이 돕니다. 언제 바꾸라고
쓸 곳이 없습니다.
시트에 없는 이름은 idle 로 떨어집니다. 그래서 애니메이션 하나짜리 스프라이트도
정상입니다 — 서 있기만 하는 캐릭터는 나머지를 그리는 동안 배포할 수 있는
캐릭터입니다.
loop: false 는 마지막 프레임에서 멈춥니다. 점프가 반복되면 캐릭터가 공중에서
팔을 퍼덕입니다.
몸에 붙이기
서버에서, 이름으로:
Map.spawn({
sprite = "hero",
halfWidth = 7, halfHeight = 15,
}, x, y)
와이어에는 숫자만 갑니다 — 맵이 자기가 쓰는 스프라이트 이름 목록을 들고 있고, 몸은 그 목록의 몇 번째인지를 1바이트로 실어 보냅니다. 그 1바이트는 몸이 처음 나타날 때 한 번 가고, 그 뒤로는 가지 않습니다.
방향
속도로 정합니다. 왼쪽으로 가면 뒤집히고, 멈추면 보던 쪽을 유지합니다. 멈출 때마다 오른쪽을 보게 하면 점프 꼭대기마다 모든 캐릭터가 한 방향으로 돌아섭니다.
여백
타일셋과 같은 이유로 margin / spacing 을 두고 프레임
가장자리를 한 픽셀 바깥으로 복사해 두세요. 없으면 프레임이 화면 픽셀에 정확히
얹히지 않는 순간 옆 프레임을 함께 읽습니다.