mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-03 20:36:31 +08:00
* Refactor joystick * Fix directional tests * Joystick example * Any PositionComponent can be used as knob and background * Add MarginButtonComponent * Fix JoystickExample * Update joystick docs * Fix joystick direction tests * Fix effect tests * Fix analyze issue * Update docs * Update docs * Move joystick to input export * Update packages/flame/lib/src/geometry/shape.dart Co-authored-by: Luan Nico <luanpotter27@gmail.com> * Add test and description for screenAngle * Update examples/lib/stories/controls/joystick_player.dart Co-authored-by: Erick <erickzanardoo@gmail.com> * Update doc/input.md Co-authored-by: Erick <erickzanardoo@gmail.com> * controls -> input in examples to align with export file * controls -> input * Add simple joystick example * Fix imports * velocity -> relativeDelta Co-authored-by: Luan Nico <luanpotter27@gmail.com> Co-authored-by: Erick <erickzanardoo@gmail.com>
58 lines
1.5 KiB
Dart
58 lines
1.5 KiB
Dart
import 'package:flame/extensions.dart';
|
|
import 'package:flame/input.dart';
|
|
import 'package:flame_forge2d/flame_forge2d.dart';
|
|
import 'package:flame_forge2d/forge2d_game.dart';
|
|
|
|
import 'balls.dart';
|
|
import 'boundaries.dart';
|
|
import 'circle_stress_sample.dart';
|
|
|
|
class MouseJointSample extends Forge2DGame with MultiTouchDragDetector {
|
|
late Ball ball;
|
|
late Body groundBody;
|
|
MouseJoint? mouseJoint;
|
|
|
|
MouseJointSample() : super(gravity: Vector2(0, -10.0));
|
|
|
|
@override
|
|
Future<void> onLoad() async {
|
|
await super.onLoad();
|
|
final boundaries = createBoundaries(this);
|
|
boundaries.forEach(add);
|
|
|
|
final center = screenToWorld(viewport.effectiveSize / 2);
|
|
groundBody = world.createBody(BodyDef());
|
|
ball = Ball(center, radius: 5);
|
|
add(ball);
|
|
add(CornerRamp(center));
|
|
add(CornerRamp(center, isMirrored: true));
|
|
}
|
|
|
|
@override
|
|
bool onDragUpdate(int pointerId, DragUpdateInfo details) {
|
|
final mouseJointDef = MouseJointDef()
|
|
..maxForce = 3000 * ball.body.mass * 10
|
|
..dampingRatio = 0.1
|
|
..frequencyHz = 5
|
|
..target.setFrom(ball.body.position)
|
|
..collideConnected = false
|
|
..bodyA = groundBody
|
|
..bodyB = ball.body;
|
|
|
|
mouseJoint ??= world.createJoint(mouseJointDef) as MouseJoint;
|
|
|
|
mouseJoint?.setTarget(details.eventPosition.game);
|
|
return false;
|
|
}
|
|
|
|
@override
|
|
bool onDragEnd(int pointerId, DragEndInfo details) {
|
|
if (mouseJoint == null) {
|
|
return true;
|
|
}
|
|
world.destroyJoint(mouseJoint!);
|
|
mouseJoint = null;
|
|
return false;
|
|
}
|
|
}
|