IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[canvas] Déplacement d'éléments sur un terrain


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2014
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 4
    Points : 7
    Points
    7
    Par défaut [canvas] Déplacement d'éléments sur un terrain
    Bonjour les gens du forum

    Je suis débutant en canvas et je m'amuse à créer une map avec des joueurs évoluant dessus.

    Je me suis inspiré d'un code qui débute l'animation directement avec une succession de position. C'est joli mais pas tout à fait ce que j'aimerai.

    Voici mon CodePen

    Déjà j'aimerai que l'animation de chaque joueur parte sur l'appui d'un bouton. Et à chaque appuis, que le joueur aille à une autre position défini par x et y.
    Je n'ai rien trouvé de concluant sur le net et ce code est celui qui se rapproche le plus du rendu final.

    Si quelqu'un peux m'aiguiller un peu ce serai top !

    Merci à tous

  2. #2
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Ce sont des maths...
    Après, voici une solution pour aller d'un point pt1 à un point pt2 en ligne droite.
    Il est tard et je n'ai pas le temps de terminer l'exemple mais tu as une approche...Utilise évidemment requestAnimationFrame...

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>trajectoire</title>
     <style>
        html,body {
            margin: 0;
            padding: 0;
        }
        div{
            display: grid;
            place-items: center;
            height: 100vh;
        }
        canvas{
            border:1px solid black;
        }
    </style>
    </head>
    <body>
    <div>
        <canvas id="myCanvas">
            <p>votre navigateur ne supporte pas Canvas. Mettez-vous à jour</p>
        </canvas>
    </div>
    <script>
        const canvas = document.getElementById('myCanvas');
        const ctx = canvas.getContext('2d');
        canvas.width =.8*window.innerHeight;
        canvas.height =.8*window.innerHeight;
        let taille=canvas.width;
     
        class Point{
            constructor(x,y){
                this.x=x;
                this.y=y;
            }
        }
     
        
        let pt1=new Point(taille/4,taille/4),   //position initiale du sprite
            pt2=new Point(3*taille/4,3*taille/4); // position finale
     
        //sprite
        ctx.beginPath();
        ctx.fillStyle = '#F00';
        ctx.arc(pt1.x, pt1.y, 20, 0, Math.PI * 2);
        ctx.fill();
        ctx.closePath();
     
     
        //dessin des points
        function croix(p){
            ctx.moveTo(p.x-10,p.y);
            ctx.lineTo(p.x+10,p.y);
            ctx.moveTo(p.x,p.y-10);
            ctx.lineTo(p.x,p.y+10);
            ctx.stroke();
        }
        croix(pt1);
        croix(pt2);
     
        const vx=30;//vitesse suivant x en pixels/s
        const dt=20; 
        let t=0;
     
       
     
        function trajectoire(pti,ptf,t){
            let pente=(ptf.y-pti.y)/(ptf.x-pti.x),
                x=vx*t+pti.x,
                y=pente*x;
            return new Point(x,y);
        }
     
        setInterval(()=>{
           t+=dt*.001;
           let ps=trajectoire(pt1,pt2,t);
           ctx.beginPath();
           //je te laisse poursuivre...  ps.x et ps.y sont les coordonnées de ton sprite en déplacement - A toi de l'arrêter en position
           // pt2 avec une condition.
        }, dt);
       
    </script>
    </body>
    </html>

Discussions similaires

  1. Afficher une élément dans un Canvas après un clic sur un bouton
    Par D-Day dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 28/02/2010, 19h39
  2. déplacement d'éléments dans une page
    Par lieto dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 08/06/2006, 12h02
  3. Pb de déplacement des éléments d'un select à un autre
    Par enimiste dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/06/2006, 19h11
  4. deplacement sur un terrain en 3D
    Par kouax dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 14/05/2006, 16h12
  5. 2 éléments sur une même ligne
    Par ben_iap dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/11/2004, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo