mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-03 12:28:03 +08:00
Add example for rotational effect
This commit is contained in:
@ -1,9 +1,12 @@
|
||||
import 'package:flame/effects/move_effect.dart';
|
||||
import 'package:flame/effects/scale_effect.dart';
|
||||
import 'package:flame/effects/rotational_effect.dart';
|
||||
import 'package:flame/gestures.dart';
|
||||
import 'package:flame/position.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flame/flame.dart';
|
||||
import 'package:flame/game.dart';
|
||||
import './square.dart';
|
||||
@ -17,21 +20,29 @@ void main() async {
|
||||
class MyGame extends BaseGame with TapDetector {
|
||||
Square greenSquare;
|
||||
Square redSquare;
|
||||
Square orangeSquare;
|
||||
|
||||
MyGame() {
|
||||
final green = Paint()..color = const Color(0xAA338833);
|
||||
final red = Paint()..color = const Color(0xAA883333);
|
||||
final orange = Paint()..color = const Color(0xAABB6633);
|
||||
greenSquare = Square(green, 100, 100);
|
||||
redSquare = Square(red, 200, 200);
|
||||
orangeSquare = Square(orange, 200, 400);
|
||||
add(greenSquare);
|
||||
add(redSquare);
|
||||
add(orangeSquare);
|
||||
}
|
||||
|
||||
@override
|
||||
void onTapUp(details) {
|
||||
greenSquare.clearEffects();
|
||||
final dx = details.localPosition.dx;
|
||||
final dy = details.localPosition.dy;
|
||||
|
||||
greenSquare.clearEffects();
|
||||
redSquare.clearEffects();
|
||||
orangeSquare.clearEffects();
|
||||
|
||||
greenSquare.addEffect(MoveEffect(
|
||||
destination: Position(dx, dy),
|
||||
speed: 250.0,
|
||||
@ -39,7 +50,7 @@ class MyGame extends BaseGame with TapDetector {
|
||||
isInfinite: true,
|
||||
isAlternating: true,
|
||||
));
|
||||
redSquare.clearEffects();
|
||||
|
||||
redSquare.addEffect(ScaleEffect(
|
||||
size: Size(dx, dy),
|
||||
speed: 250.0,
|
||||
@ -47,5 +58,13 @@ class MyGame extends BaseGame with TapDetector {
|
||||
isInfinite: true,
|
||||
isAlternating: true,
|
||||
));
|
||||
|
||||
orangeSquare.addEffect(RotationalEffect(
|
||||
rotation: (dx + dy) % (2 * pi),
|
||||
speed: 1.0,
|
||||
curve: Curves.easeInOut,
|
||||
isInfinite: true,
|
||||
isAlternating: true,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,16 +6,20 @@ import 'dart:ui';
|
||||
class Square extends PositionComponent {
|
||||
final Paint _paint;
|
||||
|
||||
Square(this._paint, double x, double y) {
|
||||
Square(this._paint, double x, double y, {double angle = 0.0}) {
|
||||
width = 100;
|
||||
height = 100;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.angle = angle;
|
||||
anchor = Anchor.center;
|
||||
}
|
||||
|
||||
@override
|
||||
void render(Canvas canvas) {
|
||||
canvas.translate(x, y);
|
||||
canvas.rotate(angle);
|
||||
canvas.translate(-x, -y);
|
||||
canvas.drawRect(toRect(), _paint);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user