#HFrames
Nice to see the export land. Worth checking in the PNG that all four directions share the same cell size and pivot, so the sheet drops straight into Unity's grid slice or Godot's hframes/vframes without trimming. A 1 px transparent gutter between cells also stops bleed when the sheet is filtered.
October 29, 2026 at 9:09 AM
For example, here's the card flip animation code before and after clean-up.
It's still probably able to be optimised more, but it is way more readable than the previous code.
February 19, 2026 at 12:47 PM
ultimately i can just also just divide by hframes/vframes and will finally have the right answer, but now i am basically doing everything in what feels like a very hacky way, i am sure theres a better way of doing it but that would require me to invert the relationships of a bunch of other things3/n
September 16, 2025 at 9:31 PM
Odd behaviour with AnimationPlayer when it played a non-looping animation
### Godot Version `v4.3.stable.mono.official [77dcf97d8]` ### Question I have a really odd behaviour with my AnimationPlayer that I honestly never ran into before. I have a few very basic animations that animate a Sprite2D’s Frames, as well as change it’s Texture, HFrames and VFrames at the very first keyframe when changing from one animation to the other. This works great, and has worked for me for a long time before, but today I ran into an issue I never discovered before just when I started to rework how my AI moves, so I wanted to start simple and just rework it’s basic animation states. Here’s the code I have for it so far: using System; using Godot; namespace GameName.Scripts.Entities.AI; public partial class AiAnimationController : AnimationPlayer { [Export] private GameCharacterEntity _character; public override void _Process(double delta) { base._Process(delta); Action transitionAction = GetTransitionAction(); transitionAction?.Invoke(); } private void PlayIfNotPlaying(string animationName) { if (CurrentAnimation != animationName) { Play(animationName); } } private Action GetTransitionAction() { return CurrentAnimation switch { "Idle" when Math.Abs(_character.Velocity.X) > 0 => () => PlayIfNotPlaying("Walk"), "Walk" when Math.Abs(_character.Velocity.X) == 0 => () => PlayIfNotPlaying("Idle"), ("Walk" or "Idle") when !_character.IsOnFloor() && _character.Velocity.Y < 0 => () => PlayIfNotPlaying("Jump"), ("Walk" or "Idle") when !_character.IsOnFloor() && _character.Velocity.Y > 0 => () => PlayIfNotPlaying("FallLoop"), "Jump" when !_character.IsOnFloor() && _character.Velocity.Y >= 0 => () => PlayIfNotPlaying("FallInit"), "FallInit" when Math.Abs(CurrentAnimationLength - CurrentAnimationPosition) < 0.2 => () => PlayIfNotPlaying("FallLoop"), ("FallInit" or "FallLoop" or "Jump") when _character.IsOnFloor() => () => PlayIfNotPlaying("Idle"), _ => () => { } }; } } What I noticed is that this works great, up until I play an animation that was non-looping, such as the jump animation. As soon as that happens, no matter how I call the `Play()` method afterwards, no other animations will ever play, and it’ll be stuck on the last frame of the animation that wasn’t set to loop. Is this intended behaviour or am I missing something?
forum.godotengine.org
February 16, 2025 at 2:01 PM
As in, like from a spritesheet? You'd use the Animation properties, in this example the spritesheet has 10 sprites, so setting Hframes to 10 will allow you to use the Frame property to select an individual one.

Can't say anything towards the performance impact of AnimatedSprite2D though, donno.
November 21, 2024 at 5:17 AM
H Frames Scaffolding in Bangalore 🏗️
Ideal for safe working platforms and access support in construction, plastering, painting & maintenance.

Learn more: vibrantscaffolding.blogspot.com/2026/08/h-fr...

#HFrames #Scaffolding #Bangalore #Construction
H Frames, Cuplock Scaffolding, Telescopic Props & Acrow Spans in Bangalore: Complete Construction Support Solutions
Top scaffolding manufacturers in Bangalore offering H-frames, shuttering sheets & cuplock systems for sale or rental with assured safety. Call now!
vibrantscaffolding.blogspot.com
August 13, 2026 at 4:09 AM