# Squelette de Projet Universel ![Projet](projet.png) # Multi-plateformes - Multi-entrées *Valéry Bruniaux - 21 Mars 2018*
# ![Tux](tux.png) Sommaire ![Tux](tux.png) --- ### But du squelette de projet
### Architecture du projet
### L'animation
### Gestion des Events
### Détection des collisions
### Conclusion et améliorations
## ![Tux](tux.png) Ce que je vais apprendre ![Tux](tux.png) --- #### [Parcours de formation HTML/CSS/JS (Sept. à déc.)](http://ens-info.irem.univ-mrs.fr/?p=26)
#### Éviter le syndrome de la page blanche
#### Obtenir un résultat "bleeding-edge technology" ;-) (Smartphone, tablette, pilotage accéléromètre, etc.)
#### Travailler des technologies modernes et d'avenir
#### [Volontairement non finalisé...](projet/index.html)
## ![Tux](tux.png) Architecture du projet ![Tux](tux.png) ---
#### HTML et CSS ➫ Canvas + JavaScript
#### JavaScript - Initialisation des Canvas et Context - Callbacks des Events - Animation - Dessin - Gestion des collisions
## ![Tux](tux.png) L'animation ![Tux](tux.png) ---
#### Lancement de la boucle d'animation (onload) setInterval(animate,20); #### Boucle d'animation function animate() // Animation core { avance_position(); if ( isCollision() ) { // Collision : Que faire ? } else { // Pas de collision : Que faire ? } dessine(); }
## ![Tux](tux.png) Gestion des Events - 1 ![Tux](tux.png) --- ##### Gestion de la souris ```JavaScript window.onmousemove=function(event) // Mouse control { direction = ["",""]; if ( event.clientX - posX ≻ mouseSensibility ) direction[0] = "D" else if ( event.clientX - posX ≺ -mouseSensibility ) direction[0] = "G" ... } ``` ##### Gestion du clavier ```JavaScript window.onkeydown=function(event) // At key pressed { switch ( event.keyCode ) { case 39 : direction[0] = "D"; break; case 40 : direction[1] = "B"; break; ... } } window.onkeyup=function(event) // At key released { if ( event.keyCode == 39 || event.keyCode == 37 ) direction[0] = "" else if ( event.keyCode == 38 || event.keyCode == 40 ) direction[1] = "" } ```
## ![Tux](tux.png) Gestion des Events - 2 ![Tux](tux.png) ---
#### Gestion de l'inclinaison (onload) ```javascript window.addEventListener('deviceorientation', function(event) { tiltLR = event.gamma; // Get the left-to-right tilt (in degrees). titleFB = event.beta; // Get the front-to-back tilt (in degrees). //direction = event.alpha; // Get the direction of the device (in degrees). if ( tiltLR ≻ angleLimite ) direction[0] = "D" else if ( tiltLR ≺ -angleLimite ) direction[0] = "G" else direction[0] = ""; if ( titleFB ≻ angleLimite ) direction[1] = "B" else if ( titleFB ≺ -angleLimite ) direction[1] = "H" else direction[1] = "" }, false); ```
## ![Tux](tux.png) Détection des collisions ![Tux](tux.png) ---

function isCollision()      // Check for color detection
{
    var photo = backgroundContext.getImageData(posX, posY,largeurcarre,largeurcarre);

    for (var i = 0 ; i < photo.data.length ; i += 4)
    {
        // test rouge
        if (photo.data[i] == 237 && photo.data[i+1] == 28 && photo.data[i+2] == 36)
        {
            alert("Rouge !");
            return true;
        }

        // test bleu
        if (photo.data[i] == 63 && photo.data[i+1] == 72 && photo.data[i+2] == 204 )
        {
            alert("Bleu !");
            return true;
        }

        // test noir
        if (photo.data[i] == 0 && photo.data[i+1] == 0 && photo.data[i+2] == 0 )
        {
            alert("Noir !");
            return true;
        }
    }   
    return false;
}
## ![Tux](tux.png) Conclusion et améliorations ![Tux](tux.png) --- #### Démarrage rapide
#### Squelette flexible
#### Pas assez "responsive"
#### Travailler "en ligne" avant...
#### [Résultats plaisants :-)](http://isnrimbaud.esy.es/)