Claude-skill-registry flame-docs

[Flame] Flame engine quick reference. Component lifecycle, Collision, Effects, Camera and core API reference. (project)

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/flame-docs" ~/.claude/skills/majiayu000-claude-skill-registry-flame-docs && rm -rf "$T"
manifest: skills/data/flame-docs/SKILL.md
source content

Flame Engine Quick Reference

Component Lifecycle

onLoad() → onMount() → update(dt)/render(canvas) → onRemove()
MethodTimingPurpose
onLoad()
Once, asyncResource loading, initialization
onMount()
On tree additionSet parent/game references
update(dt)
Every frameState update (dt = delta seconds)
render(canvas)
Every frameDraw to screen
onRemove()
On removalCleanup

Core Classes

ClassPurposeKey Properties/Methods
FlameGame
Game root
pauseEngine()
,
resumeEngine()
,
overlays
World
Hosts game components
add()
,
children
Component
Base component
add()
,
remove()
,
children
,
parent
PositionComponent
Position/size/rotation
position
,
size
,
angle
,
anchor
,
scale
SpriteComponent
Static sprite
sprite
,
paint
SpriteAnimationComponent
Animation
animation
,
playing
CameraComponent
Camera control
follow()
,
moveTo()
,
setBounds()
,
viewport

Shape Components

  • RectangleComponent
    - Rectangle
  • CircleComponent
    - Circle
  • PolygonComponent
    - Polygon

Collision Detection

Enable

// Add to Game or World
class MyGame extends FlameGame with HasCollisionDetection {}

Hitbox Types

HitboxPurpose
RectangleHitbox
Rectangular collision area
CircleHitbox
Circular collision area
PolygonHitbox
Polygon (convex only)
ScreenHitbox
Screen boundaries
CompositeHitbox
Composite hitbox

Collision Callbacks

class MyComponent extends PositionComponent with CollisionCallbacks {
  @override
  void onCollisionStart(Set<Vector2> points, PositionComponent other) {}

  @override
  void onCollision(Set<Vector2> points, PositionComponent other) {}

  @override
  void onCollisionEnd(PositionComponent other) {}
}

Collision Type (Performance)

  • CollisionType.active
    - Checks against all hitboxes
  • CollisionType.passive
    - Only checked by active (better performance)
  • CollisionType.inactive
    - Ignored

Effects System

EffectPurposeExample
MoveEffect.to()
Move to targetCharacter movement
MoveEffect.by()
Move by offsetRelative movement
RotateEffect.to()
Rotate to angleDirection change
ScaleEffect.to()
Change sizeZoom in/out
ColorEffect
Color/opacityHit effect
SequenceEffect
Sequential executionComplex animation
OpacityEffect
OpacityFade in/out

Effect Controller

MoveEffect.to(
  Vector2(100, 100),
  EffectController(duration: 1.0, curve: Curves.easeInOut),
);

Camera & World

Camera Methods

MethodPurpose
follow(target)
Follow target
moveTo(position)
Move to coordinates
moveBy(offset)
Move by offset
stop()
Stop movement
setBounds(shape)
Limit camera movement
canSee(component)
Check visibility

Viewport Types

ViewportPurpose
MaxViewport
Expand to max space (default)
FixedResolutionViewport
Fixed resolution + aspect ratio
FixedAspectRatioViewport
Fixed aspect ratio, scales
FixedSizeViewport
Fixed size

Bridge Packages

flame_riverpod (State Management)

// Game
class MyGame extends FlameGame with RiverpodGameMixin {}

// Component
class MyComponent extends Component with RiverpodComponentMixin {
  @override
  void onMount() {
    super.onMount();
    final state = ref.watch(myProvider);
  }
}

// Widget
RiverpodAwareGameWidget<MyGame>(
  game: game,
)

flame_forge2d (Physics Engine)

class MyGame extends Forge2DGame {}

class MyBody extends BodyComponent {
  @override
  Body createBody() {
    final shape = CircleShape()..radius = 10;
    final fixtureDef = FixtureDef(shape);
    final bodyDef = BodyDef(type: BodyType.dynamic);
    return world.createBody(bodyDef)..createFixture(fixtureDef);
  }
}

flame_audio (Audio)

// Sound effects
FlameAudio.play('explosion.mp3');

// BGM
FlameAudio.bgm.play('background.mp3');
FlameAudio.bgm.stop();
FlameAudio.bgm.pause();
FlameAudio.bgm.resume();

Common Patterns

Add Component

await add(MyComponent());  // In onLoad
add(MyComponent());        // In update

Remove Component

removeFromParent();  // Self
component.removeFromParent();  // Other component

Query Children

children.query<Enemy>();  // Find by type
componentsAtPoint(position);  // Find by position
findByKey(ComponentKey.named('player'));  // Find by key

Priority (Z-order)

class MyComponent extends PositionComponent {
  MyComponent() : super(priority: 10);  // Higher = rendered on top
}

Official Docs