품종 스프라이트 8종 재생성본 적용 (다리 5개 문제 해결)
- 앉은 자세 idle·측면 뷰 걷기·단일 앞발 work·양발 숟가락 cook으로 해부학 오류를 원천 차단한 재생성 시트로 전량 교체 - 걷기: 측면 보폭 교대 2프레임 복원 (200ms), 기울임 보정 제거 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
이 커밋은 다음에 포함됨:
@@ -529,8 +529,7 @@ export default function VillageView({
|
||||
y: anim.y,
|
||||
draw: () => {
|
||||
shadow(anim.x, anim.y + 2, 11);
|
||||
// 걷기는 프레임 교대 대신 한 프레임 + 총총 바운스 + 미세 기울임
|
||||
// (두 걷기 프레임의 몸통 각도가 달라 교대 시 도리도리처럼 보이는 문제 회피)
|
||||
// 걷기: 측면 보폭 교대 2프레임 (재생성 시트는 몸통이 고정되어 교대 가능)
|
||||
const atKitchen =
|
||||
working &&
|
||||
state.buildings.find((b) => b.id === cat.assignedTo)?.type === "kitchen";
|
||||
@@ -539,7 +538,9 @@ export default function VillageView({
|
||||
? "cook"
|
||||
: "work"
|
||||
: moving
|
||||
? "walk1"
|
||||
? Math.floor(now / 200) % 2 === 0
|
||||
? "walk1"
|
||||
: "walk2"
|
||||
: "idle";
|
||||
// 품종 스프라이트 → (cook 없으면 work) → 기본 스프라이트 순 폴백
|
||||
let sprite = getImage(catSprite(cat.breed, frameName));
|
||||
@@ -552,10 +553,8 @@ export default function VillageView({
|
||||
if (sprite) {
|
||||
const sh = 42;
|
||||
const sw = (sprite.width / sprite.height) * sh;
|
||||
const tilt = moving ? Math.sin(now / 150) * 0.06 : 0;
|
||||
ctx.save();
|
||||
ctx.translate(anim.x, anim.y + bob);
|
||||
ctx.rotate(tilt);
|
||||
if (anim.flip) ctx.scale(-1, 1);
|
||||
ctx.drawImage(sprite, -sw / 2, -sh + 4, sw, sh);
|
||||
ctx.restore();
|
||||
|
||||
새 이슈에서 참조
사용자 차단