mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-11-01 01:18:38 +08:00 
			
		
		
		
	 cdb2650b29
			
		
	
	cdb2650b29
	
	
	
		
			
			* Create RandomEffectController * added tests * added example * documentation * formatting * fix a test * formatting Co-authored-by: Erick <erickzanardoo@gmail.com>
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'dart:math';
 | |
| 
 | |
| import 'package:flame/components.dart';
 | |
| import 'package:flame/effects.dart';
 | |
| import 'package:flame/game.dart';
 | |
| import 'package:flame/input.dart';
 | |
| import 'package:flame/palette.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| 
 | |
| class ScaleEffectExample extends FlameGame with TapDetector {
 | |
|   static const String description = '''
 | |
|     In this example you can tap the screen and the component will scale up or
 | |
|     down, depending on its current state.
 | |
|     
 | |
|     The star pulsates randomly using a RandomEffectController.
 | |
|   ''';
 | |
| 
 | |
|   late RectangleComponent square;
 | |
|   bool grow = true;
 | |
| 
 | |
|   @override
 | |
|   Future<void> onLoad() async {
 | |
|     await super.onLoad();
 | |
|     square = RectangleComponent.square(
 | |
|       size: 100,
 | |
|       position: Vector2.all(200),
 | |
|       paint: BasicPalette.white.paint()..style = PaintingStyle.stroke,
 | |
|     );
 | |
|     final childSquare = RectangleComponent.square(
 | |
|       position: Vector2.all(70),
 | |
|       size: 20,
 | |
|     );
 | |
|     square.add(childSquare);
 | |
|     add(square);
 | |
| 
 | |
|     add(
 | |
|       Star()
 | |
|         ..position = Vector2(200, 100)
 | |
|         ..add(
 | |
|           ScaleEffect.to(
 | |
|             Vector2.all(1.2),
 | |
|             InfiniteEffectController(
 | |
|               SequenceEffectController([
 | |
|                 LinearEffectController(0.1),
 | |
|                 ReverseLinearEffectController(0.1),
 | |
|                 RandomEffectController.exponential(
 | |
|                   PauseEffectController(1, progress: 0),
 | |
|                   beta: 1,
 | |
|                 ),
 | |
|               ]),
 | |
|             ),
 | |
|           ),
 | |
|         ),
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void onTap() {
 | |
|     final s = grow ? 3.0 : 1.0;
 | |
| 
 | |
|     grow = !grow;
 | |
| 
 | |
|     square.add(
 | |
|       ScaleEffect.to(
 | |
|         Vector2.all(s),
 | |
|         EffectController(
 | |
|           duration: 1.5,
 | |
|           curve: Curves.bounceInOut,
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 | |
| 
 | |
| class Star extends PositionComponent {
 | |
|   Star() {
 | |
|     const smallR = 15.0;
 | |
|     const bigR = 30.0;
 | |
|     const tau = 2 * pi;
 | |
|     shape = Path()..moveTo(bigR, 0);
 | |
|     for (var i = 1; i < 10; i++) {
 | |
|       final r = i.isEven ? bigR : smallR;
 | |
|       final a = i / 10 * tau;
 | |
|       shape.lineTo(r * cos(a), r * sin(a));
 | |
|     }
 | |
|     shape.close();
 | |
|   }
 | |
| 
 | |
|   late final Path shape;
 | |
|   late final Paint paint = Paint()..color = const Color(0xFFFFF127);
 | |
| 
 | |
|   @override
 | |
|   void render(Canvas canvas) {
 | |
|     canvas.drawPath(shape, paint);
 | |
|   }
 | |
| }
 |