mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-11-04 04:47:13 +08:00 
			
		
		
		
	This adds a platformer tutorial called Ember Quest. I hope I have done a service, because I am tired, lol. I am sure there will be comments. I just want to say, I did my best. I approached this as someone new to Flame, just like I was about 10 months ago. Are there concepts that can be improved, sure. We can always optimize code, but I didn't want any concepts to be super abstract. I had never coded a game before when I began my journey with Flame this year, so things might be a bit simple for experienced game developers, but for myself, I had never even thought about a game loop or animations, etc.
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:flame/collisions.dart';
 | 
						|
import 'package:flame/components.dart';
 | 
						|
import 'package:flame/effects.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
 | 
						|
import '../ember_quest.dart';
 | 
						|
 | 
						|
class Star extends SpriteComponent with HasGameRef<EmberQuestGame> {
 | 
						|
  final Vector2 gridPosition;
 | 
						|
  double xOffset;
 | 
						|
 | 
						|
  final Vector2 velocity = Vector2.zero();
 | 
						|
 | 
						|
  Star({
 | 
						|
    required this.gridPosition,
 | 
						|
    required this.xOffset,
 | 
						|
  }) : super(size: Vector2.all(64), anchor: Anchor.center);
 | 
						|
 | 
						|
  @override
 | 
						|
  Future<void> onLoad() async {
 | 
						|
    final starImage = game.images.fromCache('star.png');
 | 
						|
    sprite = Sprite(starImage);
 | 
						|
    position = Vector2(
 | 
						|
      (gridPosition.x * size.x) + xOffset + (size.x / 2),
 | 
						|
      game.size.y - (gridPosition.y * size.y) - (size.y / 2),
 | 
						|
    );
 | 
						|
    add(RectangleHitbox()..collisionType = CollisionType.passive);
 | 
						|
    add(
 | 
						|
      SizeEffect.by(
 | 
						|
        Vector2(-24, -24),
 | 
						|
        EffectController(
 | 
						|
          duration: .75,
 | 
						|
          reverseDuration: .5,
 | 
						|
          infinite: true,
 | 
						|
          curve: Curves.easeOut,
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  void update(double dt) {
 | 
						|
    velocity.x = game.objectSpeed;
 | 
						|
    position += velocity * dt;
 | 
						|
    if (position.x < -size.x || game.health <= 0) {
 | 
						|
      removeFromParent();
 | 
						|
    }
 | 
						|
    super.update(dt);
 | 
						|
  }
 | 
						|
}
 |