From 0f5a564166cfaebb17e62ed0a7a935bda2ff395e Mon Sep 17 00:00:00 2001 From: cakipaul Date: Fri, 17 Jan 2025 21:31:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20animation=20loader=20?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gif/【胖小孩背着残疾小孩】-侧面呼吸.gif | Bin 0 -> 2879 bytes asset/art/gif/【胖小孩背着残疾小孩】-呼吸.gif | Bin 0 -> 3725 bytes .../gif/【胖小孩背着残疾小孩】-正面呼吸.gif | Bin 0 -> 3329 bytes .../gif/【胖小孩背着残疾小孩】-正面抖肩.gif | Bin 0 -> 6716 bytes asset/art/gif/【胖小孩背着残疾小孩】-画画.gif | Bin 0 -> 11547 bytes asset/art/{ => gif}/右1跑动男孩.gif | Bin asset/art/{ => gif}/右1跑动男孩ceshi.gif | Bin config/animation/animation_loader.gd | 4 +- config/animation/animation_loader.tscn | 15 ++- config/animation/frames_config.json | 114 +++++++++++++++++- config/animation/frames_display_card.gd | 66 ++++++---- project.godot | 11 ++ 12 files changed, 179 insertions(+), 31 deletions(-) create mode 100644 asset/art/gif/【胖小孩背着残疾小孩】-侧面呼吸.gif create mode 100644 asset/art/gif/【胖小孩背着残疾小孩】-呼吸.gif create mode 100644 asset/art/gif/【胖小孩背着残疾小孩】-正面呼吸.gif create mode 100644 asset/art/gif/【胖小孩背着残疾小孩】-正面抖肩.gif create mode 100644 asset/art/gif/【胖小孩背着残疾小孩】-画画.gif rename asset/art/{ => gif}/右1跑动男孩.gif (100%) rename asset/art/{ => gif}/右1跑动男孩ceshi.gif (100%) diff --git a/asset/art/gif/【胖小孩背着残疾小孩】-侧面呼吸.gif b/asset/art/gif/【胖小孩背着残疾小孩】-侧面呼吸.gif new file mode 100644 index 0000000000000000000000000000000000000000..792f9bcfb27459e686ab0d9166defa41a64888a3 GIT binary patch literal 2879 zcmdT^X&}_=8lV3xs1r%ulD0A3q%boE!%RklF(D&&a%`8HVTKvZ(#*(^7_zs}LbjOf zl5D9g6|ID$(;|cR?g^F=YF`|Pxs4xzr64J{GZ?Nd7l6Kd!9WuWD^|S0b~X| z*9IN@bsyb>>bjR~ZDNp9m?J%(o)8>H-enwi$V2G1Z|q)5O9FqStE#6c-kM-&YieSN z(etP7HQq%C_VJw=zwcpb$oFIh`E#5s32dsR@s4eW4!VW;xY1l4^bN4SG_QSTCNy`d zw}S=8X^*Sj9^2h`nu`P7oeKINEzQMW?5!O4TbesqVUTDDAg7g^Tqq835?w@>@20!O ze7ct(Qv~;9`mnhK#ANMl1f0zvAe@aTXbRtw$zodv3z++Z?H#>>{k(7t#BMXVsTeQj z@HtEo9WLhhbA@;@0YPW*Jehd;dC81Iz`weP{0Ip1r4R6>n3g;N6OKdb>v^Hk`fy|U z$qf0e=E|DfdxkzY$fdhs|YF`bXnN1~U?`tC@f{C8Il=ZCjYL}mV!?|&o~ItKBX zC@NFP3lMlQ%LdLJ>4(6Iy+vpKY#Z0$?uQbers)Me$>?X@WK6ickeXR-@bLTuC}K7 z#`SAeS1T*Z%Sx}5TrR#;R9KLomz$G)QJR%`AtOC4HRXJA(z&x|PA4XuI(g!Fd|Yfy zbX4TAh;T_*=+TfP!9n7{!vP|p;1Hk3<@o#gvROXfOoo>yop$hmhxTwR==WGj-Tg*kDz8NqZH9%o{VH8M27=%Z0cJzbrhJG8fJZTtIHgeH8; z=1m(nXslOXxAt#qR;#U2U8$nH;+N&iloSbiCbyM<-^Ug;M;v=VmoAd+wj%kR&MR9sT(2or7tJn*M+uC zep-}-M;wccijIkmi$8wiSF5gFzfoONTX*x;?fQm0ckkVQ@UXGzQFBY{Z*7l%fAaL%^Y#}Von0@xdwO5> zz3zWAFzBu_JRCPN0-1=Jn4XEAnT4oE&Ce+-zmJ@QXrNg{6b%vxUXRvpOvti`f+?Ft zx+s~~MXpiQ?1+V%-#rn5)l%zV$K9nEuEgchT&PfbGe;_2w)QL@A&un)cLe2buvx7^}602sjgT0j08dsm1=1 z<^7M0ierFg2p9}4tZ(z^tQL&*KHoq*rl6n!{S2!sXt2HmfC`gN1RioXQ&QO|(RGzD zs{Gm}np&zWhuXkX3p4cqYjR0uB9x>D!`sqX0__i^aYG);n&_1;C zd|Sv2kC4$i@5%sQ$!iBd6I#-ccdd$>B7)AfZxPlKQlt@(nTHuX)qY^HGgKpc?qKAW zxpkgLivq-Z;_8lSXDc=ZnQS-?s0*VDO9xXiviT2J6sbrtskd(OH_#xz)oW- z99T`lHNX@}skvt;7+g32TSKddDL^fVfGv_;f5zi*Py;MNZZDP-ez@ytTgGQ?hGVK<2XlKQ#Pz$67*3M{WN8*FEv!jW=th}fPBR=^jux^cc z6gPfjo+Qmz>B8Ylc;AeoOpW1`*cRKdB3Eu%cyWwFy$fO$bOWGp53Dm@rk;{BUeSUb z8?Ss!){$L(=Hw@<>hLa>UF$wPCcEAjtut|BAlYxCdN_Xrn5+7=Eg1h#ZBec=G!!>H z43WjirlzB(-^sgTZdO@&K5`bKtZta1SY}=;S)s1leH}%&h=6S}(~Sgez7uy$l|@RF zXp+q}R>uw~c}B*r&^8yWNri8&Spfk@t@%*8DKaG#t5x{;iTBOL^rI%j10$<@DdMA8 z!DSGy0i0vsGi?K>c|R?LWcc=+r433_!4;k!Qd)6l5(w&O%=+?vMQ*gvfv_C+(c zKUUW}mVO9*;6^_iES6-%SClBZf(l`Yh=k8QjopCSd%6T_M}ELiQY%Yd4~MGK>XQ^g zX!THcdwv7pPIcXu>}*dX0x)%cI1sMtKumJdplwTI9pHz&u a#j7T2#;=V{)J{FnnXG%)o^GWI+Vv;Hs@{13 literal 0 HcmV?d00001 diff --git a/asset/art/gif/【胖小孩背着残疾小孩】-呼吸.gif b/asset/art/gif/【胖小孩背着残疾小孩】-呼吸.gif new file mode 100644 index 0000000000000000000000000000000000000000..1abd9c6ff6bd279d20ac694f1ac6be482986d01d GIT binary patch literal 3725 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 literal 0 HcmV?d00001 diff --git a/asset/art/gif/【胖小孩背着残疾小孩】-正面抖肩.gif b/asset/art/gif/【胖小孩背着残疾小孩】-正面抖肩.gif new file mode 100644 index 0000000000000000000000000000000000000000..e7d473320a6715870c82c51d29ac68274c6b836c GIT binary patch literal 6716 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 E0S;XVy#N3J literal 0 HcmV?d00001 diff --git a/asset/art/gif/【胖小孩背着残疾小孩】-画画.gif b/asset/art/gif/【胖小孩背着残疾小孩】-画画.gif new file mode 100644 index 0000000000000000000000000000000000000000..b582023a7352818f72e59b063e39deff7b36138c GIT binary patch literal 11547 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 void: frames_speed_line_edit.text = str(frames_per_sec) first_frame_mapping_edit.text = first_frame_mapping mirror_mapping_edit.text = mirror_mapping - reload_frames() + display_frames() mapping_line_edit.text_submitted.connect(_on_mapping_submitted) frames_speed_line_edit.text_submitted.connect(_on_frames_speed_submitted) first_frame_mapping_edit.text_submitted.connect(_on_first_frame_mapping_submitted) @@ -34,6 +34,19 @@ func _ready() -> void: var reload_lock := Mutex.new() +func display_frames(): + if mapping_name and animated_sprite.sprite_frames.has_animation(mapping_name): + animated_sprite.play(mapping_name) + # scale down if the frame is too big + var frame_size = animated_sprite.sprite_frames.get_frame_texture(mapping_name, 0).get_size() + if frame_size.x > 128 or frame_size.y > 128: + var ratio = min(128 / frame_size.x, 128 / frame_size.y) + animated_sprite.scale = Vector2(ratio, ratio) + reload_lock.unlock() + else: + reload_frames() + + func reload_frames(): # 暂不启用,使用手动调整 # return @@ -67,28 +80,9 @@ func reload_frames(): var frame_texture = load(frame_path) as Texture2D sprite_frames.add_frame(mapping_name, frame_texture) sprite_frames.set_animation_speed(mapping_name, frames_per_sec) - # mirror the frame - if mirror_mapping != "": - # mkdir the mirror mapping - var mirror_dir_path = "res://asset/art/animation/" + mirror_mapping - if !DirAccess.dir_exists_absolute(mirror_dir_path): - DirAccess.make_dir_absolute(mirror_dir_path) - var mirrored_frame = frame_texture.duplicate() as Texture2D - var flipped_image = mirrored_frame.get_image() as Image - flipped_image.flip_x() - var flipped_img_path = mirror_dir_path + "/" + id + ".png" - flipped_image.resource_path = flipped_img_path - flipped_image.save_png(flipped_img_path) - sprite_frames.add_frame(mirror_mapping, load(flipped_img_path)) - sprite_frames.set_animation_speed(mapping_name, frames_per_sec) - animated_sprite.play(mapping_name) - # scale down if the frame is too big - var frame_size = sprite_frames.get_frame_texture(mapping_name, 0).get_size() - if frame_size.x > 128 or frame_size.y > 128: - var ratio = min(128 / frame_size.x, 128 / frame_size.y) - animated_sprite.scale = Vector2(ratio, ratio) - reload_lock.unlock() _save_and_update_frames_and_config() + if mapping_name and animated_sprite.sprite_frames.has_animation(mapping_name): + display_frames() func _on_mapping_submitted(new_text: String): @@ -133,11 +127,37 @@ func _on_mirror_mapping_submitted(new_text: String): sprite_frames.remove_animation(mirror_mapping) mirror_mapping = new_text frames_config.data.mirror_mapping[frame_dir_name] = mirror_mapping - reload_frames() + _create_mirror() mirror_mapping_edit.release_focus() _save_and_update_frames_and_config() +func _create_mirror(): + if not mirror_mapping: + return + var mirror_dir_path = "res://asset/art/animation/" + mirror_mapping + if !DirAccess.dir_exists_absolute(mirror_dir_path): + DirAccess.make_dir_absolute(mirror_dir_path) + else: + DirAccess.remove_absolute(mirror_dir_path) + DirAccess.make_dir_absolute(mirror_dir_path) + var sprite_frames = animated_sprite.sprite_frames as SpriteFrames + # {"path": "", "frames": {}, "ids": []} + var frames_data = frames_config.data.dirs[frame_dir_name] + for id in frames_data.ids: + var frame_path = frames_data.frames[id] as String + var frame_texture = load(frame_path) as Texture2D + # mkdir the mirror mapping + var mirrored_frame = frame_texture.duplicate() as Texture2D + var flipped_image = mirrored_frame.get_image() as Image + flipped_image.flip_x() + var flipped_img_path = mirror_dir_path + "/" + id + ".png" + flipped_image.resource_path = flipped_img_path + flipped_image.save_png(flipped_img_path) + sprite_frames.add_frame(mirror_mapping, load(flipped_img_path)) + sprite_frames.set_animation_speed(mapping_name, frames_per_sec) + + func _save_and_update_frames_and_config(): # save the sprite_frames if animated_sprite: diff --git a/project.godot b/project.godot index eb945023..f03ba76d 100644 --- a/project.godot +++ b/project.godot @@ -76,6 +76,17 @@ enabled=PackedStringArray("res://addons/debug_menu/plugin.cfg", "res://addons/di theme/custom="res://config/default_theme.tres" theme/custom_font="res://asset/font/zpix-commercial-one-grand.ttf" +[importer_defaults] + +gif.animated.texture.plugin={ +"Filter": false, +"MipMaps": false +} +import_gif_to_animated_texture={} +import_gif_to_sprite_frames={ +"frames_per_second": 30 +} + [input] save={