mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-04 04:47:13 +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/move_effect.dart';
|
||||||
import 'package:flame/effects/scale_effect.dart';
|
import 'package:flame/effects/scale_effect.dart';
|
||||||
|
import 'package:flame/effects/rotational_effect.dart';
|
||||||
import 'package:flame/gestures.dart';
|
import 'package:flame/gestures.dart';
|
||||||
import 'package:flame/position.dart';
|
import 'package:flame/position.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:flame/flame.dart';
|
import 'package:flame/flame.dart';
|
||||||
import 'package:flame/game.dart';
|
import 'package:flame/game.dart';
|
||||||
import './square.dart';
|
import './square.dart';
|
||||||
@ -17,21 +20,29 @@ void main() async {
|
|||||||
class MyGame extends BaseGame with TapDetector {
|
class MyGame extends BaseGame with TapDetector {
|
||||||
Square greenSquare;
|
Square greenSquare;
|
||||||
Square redSquare;
|
Square redSquare;
|
||||||
|
Square orangeSquare;
|
||||||
|
|
||||||
MyGame() {
|
MyGame() {
|
||||||
final green = Paint()..color = const Color(0xAA338833);
|
final green = Paint()..color = const Color(0xAA338833);
|
||||||
final red = Paint()..color = const Color(0xAA883333);
|
final red = Paint()..color = const Color(0xAA883333);
|
||||||
|
final orange = Paint()..color = const Color(0xAABB6633);
|
||||||
greenSquare = Square(green, 100, 100);
|
greenSquare = Square(green, 100, 100);
|
||||||
redSquare = Square(red, 200, 200);
|
redSquare = Square(red, 200, 200);
|
||||||
|
orangeSquare = Square(orange, 200, 400);
|
||||||
add(greenSquare);
|
add(greenSquare);
|
||||||
add(redSquare);
|
add(redSquare);
|
||||||
|
add(orangeSquare);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onTapUp(details) {
|
void onTapUp(details) {
|
||||||
greenSquare.clearEffects();
|
|
||||||
final dx = details.localPosition.dx;
|
final dx = details.localPosition.dx;
|
||||||
final dy = details.localPosition.dy;
|
final dy = details.localPosition.dy;
|
||||||
|
|
||||||
|
greenSquare.clearEffects();
|
||||||
|
redSquare.clearEffects();
|
||||||
|
orangeSquare.clearEffects();
|
||||||
|
|
||||||
greenSquare.addEffect(MoveEffect(
|
greenSquare.addEffect(MoveEffect(
|
||||||
destination: Position(dx, dy),
|
destination: Position(dx, dy),
|
||||||
speed: 250.0,
|
speed: 250.0,
|
||||||
@ -39,7 +50,7 @@ class MyGame extends BaseGame with TapDetector {
|
|||||||
isInfinite: true,
|
isInfinite: true,
|
||||||
isAlternating: true,
|
isAlternating: true,
|
||||||
));
|
));
|
||||||
redSquare.clearEffects();
|
|
||||||
redSquare.addEffect(ScaleEffect(
|
redSquare.addEffect(ScaleEffect(
|
||||||
size: Size(dx, dy),
|
size: Size(dx, dy),
|
||||||
speed: 250.0,
|
speed: 250.0,
|
||||||
@ -47,5 +58,13 @@ class MyGame extends BaseGame with TapDetector {
|
|||||||
isInfinite: true,
|
isInfinite: true,
|
||||||
isAlternating: 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 {
|
class Square extends PositionComponent {
|
||||||
final Paint _paint;
|
final Paint _paint;
|
||||||
|
|
||||||
Square(this._paint, double x, double y) {
|
Square(this._paint, double x, double y, {double angle = 0.0}) {
|
||||||
width = 100;
|
width = 100;
|
||||||
height = 100;
|
height = 100;
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
|
this.angle = angle;
|
||||||
anchor = Anchor.center;
|
anchor = Anchor.center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void render(Canvas canvas) {
|
void render(Canvas canvas) {
|
||||||
|
canvas.translate(x, y);
|
||||||
|
canvas.rotate(angle);
|
||||||
|
canvas.translate(-x, -y);
|
||||||
canvas.drawRect(toRect(), _paint);
|
canvas.drawRect(toRect(), _paint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user