Maison > Java > javaDidacticiel > le corps du texte

Comment obtenir un mouvement d'objet échelonné en Java : utiliser des minuteries et des retards pour un effet Fruit Ninja ?

Susan Sarandon
Libérer: 2024-11-01 05:44:02
original
836 Les gens l'ont consulté

How to Achieve Staggered Object Movement in Java: Utilizing Timers and Delays for a Fruit Ninja Effect?

Objets en mouvement et minuteries

Dans ce contexte, vous souhaitez que les objets apparaissent aléatoirement depuis le bas de l'écran, montent jusqu'à une certaine hauteur , puis redescendez d'une manière similaire au jeu Fruit Ninja. Cependant, vous rencontrez un problème où tous les objets démarrent en même temps en raison de l'absence de délais échelonnés.

Solution :

Pour pallier à ce problème, vous pouvez introduire des délais spécifiques à chaque objet. Vous trouverez ci-dessous une explication d'une approche possible utilisant une classe Shape avec un ActionListener effectuant le mouvement en fonction d'un compteur de retard décroissant.

1. Classe de forme avec retard et logique de mouvement :

<code class="java">class Shape {

    private int randomDelayedStart;
    private boolean draw = false;
    private boolean down = false;
    private int y = D_HEIGHT; // Initial position at the bottom of the screen

    public void decreaseDelay() {
        if (randomDelayedStart <= 0) {
            draw = true;
        } else {
            randomDelayedStart -= 1;
        }
    }

    public void move() {
        if (draw) {
            if (y <= 50) {
                down = true;
            }

            if (down) {
                y += INCREMENT;
            } else {
                y -= INCREMENT;
            }
        }
    }
}</code>
Copier après la connexion

2. Initialisation aléatoire pour chaque forme :

Lors de la création de chaque objet Shape, vous pouvez attribuer aléatoirement une valeur de retard :

<code class="java">for (int i = 0; i < 20; i++) {
    int randXLoc = random.nextInt(D_WIDTH);
    int randomDelayedStart = random.nextInt(100);
    Shape shape = new Shape(randXLoc, randomDelayedStart);
    list.add(shape);
}</code>
Copier après la connexion

3. ActionListener pour déclencher le mouvement des formes :

Dans un seul Timer, un ActionListener peut parcourir toutes les formes, décrémenter leurs compteurs de retard et invoquer leurs méthodes de mouvement. :

<code class="java">ActionListener taskPerformer = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        for (Shape s : shapes) {
            s.decreaseDelay();
            s.move();
            repaint();
        }
    }
};</code>
Copier après la connexion

4. Démarrage de la minuterie :

Après avoir initialisé toutes les formes, démarrez la minuterie pour lancer le mouvement continu :

<code class="java">timer.start();</code>
Copier après la connexion

Cette approche permet des retards et des mouvements indépendants pour chaque forme, garantissant que ils apparaissent et se déplacent de manière décalée, ressemblant au comportement souhaité dans Fruit Ninja.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal