diff --git a/src/App.vue b/src/App.vue index 9cb8954..57fb720 100644 --- a/src/App.vue +++ b/src/App.vue @@ -183,8 +183,9 @@ const updateSpritePosition = (id: string, x: number, y: number) => { const spriteIndex = sprites.value.findIndex(sprite => sprite.id === id); if (spriteIndex !== -1) { - sprites.value[spriteIndex].x = x; - sprites.value[spriteIndex].y = y; + // Ensure integer positions for pixel-perfect rendering + sprites.value[spriteIndex].x = Math.floor(x); + sprites.value[spriteIndex].y = Math.floor(y); } }; @@ -442,24 +443,31 @@ x = 0; break; case 'center': - x = (maxWidth - sprite.width) / 2; + x = Math.floor((maxWidth - sprite.width) / 2); break; case 'right': - x = maxWidth - sprite.width; + x = Math.floor(maxWidth - sprite.width); break; case 'top': y = 0; break; case 'middle': - y = (maxHeight - sprite.height) / 2; + y = Math.floor((maxHeight - sprite.height) / 2); break; case 'bottom': - y = maxHeight - sprite.height; + y = Math.floor(maxHeight - sprite.height); break; } - return { ...sprite, x, y }; + // Ensure integer positions for pixel-perfect rendering + return { ...sprite, x: Math.floor(x), y: Math.floor(y) }; }); + + // Force redraw of the preview canvas + setTimeout(() => { + const event = new Event('forceRedraw'); + window.dispatchEvent(event); + }, 0); }; const updateSpriteCell = (id: string, newIndex: number) => { diff --git a/src/assets/tut.mp4 b/src/assets/tut.mp4 index 3f8e9b7..bc1af4c 100644 Binary files a/src/assets/tut.mp4 and b/src/assets/tut.mp4 differ diff --git a/src/components/SpriteCanvas.vue b/src/components/SpriteCanvas.vue index 85657f4..4b20250 100644 --- a/src/components/SpriteCanvas.vue +++ b/src/components/SpriteCanvas.vue @@ -20,7 +20,7 @@