Direction créative

Introduction

2024 - 2025

C'est quoi la créativité ?

Wikipédia

La créativité est — de façon générale — la capacité à imaginer et mettre en œuvre un concept neuf, un objet nouveau, à combiner des idées existantes ou à découvrir une solution originale à un problème. Elle combine donc deux dimensions: imagination et efficacité

ChatGPT

La créativité est la capacité d'imaginer et de générer des idées originales en sortant des schémas traditionnels, souvent pour résoudre des problèmes ou créer quelque chose de nouveau.

L'approche
Nintendo

Nintendo est passé maitre dans l'art de repenser l'utilisation des technologies existantes pour offrir des expériences ludiques uniques. L'entreprise privilégie la réinterprétation de technologies éprouvées afin de révolutionner le gameplay et d'élargir son public.

La manette Wii

Tout le monde (ou presque) a déjà utiliser une manette de Wii. Elle a permis de transformer nos gestes naturels en commandes précises, rendant le jeu vidéo accessible non seulement aux joueurs aguerris, mais aussi à des novices et à des personnes âgées.

Comment ?

Par un moyen simple: la triangulation. La manette est équipée d'un détecteur infrarouge qui récupère les positions de leds intégrés dans la petite barre à mettre au dessus/en dessous de notre télé. La manette peut ensuite intreprété nos mouvements et envoyés ces informations à la Wii, et donc faire le lien entre nous et le jeu.

Mario Kart Live

En utilisant la réalité augmentée et en combinant des karts téléguidés équipés de caméras et une application mobile, Nintendo a créé une expérience hybride qui ouvre la porte a de nouvelles expériences immersives.

Nintendo Switch

Cette console représente l'âme de Nintendo, autant dans sa façon de passer d'une console de salon à une console portable mais aussi grâce aux joycons, qui sont une version améliorée des manettes de Wii.

Nintendo Switch 2

Leur nouvelle console, la présentation laisse sous entendre que les nouveaux joycons pourront être utiliser comme une souris.

The Legend of Zelda: The Wind Waker

On retrouve même cette approche dans leur création de jeu, The Wind Waker est un bon exemple en terme de texture et de luminosité.

Ancré dans leur ADN

Cette façon de réimaginer, combiner des idées existantes ou éprouvées n'est pas nouvelle. Ce mode de fonctionnement est présent depuis le début, avec l'inventeur de la Game Boy Gunpei Yokoi.

Processus de création

Déconstruire dans le but de comprendre et s'approprier un style, une technique, un résultat, etc.

Brandon James Greer

Brandon James est un illustrateur, spécialisé dans le monde du pixel art. Il a une façon très intéressente quand il s'agit de s'approprier des styles d'autres artistes en décomposant leurs œuvres.

La mécanique
du fun

Workshop

Réaliser un mouse pointer

En combinant plusieurs techniques simples, nous pouvons mettre en place un curseur qui suivra la position de la souris. Nous aurons besoin de:

  1. un élément span stylisé pour notre curseur

  2. le placer en position: absolute;

  3. récupérer les coordonnées de la souris en javascript

  4. synchroniser le curseur avec les coordonnées

Créer notre curseur

HTML

<span class="cursor js-cursor">

On prévoit une classe pour stylisé notre curseur avec cursor et une classe qui ne servira que de ciblage en javascript avec js-cursor. Votre code sera plus lisible, et ce sera clair pour tout le monde que cela implique une intéraction en javascript.

Styliser notre curseur

CSS

.cursor {
  display: block;
  width: 48px;
  height: 48px;
  border-radius: 1000px;

  background: dodgerblue;
}

Positionner notre curseur

Il va falloir positionner notre cursor de manière à ce qu'il n'interfère plus avec le flux de la page et que notre curseur soit libre de se déplacer. Commençons par rajouter une position absolue et des indications de position avec top et left.

CSS

