[JAVA] Explication détaillée Acteur (libGDX)

Le développement avec libGDX utilise souvent une classe appelée Actor ou une sous-classe d'Actor. Examinons à nouveau cette classe.

supposition

Scene2D en général. Je pense que la personne qui a appelé cet article par shinsan68k peut comprendre ce que j'ai recherché et écrit.

Bases de LibGDX 5 Utilisation de Scene2D par shinsan68k

Qu'est-ce qu'un acteur

Actor est l'un des composants de la fonction de libGDX appelée Scene2D pour créer des jeux 2D. Eh bien, en fait, c'est une classe Java.

Les acteurs sont des nœuds dans le graphe de scène Scene2D (une arborescence de tous les objets placés dans l'espace) et ont une structure hiérarchique. Vous pouvez créer une structure hiérarchique avec une sous-classe d'acteur pouvant contenir un acteur appelé Groupe.

image)

scend2dgraph.png

Par exemple, si vous y réfléchissez dans l'image ci-dessous, vous pouvez considérer les couvercles, les bouteilles, les boissons à l'intérieur, les étiquettes, etc. comme des acteurs. Le Groupe est un groupe qui les combine en une seule bouteille de saké. Le groupe est également une sous-classe d'acteur, on peut donc dire qu'il s'agit d'un type d'acteur.

Illustration du saké japonais pétillant-Irasutoya

Voici un code source très simplifié. (En fait, il faut ajouter l'image correspondante, ajuster la position, ajuster la taille, etc.)


package sample;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Group;

/**
 * Created by yy_yank on 2017/01/22.
 */
public class SparklingNihonsyu extends Group {

    public SparklingNihonsyu() {
        init();
    }

    public void init() {
        Actor cap = new Actor(); //couvercle
        Actor bottle = new Actor(); //bouteille
        Actor label = new Actor(); //étiquette
        Actor sparklingAlcohol = new Actor(); //Saké
        addActor(cap);
        addActor(bottle);
        addActor(label);
        addActor(sparklingAlcohol);
    }
}

Si vous ajoutez ce Sparkling Nihonsyu à un acteur dans un autre endroit, ces acteurs seront ajoutés au graphique de la scène et vous serez heureux de pouvoir afficher du saké n'importe où. Acteur (ou Groupe) est utilisé comme ça.

Avez-vous déjà utilisé Photoshop, GIMP ou tout autre outil de peinture capable de gérer plusieurs calques comme ça? Le groupe est proche de cette couche.

Le grand avantage de Group est que le changement de taille appliqué à Group est appliqué à tous les acteurs des éléments enfants. Par conséquent, si vous utilisez setScale (0.5f) pour un saké étincelant, vous pouvez conserver l'agrandissement de l'image de la bouteille, de l'étiquette et du couvercle.

Champ de classe de l'acteur

position (x, y), taille rectangulaire, origine (originX, originY), échelle (scaleX, scaleY), rotation, couleur (la valeur par défaut est nouvelle couleur (1, 1, 1, 1)), parent Autres domaines privés

Méthode de l'acteur

Tout comme si vous jetiez un œil à javadoc. .. Class Actor

Système de cycle de vie

C'est une méthode de dessin, mais c'est une implémentation vide

Appelé lors de la mise à jour d'un acteur. Notez qu'il est appelé chaque image.

Renvoie une instance de lui-même lorsqu'il est touché dans les coordonnées x, y dessinées de l'acteur

Opération d'état

Effacez-vous du graphique de la scène

Ajouter / supprimer des écouteurs d'événements

Ajouter / supprimer une action

Renvoie un tableau de tous les inscrits

Que vous ayez une action

Supprimer l'Aciton enregistré

Supprimer l'auditeur enregistré

Supprimer tous les auditeurs

Supprimer l'action et l'écouteur enregistrés

Système de notification d'état

Comme il est protégé, si vous le remplacez, vous serez averti lorsque chaque état changera

Système de conversion de coordonnées

Convertit les coordonnées de l'écran en coordonnées locales de l'acteur. L'arborescence est appelée récursivement de la scène à l'acteur (Coordonnées de la scène → Coordonnées locales de l'instance d'acteur 1 → Coordonnées locales de l'instance d'acteur 2 ... → Coordonnées locales de l'instance d'acteur N

Contrairement à screenToLocalCoordinates, la conversion des coordonnées est lancée à partir du parent de l'acteur qui a appelé cette méthode.

Convertit les coordonnées locales de l'acteur en coordonnées de la scène. C'est l'opposé de screenToLocalCoordinates. Il se propage de l'enfant au parent.

Cette méthode convertit les coordonnées de l'acteur en coordonnées du parent supérieur suivant.

Il est utilisé lorsque vous souhaitez connaître les coordonnées d'un acteur spécifique. Il s'agit d'une conversion de coordonnées de l'acteur actuel vers l'acteur spécifié.

Appelé lors de la conversion des coordonnées d'un élément parent en élément enfant Actor. En regardant l'implémentation, il semble qu'il soit censé être appelé lors de la conversion de Stage (root) à Actor.

Événement en deux phases

Actor a deux types d'événements. La phase de capture et la phase normale.

Phase de capture

Il peut être utile de décrire la phase de capture comme un intercepteur avant que l'événement ne soit notifié.

Il est utilisé lorsque le parent gère et annule l'événement avant que l'événement ne se produise dans le flux suivant.

Stade → Acteur 1 → Acteur 2 → Acteur où l'événement se produit

Phase normale

La phase normale est un événement de clic très courant. Dans ce cas, la gestion des événements n'est possible que pour l'acteur où l'événement se produit. De plus, la direction de la flèche est inversée et la propagation est telle qu'elle monte de l'acteur à la scène (c'est-à-dire l'itinéraire).

Stade ← Acteur 1 ← Acteur 2 ← Acteur où l'événement se produit

Je pense qu'il y a plus d'auditeurs dans la phase normale lorsque l'on considère lequel utiliser. Cependant, il semble qu'un mécanisme puisse être bien créé en utilisant l'écouteur de capture si nécessaire.

Auditeur arrêter et annuler

Les événements d'écoute fournissent des méthodes d'arrêt et d'annulation. stop = arrêter la propagation cancel = Annuler la propagation et ne faire aucun traitement (rembobinage)

En d'autres termes, le flux tel que décrit ci-dessus s'arrête. Cela semble être à la fois une phase de capture / normale.

//Phase de capture. Non transmis à Actor2
Stage → Actor 1 → stop!!→ x Acteur 2 → Acteur où l'événement se produit
//Phase normale. Non transmis à Actor2
Stage ← Actor 1 ← Actor 2 x ← stop!!← Acteur où l'événement se produit

Portée Scene2D

Compte tenu de la portée de Scene2D (qui peut inclure l'intégralité de la libGDX) Application = champ d'application Stage = Portée de la session Acteur = Voir la portée Je pense que c'est comme ça.

L'acteur est une interprétation élargie. Cela dépend de l'échelle de l'acteur, et c'est une classe assez abstraite, donc je ne pense pas pouvoir le dire. Si vous pensez que c'est un écran ou un composant, je pense que ce n'est pas hors de propos.

Application est une interface appelée com.badlogic.gdx.Application. Il gère les informations et le cycle de vie de chaque plateforme. ApplicationListener ou ApolicationAdapater est spécialisé uniquement pour le cycle de vie appelé depuis Application, et je pense qu'une classe appelée XXXGame sera créée avec gdx-setup.jar, mais s'il s'agit d'une classe implémentée pense.

Stage est l'élément racine de l'arborescence Scene2D qui regroupe les acteurs. Il gère les événements d'entrée et ainsi de suite.

Avantages et inconvénients de l'acteur

Quelles sont les forces et les faiblesses?

Il y a un tel échange dans le débordement de pile.

When to use actors in libgdx? What are cons and pros? - stack overflow

Il semble que ce soit une histoire sur le moment d'utiliser Actor, en commençant par ce qu'il faut faire correctement avec Stage et Actor.

Avantages

Vous pouvez facilement implémenter des animations et des effets à l'aide de la classe Actions

Les acteurs peuvent être regroupés et utilisés sur chaque écran ou composant

Stage hit renvoie toujours le premier acteur (avec acteur) qui implémente la méthode hit. L'acteur effectue une itération pour une méthode de hit et renvoie null s'il n'est pas trouvé.

hit est utilisé comme méthode de Stage, mais dans l'événement tactile d'Actor, les coordonnées locales d'Actor sont transmises depuis Stage.

La scène enveloppe et gère également les objets. Par exemple, pour empêcher les autres acteurs de recevoir l'événement touchDown, seul l'acteur avec l'événement est notifié et l'autre acteur contenu dans l'acteur est arrêté sans notifier l'événement touchDown. Dans le même temps, l'acteur averti de l'événement se concentre.

Désavantages

Je pense qu'il est assez important de gérer l'état de l'interface utilisateur et l'état du jeu. De plus, puisque Stage est la racine, cela dépendra de Stage pour demander des informations.

Différence entre acteur et sprite

Un autre est le matériau de débordement de pile.

libgdx difference between sprite and actor

Quelle est la différence entre Sprite et Actor? Alors c'est tout.

Sprite

Actor

Lorsque vous touchez libGDX pour la première fois, cela devient quelque chose comme un écran, et la configuration de l'interface utilisateur est également très simple, vous n'avez donc besoin que de Sprite, non? Vous n'avez pas besoin d'un acteur, non? Cela a tendance à l'être, mais la réponse est bonne.

Ce genre de comparaison est une expérience d'apprentissage.

Les classes d'interface utilisateur à usage général telles que la classe Text sont fournies dans scene2d.ui. https://github.com/libgdx/libgdx/wiki/Scene2d.ui

Résumé

Je l'ai écrit de manière décousue, mais je vais le résumer brièvement.

URL de référence

Recommended Posts

Explication détaillée Acteur (libGDX)
Introduction à Ratpack (3) - Explication détaillée de Hello World