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

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-01 05:44:02769parcourir

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>

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>

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>

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>

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!

Déclaration:
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