.cursor {
  /* […] Nos styles précédents */

  position: absolute;
  top: 0;
  left: 0:
}

Coordonnées
de la souris

Fonctionnons par étape:

  1. Cibler et stocker notre élément .js-cursor dans une variable

  2. Ajouter un événement de type mousemove sur notre écran via window

  3. Récupérer les coordonnées depuis notre événement

  4. Mettre à jour la position de .js-cursor

Cibler .js-cursor

Pour cibler un seul élément nous pouvons utiliser une méthode de notre objet document> (HTML): querySelector. On peut lui passer un paramètre qui servira à cibler un élément de notre HTML, comme nous le ferions en CSS.

JS

/*
Sauvergarde notre élément .js-cursor dans une constante
('var' peut aussi faire l'affaire)
*/
const cursor = document.querySelector( '.js-cursor' );
N'oublions pas que le paramètre de querySelector doit être une string.

Événement mousemove

Rajoutons un événement mousemove sur notre fenêtre (window) avec la méthode addEventListener. Elle prend 2 paramètres:

  1. type de l'événement, sous le format string

  2. Une fonction a appeler quand l'événement est joué

JS

const cursor = document.querySelector( '.js-cursor' );

window.addEventListener( 'mousemove', function() {
  // Le code a exécuter à chaque fois
  // que l'événement aura lieu
});

Les coordonnées

Chaque événement renvoie des données qui lui sont propre. Dans notre cas, comme nous jouons avec mousemove qui donne accès à la position de notre souris. Pour y accéder, il va falloir prévoir un paramètre dans notre fonction pour que l'événement puisse communiquer avec nous, appelons le event.

const cursor = document.querySelector( '.js-cursor' );

window.addEventListener( 'mousemove', function( event ) {
  // Le paramètre 'event' contiendra 
  // des informations lié à notre souris

  // Une bonne façon de s'assurer que notre
  // code fonctionne est d'afficher des
  // informations dans notre console.
  console.log( event );
});

clientX & clientY

Ok, on a des données. Maintenant ce qu'on veut, c'est la position horizontale et verticale de la souris. Dans notre paramètre event se trouve ces 2 informations appelées clientX pour l'axe horizontal et clientY pour l'axe vertical.

const cursor = document.querySelector( '.js-cursor' );

window.addEventListener( 'mousemove', function( event ) {
  // Stocke la position horizontale de notre souris
  const x = event.clientX;

  // Stocke la position veticale de notre souris
  const y = event.clientY;

  // Affiche les valeurs de nos variables 'x' et 'y'
  // Elles sont exprimé en pixel
  console.log( x, y );
});

Lier les coordonnées

Dernière étape (spoiler: nope), mettre à jour les positions top et left de notre curseur via la propriété style.

const cursor = document.querySelector( '.js-cursor' );

window.addEventListener( 'mousemove', function( event ) {
  const x = event.clientX;
  const y = event.clientY;

  // Met à jour les propriétés CSS
  // top et left de notre élément cursor
  // N'oublions pas de rajouter les unités 'px'
  // via concaténation si non le CSS ne sera pas
  // comment traiter ces valeurs.
  cursor.style.top = y + 'px';
  cursor.style.left = x + 'px';
});

Étape bonus

Notre curseur suit bien la souris mais de manière décalée. La solution est de déplacer notre curseur vers le haut et vers la gauche de la moité de sa taille:

CSS

.cursor{
  /* à la suite de nos styles */

  position: absolute;
  top: 0;
  left: 0;
  margin-top: -24px;
  margin-left: -24px;
}

Améliorations
& performances

Notre exemple fonctionne, il est simple de mise en place mais par contre il n'est pas optimal. En CSS on évitera de mettre à jour ou d'animer des propriétés autre que transform, opacity, color, background, etc. pour améliorer les performances. Dans des projets plus conséquents/gourmants, on pourrait commencer à noter une baisse des performances.

transform
+ transition