From 328760853c15c44d1de915d6c88e0dfd7ddc5af6 Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Tue, 29 Sep 2026 10:38:53 +0800 Subject: p72: 角色行走四向动画帧提升(6 走 + 2 待机) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CharacterArt 运行时点阵图集从 4 走 + 2 待机扩为 6 走(新增左右低过渡步 4/5,由 1/2 镜像)+ 2 待机,格数 *8、图集 5120x48;VillageArt 帧循环 %6、characterSourceRectangle *8、characterAtlasWidth 5120。同步 P45/Prototype 帧断言、新增 P72 帧表完整性回归、脚本与素材重新生成、维护说明动画语义。白天正午村庄行走实跑证据落 docs/evidence/p72-*。Desktop 343/343、Kernel 120/120、digest 与 p70 一致。 --- src/LivingVillage.Desktop/CharacterArt.fs | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'src/LivingVillage.Desktop/CharacterArt.fs') diff --git a/src/LivingVillage.Desktop/CharacterArt.fs b/src/LivingVillage.Desktop/CharacterArt.fs index 9d02baf..bfe86ad 100644 --- a/src/LivingVillage.Desktop/CharacterArt.fs +++ b/src/LivingVillage.Desktop/CharacterArt.fs @@ -5,8 +5,9 @@ open Microsoft.Xna.Framework.Graphics /// P45 角色动画帧:全部原创手绘点阵,用像素代码内嵌生成图集,不依赖任何外部素材。 /// 布局与既有 `characterSourceRectangle` 完全一致:cell 32x48, -/// cellIndex = (variant*4 + direction)*6 + frame,共 5 变体 x 4 向 x 6 帧。 -/// direction 顺序 North/South/West/East(0..3),frame 顺序 走1/走2/走3/走4/待机1/待机2(0..5)。 +/// cellIndex = (variant*4 + direction)*8 + frame,共 5 变体 x 4 向 x 8 帧。 +/// direction 顺序 North/South/West/East(0..3), +/// frame 顺序 走1..走6/待机1/待机2(0..7);P72 将行走由 4 帧提升为 6 帧(含左右过渡步)。 module CharacterArt = let sourceWidth = 16 @@ -16,8 +17,8 @@ module CharacterArt = let cellHeight = sourceHeight * pixelScale let variantCount = 5 let directionCount = 4 - let frameCount = 6 - let walkFrameCount = 4 + let frameCount = 8 + let walkFrameCount = 6 let idleFrameCount = 2 let atlasWidth = cellWidth * variantCount * directionCount * frameCount @@ -102,6 +103,13 @@ module CharacterArt = "....BBBBBBBB...." "....RRRRRRRR...." ] + let private mirrorRow (row: string) : string = + System.String(row.ToCharArray() |> Array.rev) + + /// P72 过渡步:走 5/6 为走 2/3 的左右镜像,形成「左-右」对称的六帧循环。 + let private torsoWalk4 : string list = torsoWalk1 |> List.map mirrorRow + let private torsoWalk5 : string list = torsoWalk2 |> List.map mirrorRow + let private torsoIdle1 : string list = [ "...SRRRRRRRRS..." "...SRRRRRRRRS..." @@ -123,7 +131,8 @@ module CharacterArt = "....RRRRRRRR...." "....RRRRRRRR...." ] - /// 腿(6 行,行 18..23):四帧行走跨步姿态各不相同,待机两帧双脚并拢。 + /// 腿(6 行,行 18..23):六帧行走跨步姿态各不相同,待机两帧双脚并拢。 + /// 走 5/6 为走 2/3 的左右镜像(P72 过渡步),使左右跨步对称。 let private legsWalk0 : string list = [ "....RRRRRRRR...." "...RRRRRRRRRR..." @@ -154,7 +163,10 @@ module CharacterArt = ".....RRRRRR....." ".....RRR.RR....." ".....RRR.FF....." - ".....FFF........" ] + ".......FFFF....." ] + + let private legsWalk4 : string list = legsWalk1 |> List.map mirrorRow + let private legsWalk5 : string list = legsWalk2 |> List.map mirrorRow let private legsIdle : string list = [ "....RRRRRRRR...." @@ -165,13 +177,10 @@ module CharacterArt = ".....FFF.FF....." ] let private torsoByFrame : string list list = - [ torsoWalk0; torsoWalk1; torsoWalk2; torsoWalk3; torsoIdle1; torsoIdle2 ] + [ torsoWalk0; torsoWalk1; torsoWalk2; torsoWalk3; torsoWalk4; torsoWalk5; torsoIdle1; torsoIdle2 ] let private legsByFrame : string list list = - [ legsWalk0; legsWalk1; legsWalk2; legsWalk3; legsIdle; legsIdle ] - - let private mirrorRow (row: string) : string = - System.String(row.ToCharArray() |> Array.rev) + [ legsWalk0; legsWalk1; legsWalk2; legsWalk3; legsWalk4; legsWalk5; legsIdle; legsIdle ] let private headByDirection : string list list = [ headNorth; headSouth; headWest; headWest |> List.map mirrorRow ] -- cgit v1.2.3