CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Flash MX 2004 » Problème touche clavier

[R]Viper
[R]Viper
Niveau 10
24 août 2005 à 00:35:51

Bonjour à tous. Encore un petit pépin avec Flash MX 2004. Je suis en train de faire un jeu DDR sous Flash qui se jouera avec le clavier. Mes collision fonctionnent très bien, mais c´est au niveau des points selon les collisions que j´ai un problème.

Allez voir par vous même...
http://rviper.free.fr/divers/DDR.swf

Si j´appuie sur la touche "flèche bas" quand les 2 points jaunes se touchent, je gagne un point, mais si je tiens la touche "flèche bas", j´ai le temps de gagner 5 points. Et je ne veux pas que l´on puisse gagner 5 point car ce serait de la triche envers ceux qui touche la flèche comme il le faut.

Merci d´avance.

Lapintade
Lapintade
Niveau 30
24 août 2005 à 00:37:57

C´est une erreur classique.
Soit tu test l´appuie de la touche (changement entre etat "pas appuyé" et "appuyé", ceci arrive qu´une seule fois, meme si tu reste appuyé deux heures)
Soit tu regle les repetitions de touches pour ton langage (je sais pas comment ca marche flash, peut etre il existe une reglage pour corriger ca).

Fenix[74]
Fenix[74]
Niveau 10
24 août 2005 à 01:06:30

on(press){
keydown = true;
}
on(release){
keydown = false;
}

T´as plus qu´a check l´état de keydown =)

[R]Viper
[R]Viper
Niveau 10
24 août 2005 à 02:44:44

Merci beaucoup, je suis en train d´essayer ca, je vous dirais si ca marche.

Sinon, voici le code.

onClipEvent (enterFrame) {
if (this.hitTest(_root.bas.parfait1) && (Key.isDown(Key.DOWN))) {
_root.score = _root.score+1;
}
}

[R]Viper
[R]Viper
Niveau 10
24 août 2005 à 17:07:21

Finalement, j´ai pas réussi à l´arranger.

fil_razorback
fil_razorback
Niveau 10
24 août 2005 à 17:13:45

//les fonctions qui testent la touche
function flechetestbas() {
if (this.hitTest(_root.bas.parfait1){
_root.score+=1;
}
}
function flechetesthaut() {
if (this.hitTest(_root.haut.parfait1){
_root.score+=1;
}
}

onClipEvent(enterFrame) {
nouvelleaction =null;
if (KeyisDown(Key.DOWN) {
nouvelleaction = bas;
}
if (KeyisDown(Key.UP) {
nouvelleaction = haut;
}
//Si on a changé de touche, on appel la fonction de test
if (action != nouvelleaction){
action = nouvelle action;
funcname = ´flechetest´+action;
this[funcname]();
}

J´ai pas testé mais c´est qqch dans ce genre

[R]Viper
[R]Viper
Niveau 10
24 août 2005 à 17:23:07

Ceci...

//les fonctions qui testent la touche
function flechetestbas() {
if (this.hitTest(_root.bas.parfait1){
_root.score+=1;
}
}
function flechetesthaut() {
if (this.hitTest(_root.haut.parfait1){
_root.score+=1;
}
}

Où dois-je le mettre? Car si je le met sur mon MC, ca met...

    • Erreur** Symbole = fleche, calque = Calque 2, image = 1 :Ligne 2 : L’instruction doit apparaître dans le gestionnaire on/onClipEvent

function flechetestbas() {

luxregina
luxregina
Niveau 10
24 août 2005 à 17:50:45

Je pense que si tu cherche a bypasser la repetition des touches, tu risque de te compliquer la vie
L´idee serait de passer par a "ecouteur" de clavier ( addListener ) et d´y mettre un petit timer, une fois que ton timer est off, tu vire le listener ... cela te permet de gerer combien de temps tu autorise une touche pressee a avoir une action ... mais comme je le disais plus haut, ca peut vite devenir tres complexe, et surtout, cela depend de comment le reste de ton code gere le hitTest ...

Par contre, une technique simple serait de faire ton test sur Key.onKeyUp : au lieu de faire ton hittest quand la touche est pressee, tu le fait quand la touche est relachee, mais ca risuqe de pas mal bousiller ton gameplay

Encore une autre solution serait sur l´evenement Key.isDown, de declencher un timer (setInterval ) : lors de ton hitTest, tu regardes si ton timer est inferieur a X mili-secondes ( le temps que veut autoriser pour une touche pressee ), et bien sur, tu reinitialise ton timer sur un Key.onKeyUp ...

Bref, il y a 10 manieres differentes de contourner le probleme, a toi de voir celle qui te semble la plus pratique ...

fil_razorback
fil_razorback
Niveau 10
24 août 2005 à 18:40:20

C´est vrai qu´avec ma methode il suffit de tapoter la touche pour reproduire le meme probleme.

Les fonctions sont à placer sur la scène principale

[R]Viper
[R]Viper
Niveau 10
25 août 2005 à 16:29:15

Le code corrigé...

Sur la première image de la scène principale...

// déclaration des variable
score = 0;
vie = 25;
//les fonctions qui testent la touche
function flechetestbas() {
if (this.hitTest(_root.bas.parfait1)) {
_root.score += 1;
}
}
function flechetesthaut() {
if (this.hitTest(_root.haut.parfait1)) {
_root.score += 1;
}
}

Et sur mon clip...

onClipEvent (enterFrame) {
nouvelleaction = null;
if (Key.isDown(Key.DOWN)) {
nouvelleaction = bas;
}
if (Key.isDown(Key.UP)) {
nouvelleaction = haut;
}
//Si on a changé de touche, on appel la fonction de test
if (action != nouvelleaction) {
action = nouvelleaction;
funcname = ´flechetest´+action;
this[funcname]();
}
}

Et ca ne fonctionne toujours pas. :(

fil_razorback
fil_razorback
Niveau 10
25 août 2005 à 17:46:31

Quel est le problème précis? toujours le meme?

luxregina
luxregina
Niveau 10
25 août 2005 à 17:48:10

je ne pense pas que ta methode soit la bonne : tu veux forcer la release d´une touche avant de faire ton Hitest ( ou faire que le hitTest ne soit pas pris en compte si la touche est restee enfoncee depuis le dernier )

Je t´ai fait ce bout de code pour que tu vois comment gerer tes conditions :

Teste le ( copie le dans la premiere frame d´un nouveau fla, et execute ) puis change le en fonction de ton gameplay

myListener = new Object();
myListener.onKeyDown = function () {
if(myFlag==undefined || myFlag=="released"){
myFlag="pressed";
trace ("You "+myFlag+" a key.");
}
}
myListener.onKeyUp = function () {
myFlag="released";
trace ("You "+myFlag+" a key.");
}
Key.addListener(myListener);

luxregina
luxregina
Niveau 10
25 août 2005 à 17:57:18

je t´ai modifier le code : tu n´as ensuite plus qu´a verifier tes hitTests en fonction du code renvoye par myKey ...

myListener = new Object();
myListener.onKeyDown = function () {
if(myFlag==undefined || myFlag=="released"){
myFlag="pressed";
myKey=Key.getCode();
trace ("You "+myFlag+" the "+myKey+" key.");
}
}
myListener.onKeyUp = function () {
myFlag="released";
trace ("You "+myFlag+" the "+myKey+" key.");
}
Key.addListener(myListener);

luxregina
luxregina
Niveau 10
25 août 2005 à 18:20:52

allez, je t´ai meme inclu la traduction du keyCode :) (... m´emmerde au boulot aujourd´hui :))

getMyKey = function(myKey){
switch(myKey) {
case 40:
myKeyCode="DOWN";
break;
case 38:
myKeyCode="UP";
break;
case 39:
myKeyCode="RIGHT";
break;
case 37:
myKeyCode="LEFT";
break;
}
}
myListener = new Object();
myListener.onKeyDown = function () {
if(myFlag==undefined || myFlag=="released"){
myFlag="pressed";
myKey=Key.getCode();
getMyKey(myKey);
trace ("You "+myFlag+" the "+myKeyCode+" key.");
}
}
myListener.onKeyUp = function () {
myFlag="released";
trace ("You "+myFlag+" the "+myKeyCode+" key.");
}
Key.addListener(myListener);

[R]Viper
[R]Viper
Niveau 10
27 août 2005 à 23:41:11

Heu, j´ai testé ton code sur un nouveau document flash, et c´est parfait.

Mais comment faire pour que, si tu appuis sur la touche et que tu touche l´autre flêche, tu gagnes un point, mais seulement quand la touche est appuyé, et seulement un seul point. C´est difficile à expliquer.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment