mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-11-04 13:08:09 +08:00 
			
		
		
		
	Fixes
This commit is contained in:
		@ -46,8 +46,8 @@ class MyGame extends Game with MouseMovementDetector {
 | 
				
			|||||||
      _onTarget = _toRect().contains(target.toOffset());
 | 
					      _onTarget = _toRect().contains(target.toOffset());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (!_onTarget) {
 | 
					      if (!_onTarget) {
 | 
				
			||||||
        final dir = (target - position).normalize();
 | 
					        final dir = (target - position).normalized();
 | 
				
			||||||
        position += dir * (SPEED * dt);
 | 
					        position += (SPEED * dt) * dir;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -37,8 +37,8 @@ class MyGame extends Game with ScrollDetector {
 | 
				
			|||||||
  @override
 | 
					  @override
 | 
				
			||||||
  void update(double dt) {
 | 
					  void update(double dt) {
 | 
				
			||||||
    if (target != null) {
 | 
					    if (target != null) {
 | 
				
			||||||
      final dir = (target - position).normalize();
 | 
					      final dir = (target - position).normalized();
 | 
				
			||||||
      position += dir * (SPEED * dt);
 | 
					      position += (SPEED * dt) * dir;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,100 +0,0 @@
 | 
				
			|||||||
import 'dart:ui';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import 'package:ordered_set/comparing.dart';
 | 
					 | 
				
			||||||
import 'package:ordered_set/ordered_set.dart';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import '../game/base_game.dart';
 | 
					 | 
				
			||||||
import 'component.dart';
 | 
					 | 
				
			||||||
import 'mixins/has_game_ref.dart';
 | 
					 | 
				
			||||||
import 'mixins/resizable.dart';
 | 
					 | 
				
			||||||
import 'mixins/tapable.dart';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/// A mixin that helps you to make a `Component` wraps other components. It is useful to group visual components through a hierarchy.
 | 
					 | 
				
			||||||
/// When implemented, makes every item in its `components` collection field be updated and rendered with the same conditions.
 | 
					 | 
				
			||||||
///
 | 
					 | 
				
			||||||
/// Example of usage, where visibility of two components are handled by a wrapper:
 | 
					 | 
				
			||||||
///
 | 
					 | 
				
			||||||
/// ```dart
 | 
					 | 
				
			||||||
///  class GameOverPanel extends PositionComponent with Resizable, ComposedComponent {
 | 
					 | 
				
			||||||
///   bool visible = false;
 | 
					 | 
				
			||||||
///
 | 
					 | 
				
			||||||
///   GameOverText gameOverText;
 | 
					 | 
				
			||||||
///   GameOverButton gameOverButton;
 | 
					 | 
				
			||||||
///
 | 
					 | 
				
			||||||
///   GameOverPanel(Image spriteImage) : super() {
 | 
					 | 
				
			||||||
///     gameOverText = GameOverText(spriteImage); // GameOverText is a Component
 | 
					 | 
				
			||||||
///     gameOverButton = GameOverButton(spriteImage); // GameOverRestart is a SpriteComponent
 | 
					 | 
				
			||||||
///
 | 
					 | 
				
			||||||
///     components..add(gameOverText)..add(gameOverButton);
 | 
					 | 
				
			||||||
///   }
 | 
					 | 
				
			||||||
///
 | 
					 | 
				
			||||||
///   @override
 | 
					 | 
				
			||||||
///   void render(Canvas canvas) {
 | 
					 | 
				
			||||||
///     if (visible) {
 | 
					 | 
				
			||||||
///       super.render(canvas);
 | 
					 | 
				
			||||||
///     } // If not, neither of its `components` will be rendered
 | 
					 | 
				
			||||||
///   }
 | 
					 | 
				
			||||||
/// }
 | 
					 | 
				
			||||||
/// ```
 | 
					 | 
				
			||||||
///
 | 
					 | 
				
			||||||
mixin ComposedComponent on Component, HasGameRef, Tapable {
 | 
					 | 
				
			||||||
  OrderedSet<Component> components =
 | 
					 | 
				
			||||||
      OrderedSet(Comparing.on((c) => c.priority()));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  final List<Component> _removeLater = [];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @override
 | 
					 | 
				
			||||||
  void render(Canvas canvas) {
 | 
					 | 
				
			||||||
    canvas.save();
 | 
					 | 
				
			||||||
    components.forEach((comp) => _renderComponent(canvas, comp));
 | 
					 | 
				
			||||||
    canvas.restore();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void _renderComponent(Canvas canvas, Component c) {
 | 
					 | 
				
			||||||
    if (!c.loaded()) {
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    c.render(canvas);
 | 
					 | 
				
			||||||
    canvas.restore();
 | 
					 | 
				
			||||||
    canvas.save();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @override
 | 
					 | 
				
			||||||
  void update(double t) {
 | 
					 | 
				
			||||||
    _removeLater.forEach((c) => components.remove(c));
 | 
					 | 
				
			||||||
    _removeLater.clear();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    components.forEach((c) => c.update(t));
 | 
					 | 
				
			||||||
    components.removeWhere((c) => c.destroy());
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void add(Component c) {
 | 
					 | 
				
			||||||
    if (gameRef is BaseGame) {
 | 
					 | 
				
			||||||
      (gameRef as BaseGame).preAdd(c);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    components.add(c);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void markToRemove(Component component) {
 | 
					 | 
				
			||||||
    _removeLater.add(component);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // this is an important override for the Tapable mixin
 | 
					 | 
				
			||||||
  @override
 | 
					 | 
				
			||||||
  Iterable<Tapable> tapableChildren() => _findT<Tapable>();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // this is an important override for the Resizable mixin
 | 
					 | 
				
			||||||
  Iterable<Resizable> resizableChildren() => _findT<Resizable>();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Finds all children of type T, recursively
 | 
					 | 
				
			||||||
  Iterable<T> _findT<T>() => components.expand((c) {
 | 
					 | 
				
			||||||
        final List<T> r = [];
 | 
					 | 
				
			||||||
        if (c is T) {
 | 
					 | 
				
			||||||
          r.add(c as T);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (c is ComposedComponent) {
 | 
					 | 
				
			||||||
          r.addAll(c._findT<T>());
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return r;
 | 
					 | 
				
			||||||
      }).cast();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user