Aplicacions amb Flutter, Dart i Flame

Tutorial Flutter Flame Projectes   Recursos CITCEA
Exemples Dart Dades pràctiques     Inici

Components

Els components són els elements que podem agregar al nostre joc. Normalment definim elements nous com a extensió dels components bàsics. Els tipus més habituals són:

Component Descripció Comentaris
PositionComponent Element genèric Requereix sobrescriure el mètode render que en defineix la forma
RectangleComponent Element rectangular Entre altres usos, s'empra com a àrea de joc
CircleComponent Element circular Adequat per representar boles i projectils

Els components solen tenir diversos paràmetres. No tots tenen els mateixos paràmetres. Els paràmetres més habituals són:

Paràmetre Descripció Comentaris
position Vector que defineix la posició
size Vector que defineix la mida
radius Radi En els elements circulars
cornerRadius Radi de curvatura de les cantonades
anchor Punt de l'element que correspon a la posició Les opcions possibles són:
  Anchor.bottomCenter   Inferior al mig
  Anchor.bottomLeft   Inferior a l'esquerra
  Anchor.bottomRight   Inferior a la dreta
  Anchor.center   Centrat al mig
  Anchor.centerLeft   Centrat a l'esquerra
  Anchor.centerRight   Centrat a la dreta
  Anchor.topCenter   Superior al mig
  Anchor.topLeft   Superior a l'esquerra
  Anchor.topRight   Superior a la dreta
paint Estableix el format (color, estil, etc.)

Els components tenen un mètode update, que ens és útil quan necessitem que es moguin al llarg del temps. Aquest mètode té un paràmetre anomenat dt que correspon al concepte de durada del fotograma. Llavors, sabent la velocitat vectorial, podem calcular la nova posició.

...
  @override
  void update(double dt) {
    super.update(dt);
    position += velocity * dt;
  }
...

Els mètodes onDragUpdate (corresponent al ratolí) i moveBy (corresponent al teclat) permeten definir el moviment del component.

Fer desaparèixer components

Podem fer que un component desaparegui quan ja no és necessària la seva presència. Podem posar la instrucció en la definició de les col·lisions del component.

...
  @override
  void onCollisionStart(
...
    removeFromParent();
...

Sovint, però, voldrem un cert retard (en segons); perquè l'usuari tingui una percepció més clara del que ha passat o per esperar que l'element deixi de ser visible abans d'eliminar-lo.

...
import 'package:flame/effects.dart';
...
...
  @override
  void onCollisionStart(
...
    add(RemoveEffect(delay: 0.35));  // 0,35 s
...

En alguns casos, però, ens caldrà eliminar altres components que no són el que ha detectat la col·lisió. Llavors cal anar a l'arbre del joc a cercar l'element.

...
  game.world.removeAll(game.world.children.query<Bola>());
...

Important: Els elements són eliminats a l'acabar el fotograma actual, abans de començar el següent. Això vol dir que just després de les instruccions removeFromParent, RemoveEffect i removeAll el component encara hi és.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.