mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-10-31 08:56:01 +08:00 
			
		
		
		
	Unify examples structure (#1118)
* 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
This commit is contained in:
		
							
								
								
									
										78
									
								
								examples/lib/stories/input/multitap_advanced_example.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								examples/lib/stories/input/multitap_advanced_example.dart
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,78 @@ | ||||
| import 'package:flame/extensions.dart'; | ||||
| import 'package:flame/game.dart'; | ||||
| import 'package:flame/input.dart'; | ||||
| import 'package:flame/palette.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
|  | ||||
| /// Showcases how to mix two advanced detectors | ||||
| class MultitapAdvancedExample extends FlameGame | ||||
|     with MultiTouchTapDetector, MultiTouchDragDetector { | ||||
|   static const String description = ''' | ||||
|     This showcases the use of both `MultiTouchTapDetector` and | ||||
|     `MultiTouchDragDetector` simultaneously. Drag multiple fingers on the screen | ||||
|     to see rectangles of different sizes being drawn. | ||||
|   '''; | ||||
|  | ||||
|   static final whitePaint = BasicPalette.white.paint(); | ||||
|   static final tapSize = Vector2.all(50); | ||||
|  | ||||
|   final Map<int, Rect> taps = {}; | ||||
|  | ||||
|   Vector2? start; | ||||
|   Vector2? end; | ||||
|   Rect? panRect; | ||||
|  | ||||
|   @override | ||||
|   void onTapDown(int pointerId, TapDownInfo info) { | ||||
|     taps[pointerId] = info.eventPosition.game.toPositionedRect(tapSize); | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   void onTapUp(int pointerId, _) { | ||||
|     taps.remove(pointerId); | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   void onTapCancel(int pointerId) { | ||||
|     taps.remove(pointerId); | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   void onDragCancel(int pointerId) { | ||||
|     end = null; | ||||
|     start = null; | ||||
|     panRect = null; | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   void onDragStart(int pointerId, DragStartInfo info) { | ||||
|     end = null; | ||||
|     start = info.eventPosition.game; | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   void onDragUpdate(int pointerId, DragUpdateInfo info) { | ||||
|     end = info.eventPosition.game; | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   void onDragEnd(int pointerId, _) { | ||||
|     final start = this.start, end = this.end; | ||||
|     if (start != null && end != null) { | ||||
|       panRect = start.toPositionedRect(end - start); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   void render(Canvas canvas) { | ||||
|     final panRect = this.panRect; | ||||
|     super.render(canvas); | ||||
|     taps.values.forEach((rect) { | ||||
|       canvas.drawRect(rect, whitePaint); | ||||
|     }); | ||||
|  | ||||
|     if (panRect != null) { | ||||
|       canvas.drawRect(panRect, whitePaint); | ||||
|     } | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Lukas Klingsbo
					Lukas Klingsbo