qui peut m'aider à tester un jeu ? |
Bienvenue invité ( Connexion | Inscription )
qui peut m'aider à tester un jeu ? |
5 May 2023, 15:28
Message
#1
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 1 957 Inscrit : 22 Dec 2011 Lieu : Paris Membre no 173 181 |
Je commence une animation pour enfant et elle marche en HTML-javascript sous Chrome et Firefox.
Mais pas sur Safari... s Comme je suis sous Mojave et j'ai une version ancienne de Safari je voudrais savoir si quelqu'un peut simplement charger la page html ci-dessous sur safari -avec si possible le dernier OS et la version de Safari la plus récente!- et voir si ça fonctionne... ou pas Merci d'avance CODE <!DOCTYPE html> <html> <head> <style> #score-container { position: fixed; top: 0; left: 50%; transform: translateX(-50%); background-color: green; font-size: 24px; font-family: Comic Sans MS, sans-serif; text-align: center; padding: 10px; width: 150px; height: 50px; } .container { display: flex; justify-content: center; font-family: Comic Sans MS, sans-serif; align-items: center; height: 100vh; flex-direction: column; text-align: center; } h3 { margin-top: 0; font-size: 1.5em; border-top: 1px solid white; border-bottom: 1px solid white; border-left: 1px solid white; border-right: 1px solid white; } .counter { background-color: yellow; font-size: 36px; padding: 20px; border-radius: 20%; margin-top: 20px; } #bananes { position: absolute; height: 100vh; width: 100%; overflow: hidden; } /* Définir la taille du singe */ #singe { background-image: url("https://www.dropbox.com/s/g3ikhc6881f8q23/dessin_singe.png?dl=1"); background-repeat: no-repeat; background-size: contain; position: absolute; width: 100px; height: 100px; } body { cursor: none; background-image: url("https://i.gifer.com/Ort.gif"); background-repeat: no-repeat; background-size: cover; height: 100%; position: relative; margin: 0; padding: 0; overflow: hidden; } /* Animer l'image de banane */ @keyframes tomber { 0% { transform: translate(-50%, -100px) rotate(0deg); } 100% { transform: translate(-50%, 800px) rotate(360deg); } } /* Appliquer l'animation à l'image de banane */ .banane { position: absolute; width: 50px; height: 50px; top: 80px; animation: tomber 3s linear infinite; transform-origin: center center; background-image: url("https://www.dropbox.com/s/ktfl0wt7rlv7rul/banane_reduit.png?dl=0"); background-repeat: no-repeat; background-size: contain; } #singe { position: fixed; bottom: 0px; left: 50%; transform: translateX(-50%); } </style> </head> <body> <p>Cliquez sur le bouton Play ci-dessous pour écouter le fichier audio :</p> <audio controls> <source src="https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1" type="audio/mpeg"> Votre navigateur ne supporte pas la lecture audio. </audio> <div id="score-container"> <h3>Score:</h3> <span class="counter" id="banana-counter">1</span> </div> <div id="banane"> <audio id="audio" src="https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1"></audio> </div> <div id="singe"></div> <div class="banana" style="left: 10%; animation-delay: 0s; background-image: url('https://www.dropbox.com/s/ktfl0wt7rlv7rul/banane_reduit.png?dl=1');"> <audio src="https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1"></audio> </div> <div class="banane" style="left: 25%; animation-delay: 3s; background-image: url('https://www.dropbox.com/s/ktfl0wt7rlv7rul/banane_reduit.png?dl=1');"> <audio src="https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1"></audio> </div> <div class="banane" style="left: 35%; animation-delay: 4.5s; background-image: url('https://www.dropbox.com/s/ktfl0wt7rlv7rul/banane_reduit.png?dl=1');"> <audio src="https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1"></audio> </div> <div class="banane" style="left: 45%; animation-delay: 6.5s; background-image: url('https://www.dropbox.com/s/ktfl0wt7rlv7rul/banane_reduit.png?dl=1');"> <audio src="https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1"></audio> </div> <div class="banane" style="left: 65%; animation-delay: 8s; background-image: url('https://www.dropbox.com/s/ktfl0wt7rlv7rul/banane_reduit.png?dl=1');"> <audio src="https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1"></audio> </div> <div class="banane" style="left: 75%; animation-delay: 2.5s; background-image: url('https://www.dropbox.com/s/ktfl0wt7rlv7rul/banane_reduit.png?dl=1');"> <audio src="https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1"></audio> </div> <div class="banane" style="left: 85%; animation-delay: 10.5s; background-image: url('https://www.dropbox.com/s/ktfl0wt7rlv7rul/banane_reduit.png?dl=1');"> <audio src="https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1"></audio> </div> <div class="banane" style="left: 95%; animation-delay: 5.5s; background-image: url('https://www.dropbox.com/s/ktfl0wt7rlv7rul/banane_reduit.png?dl=1');"> <audio src="https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1"></audio> </div> </body> <script> // Créer un objet Audio pour charger et jouer le fichier audio var audio = new Audio('https://www.dropbox.com/s/4s7nm3vbf866s36/sf_ni.mp3?raw=1'); // Ajouter un événement de chargement pour l'objet Audio audio.addEventListener('loadeddata', function() { console.log('Audio chargé'); }); // Fonction pour jouer le fichier audio function jouerAudio() { if (audio.paused) { audio.currentTime = 0; audio.play(); } } // Appeler la fonction jouerAudio() lorsque le singe attrape une banane // Par exemple, vous pouvez ajouter un appel à la fonction jouerAudio() à la fin de la fonction tomber() qui anime la banane function tomber() { // ... jouerAudio(); // Appel à la fonction jouerAudio() pour jouer le fichier audio lorsque la banane est attrapée } // jouer le son const bananas = document.querySelectorAll('.banane'); bananas.forEach((banana) => { banana.addEventListener('animationend', () => { banana.querySelector('audio').play(); }); }); // Code JavaScript ici document.addEventListener("click", function(event) { if (event.target.classList.contains("banane")) { if (!audio.paused) { audio.pause(); } audio.currentTime = 0; audio.play(); } }); document.addEventListener("mousemove", function(e) { var x = e.clientX; var singe = document.getElementById("singe"); singe.style.left = x + "px"; singe.style.top = "830px"; detecterCollision(); }); function detecterCollision() { var singe = document.getElementById("singe"); var bananes = document.querySelectorAll(".banane"); bananes.forEach(function(banane) { var rect1 = singe.getBoundingClientRect(); var rect2 = banane.getBoundingClientRect(); if (rect1.x < rect2.x + rect2.width && rect1.x + rect1.width > rect2.x && rect1.y < rect2.y + rect2.height && rect1.y + rect1.height > rect2.y) { if (!audio.paused) { audio.pause(); } audio.currentTime = 0; audio.play(); } }); } </script> </html> Ce message a été modifié par frankie00 - 5 May 2023, 17:42. -------------------- ¶ Mon blog informatique est la Vague en Creux
¶ MacBook Pro de 2021 avec OS 14.4 Sonoma, 13 pouces, 16 Go de mémoire RAM, processeur M1, SSD de 500Go ¶ Autre MacBook Pro de 2015 avec OS 10.14.5 Mojave 15 pouces Retina, 16 Go de mémoire RAM, processeur quadri-core 2.5 GHz Intel Core , double carte graphique et SSD 512 Go ¶ Nous sommes 2 sur ce site: Jean Pass & Dem Eilleur qui vous saluons bien !“ |
|
|
10 Jun 2023, 14:23
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 851 Inscrit : 1 Jul 2010 Membre no 156 073 |
Puisque tu n’as pas de smartphone ou tablette, tu peux simuler les événements tactiles à partir des outils de développement du navigateur, en activant la simulation d’un appareil.
Sur les navigateurs Chromium (Google Chrome, Brave, etc) et Firefox : click droit > « Inspecter », dans les outils qui s’affichent « Toggle Device Toolbar » ou « Vue adaptative » (Firefox). Je ne suis pas chez moi, pas de Mac sous la main pour Safari. Ci-dessous, différents codes pour les différentes étapes de gestion du tactile ou de la souris. Je précise que je n’ai pas fait ça depuis longtemps, que j’improvise et que, pour la simplicité, je m’en tiens à du code classique (pas de fonctions fléchées etc). Quelqu’un·e passera peut-être pour corriger ou améliorer. Étapes : 0. Créer un élément div pour mener les tests 1. Prendre connaissance de l’ordre de diffusion des événements 2. Éviter le comportement par défaut des événements (par ex. le 'click' sur tactile) 3. Récupérer les coordonnées de l’événement 4. Déplacer l’élément sous le pointeur (souris ou doigt) 5. Code complet (à optimiser) 0. Créer un élément div pour mener les tests Code document.addEventListener('DOMContentLoaded', function() { // créer un élément div pour tester creerElementDeTest(); }); function creerElementDeTest() { const div = document.createElement('div'); div.setAttribute('id', 'machin'); div.style.position = 'absolute'; div.style.width = '100px'; div.style.height = '100px'; div.style.backgroundColor = 'orange'; div.style.cursor = 'pointer'; document.body.appendChild(div); } 1. Prendre connaissance de l’ordre de diffusion des événements Les navigateurs tactiles prennent en compte des événements de souris pour faire fonctionner les pages web qui ne sont codées que pour la souris. On ajoute à l’élément des observateurs d’événement : Code document.addEventListener('DOMContentLoaded', function() { // créer un élément div pour tester creerElementDeTest(); // lui ajouter des observateurs d’événement ajouterObservateursEvenement(); }); function ajouterObservateursEvenement() { const el = document.getElementById('machin'); // entrée du pointer sur l’élément el.addEventListener('mouseenter', afficherEvenement, false); el.addEventListener('mouseover', afficherEvenement, false); // appui du pointer el.addEventListener('mousedown', afficherEvenement, false); el.addEventListener('touchstart', afficherEvenement, false); // relâchement du pointer el.addEventListener('mouseup', afficherEvenement, false); el.addEventListener('click', afficherEvenement, false); el.addEventListener('touchend', afficherEvenement, false); // sortie du pointer sur l’élément el.addEventListener('mouseleave', afficherEvenement, false); el.addEventListener('mouseout', afficherEvenement, false); el.addEventListener('touchcancel', afficherEvenement, false); } function afficherEvenement(evenement) { console.log(evenement.type); } 2. Éviter le comportement par défaut (par ex. le 'click' sur tactile) Code function afficherEvenement(evenement) { // éviter le comportement par défaut evenement.preventDefault(); console.log(evenement.type); } 3. Récupérer les coordonnées de l’événement Pour la souris : evenement.clientX et evenement.clientY. Pour tactile, on prend le premier doigt : evenement.changedTouches[0].clientX et evenement.changedTouches[0].clientY. On doit donc distinguer un événement de souris d’un événement tactile : Code function afficherEvenement(evenement) { // éviter le comportement par défaut evenement.preventDefault(); // touch ou pas // il existe d’autres méthodes de détection if(evenement.changedTouches === undefined) { console.log('Pas touch', evenement.type); // coordonnées de l’événement console.log('x :', evenement.clientX, 'y :', evenement.clientY); } else { console.log('Touch', evenement.type); // coordonnées de l’événement (du premier pointer tactile) console.log('x :', evenement.changedTouches[0].clientX, 'y :', evenement.changedTouches[0].clientY); } } 4. Déplacer l’élément sous le pointeur (souris ou doigt) Certains événement ne nous intéressent pas dans cet exemple. On ne garde que les nécessaires dans la fonction d’ajout d’observateurs d’événement, et on crée deux fonctions associées « demarrer » et « arreter ». Dans la fonction « démarrer » on démarre l’observation du déplacement du pointeur. Dans la fonction « arreter » on arrête l’observation du déplacement du pointeur. Code function ajouterObservateursEvenement() { const el = document.getElementById('machin'); // appui du pointer el.addEventListener('mousedown', demarrer, false); el.addEventListener('touchstart', demarrer, false); // relâchement ou sortie du pointer el.addEventListener('mouseup', arreter, false); el.addEventListener('mouseleave', arreter, false); el.addEventListener('touchend', arreter, false); el.addEventListener('touchcancel', arreter, false); } function demarrer(evenement) { console.log('demarrer', evenement.type); const el = document.getElementById('machin'); // éviter le comportement par défaut evenement.preventDefault(); // enlever l’observateur 'touchstart' pour éviter de prendre en compte un autre doigt qui entrerait en contact avec l’élément el.removeEventListener('touchstart', demarrer, false); // démarrer l’observation du déplacement du pointer window.addEventListener('mousemove', deplacer, false); window.addEventListener('touchmove', deplacer, false); } function arreter(evenement) { console.log('arreter', evenement.type); const el = document.getElementById('machin'); // éviter le comportement par défaut evenement.preventDefault(); // ajouter à nouveau l’observateur 'touchstart' el.addEventListener('touchstart', demarrer, false); // enlever l’observation du déplacement du pointer window.removeEventListener('mousemove', deplacer, false); window.removeEventListener('touchmove', deplacer, false); } function deplacer(evenement) { // éviter que l’événement soit observé aussi pour le défilement (scroll) de la fenêtre evenement.stopImmediatePropagation(); // largeur et hauteur de l’élément pour contraindre son déplacement à la zone d’affichage (viewport = fenêtre) const largeur = 100; const hauteur = 100; // demi largeur et demi hauteur de l’élément pour pouvoir le centrer sous le pointeur const demiLargeur = largeur * .5; const demiHauteur = hauteur * .5; let posX = 0; let posY = 0; console.log('deplacer', evenement.type); // touch ou pas // il existe d’autres méthodes de détection if(evenement.changedTouches === undefined) { console.log('Pas touch', evenement.type); // coordonnées de l’événement console.log('x :', evenement.clientX, 'y :', evenement.clientY); // définir les positions x et y posX = evenement.clientX - demiLargeur; posY = evenement.clientY - demiHauteur; } else { console.log('Touch', evenement.type); // coordonnées de l’événement (du premier pointer tactile) console.log('x :', evenement.changedTouches[0].clientX, 'y :', evenement.changedTouches[0].clientY); // définir les positions x et y posX = evenement.changedTouches[0].clientX - demiLargeur; posY = evenement.changedTouches[0].clientY - demiHauteur; } // ajustements pour contraindre le déplacement à la zone de la fenêtre if(posX < 0) { posX = 0 } else if(posX > (window.innerWidth - largeur)) { posX = window.innerWidth - largeur } if(posY < 0) { posY = 0 } else if(posY > (window.innerHeight - hauteur)) { posY = window.innerHeight - hauteur } console.log('posX :', posX, 'posY :', posY); // déplacer l’élément const el = document.getElementById('machin'); el.style.left = posX + 'px'; el.style.top = posY + 'px'; } 5. Code complet (à optimiser) Code document.addEventListener('DOMContentLoaded', function() { // créer un élément div pour tester creerElementDeTest(); // lui ajouter des observateurs d’événement ajouterObservateursEvenement(); }); function creerElementDeTest() { const div = document.createElement('div'); div.setAttribute('id', 'machin'); div.style.position = 'absolute'; div.style.width = '100px'; div.style.height = '100px'; div.style.backgroundColor = 'orange'; div.style.cursor = 'pointer'; document.body.appendChild(div); } function ajouterObservateursEvenement() { const el = document.getElementById('machin'); // appui du pointer el.addEventListener('mousedown', demarrer, false); el.addEventListener('touchstart', demarrer, false); // relâchement ou sortie du pointer el.addEventListener('mouseup', arreter, false); el.addEventListener('mouseleave', arreter, false); el.addEventListener('touchend', arreter, false); el.addEventListener('touchcancel', arreter, false); } function demarrer(evenement) { console.log('demarrer', evenement.type); const el = document.getElementById('machin'); // éviter le comportement par défaut evenement.preventDefault(); // enlever l’observateur 'touchstart' pour éviter de prendre en compte un autre doigt qui entrerait en contact avec l’élément el.removeEventListener('touchstart', demarrer, false); // démarrer l’observation du déplacement du pointer window.addEventListener('mousemove', deplacer, false); window.addEventListener('touchmove', deplacer, false); } function arreter(evenement) { console.log('arreter', evenement.type); const el = document.getElementById('machin'); // éviter le comportement par défaut evenement.preventDefault(); // ajouter à nouveau l’observateur 'touchstart' el.addEventListener('touchstart', demarrer, false); // enlever l’observation du déplacement du pointer window.removeEventListener('mousemove', deplacer, false); window.removeEventListener('touchmove', deplacer, false); } function deplacer(evenement) { // éviter que l’événement soit observé aussi pour le défilement (scroll) de la fenêtre evenement.stopImmediatePropagation(); // largeur et hauteur de l’élément pour contraindre son déplacement à la zone d’affichage (viewport = fenêtre) const largeur = 100; const hauteur = 100; // demi largeur et demi hauteur de l’élément pour pouvoir le centrer sous le pointeur const demiLargeur = largeur * .5; const demiHauteur = hauteur * .5; let posX = 0; let posY = 0; console.log('deplacer', evenement.type); // touch ou pas // il existe d’autres méthodes de détection if(evenement.changedTouches === undefined) { console.log('Pas touch', evenement.type); // coordonnées de l’événement console.log('x :', evenement.clientX, 'y :', evenement.clientY); // définir les positions x et y posX = evenement.clientX - demiLargeur; posY = evenement.clientY - demiHauteur; } else { console.log('Touch', evenement.type); // coordonnées de l’événement (du premier pointer tactile) console.log('x :', evenement.changedTouches[0].clientX, 'y :', evenement.changedTouches[0].clientY); // définir les positions x et y posX = evenement.changedTouches[0].clientX - demiLargeur; posY = evenement.changedTouches[0].clientY - demiHauteur; } // ajustements pour contraindre le déplacement à la zone de la fenêtre if(posX < 0) { posX = 0 } else if(posX > (window.innerWidth - largeur)) { posX = window.innerWidth - largeur } if(posY < 0) { posY = 0 } else if(posY > (window.innerHeight - hauteur)) { posY = window.innerHeight - hauteur } console.log('posX :', posX, 'posY :', posY); // déplacer l’élément const el = document.getElementById('machin'); el.style.left = posX + 'px'; el.style.top = posY + 'px'; } Edit : typo Ce message a été modifié par scoch - 11 Jun 2023, 12:03. -------------------- L'homme n'est que poussière... c'est dire l'importance du plumeau ! Alexandre Vialatte
|
|
|
Nous sommes le : 2nd June 2024 - 18:36 |