mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-11-04 04:47:13 +08:00 
			
		
		
		
	* Animations, CameraAndViewport, CollisionDetection and Components unified * Added descriptions to effects * Rename input games * Unify input stories * Add info to parallax section * Added descriptions to the rendering examples * Add descriptions to the sprites directory * Fix utils and rendering section * Add descriptions to the widgets section * Delete directory that rebase brought back * Unify game names * Added some styleguide docs for examples * Fix analyze issues * All files should have _example as suffix * Made the FollowComponentExample a bit easier to understand * Change priority of ember
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:flame/components.dart';
 | 
						|
import 'package:flame/game.dart';
 | 
						|
 | 
						|
enum ButtonState { unpressed, pressed }
 | 
						|
 | 
						|
class SpriteGroupExample extends FlameGame with HasTappables {
 | 
						|
  static const String description = '''
 | 
						|
    In this example we show how a `SpriteGroupComponent` can be used to create
 | 
						|
    a button which displays different sprites depending on whether it is pressed
 | 
						|
    or not.
 | 
						|
  ''';
 | 
						|
 | 
						|
  @override
 | 
						|
  Future<void> onLoad() async {
 | 
						|
    await super.onLoad();
 | 
						|
    add(
 | 
						|
      ButtonComponent()
 | 
						|
        ..position = size / 2
 | 
						|
        ..size = Vector2(200, 50)
 | 
						|
        ..anchor = Anchor.center,
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class ButtonComponent extends SpriteGroupComponent<ButtonState>
 | 
						|
    with HasGameRef<SpriteGroupExample>, Tappable {
 | 
						|
  @override
 | 
						|
  Future<void> onLoad() async {
 | 
						|
    await super.onLoad();
 | 
						|
    final pressedSprite = await gameRef.loadSprite(
 | 
						|
      'buttons.png',
 | 
						|
      srcPosition: Vector2(0, 20),
 | 
						|
      srcSize: Vector2(60, 20),
 | 
						|
    );
 | 
						|
    final unpressedSprite = await gameRef.loadSprite(
 | 
						|
      'buttons.png',
 | 
						|
      srcSize: Vector2(60, 20),
 | 
						|
    );
 | 
						|
 | 
						|
    sprites = {
 | 
						|
      ButtonState.pressed: pressedSprite,
 | 
						|
      ButtonState.unpressed: unpressedSprite,
 | 
						|
    };
 | 
						|
 | 
						|
    current = ButtonState.unpressed;
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  bool onTapDown(_) {
 | 
						|
    current = ButtonState.pressed;
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  bool onTapUp(_) {
 | 
						|
    current = ButtonState.unpressed;
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  bool onTapCancel() {
 | 
						|
    current = ButtonState.unpressed;
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
}
 |