AS3==> 2 touches simulatnée sur un ecouteur clavier
delphijb
Messages postés9Date d'inscriptionmardi 5 janvier 2010StatutMembreDernière intervention12 janvier 2010
-
11 janv. 2010 à 06:55
delphijb
Messages postés9Date d'inscriptionmardi 5 janvier 2010StatutMembreDernière intervention12 janvier 2010
-
12 janv. 2010 à 11:08
Bonjour. voila, je suis en trian de faire un petit jeu de plateforme
en AS3 et j'ai quelques soucis...
Comme le jeu sera jouable au clavier, il faut que je puisse gérer
au moins 2 simultanéments (par exemple sauter ET aller vers la droite)
Seulement, mon addEvenListener ne me detecte qu'une seul touche enfoncé
a la fois. Comment faire pour en avoir plus ??
voici le code:
package {
import flash.display.*;
import flash.events.*;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class plateforme extends MovieClip {
// variables divers==========================================================
//var iteration:Number 50; //nbr de calcul par seconde
var vitessex:Number = 0; //variable qui gère les mouvements en X
var vitessey:Number = 0; //variable qui gère les mouvements en Y
var heros:String = "balle"; //variable de lien du nom d'occurence (stage)
// fonction construtor*******************************************************
//***************************************************************************
public function plateforme() {
var balle_01:Balle=new Balle ;
balle_01.x=300;
balle_01.y=50;
balle_01.name=heros;
addChild(balle_01);
//gravite(9.81)
clavier()
mouvement()
}
//fonction qui gère les touches du clavier===================================
//===========================================================================
public function clavier(){
stage.addEventListener(KeyboardEvent.KEY_DOWN,enfonce);
stage.addEventListener(KeyboardEvent.KEY_UP,relache);
function enfonce(event:KeyboardEvent):void{
if (event.keyCode == 39){ //droite
vitessex = 2
}
if (event.keyCode == 37){ //gauche
vitessex = -2
}
if (event.keyCode == 38){ //haut
vitessey = -9;
}
if (event.keyCode == 40){ //bas
}
}
function relache(event:KeyboardEvent):void{
if (event.keyCode == 39){ //droite
vitessex = 0
}
if (event.keyCode == 37){ //gauche
vitessex = 0
}
if (event.keyCode == 38){ //haut
vitessey = -9;
}
if (event.keyCode == 40){ //bas
}
}
}
//fonction qui gère les mouvements gauche-droite-haut-bas====================
//===========================================================================
public function mouvement() {
var mouvement_gdhb:Timer = new Timer(1000/iteration);
mouvement_gdhb.addEventListener(TimerEvent.TIMER, gaucheDroiteHautBas);
mouvement_gdhb.start()
function gaucheDroiteHautBas (e:TimerEvent):void{
getChildByName(heros).x += vitessex
getChildByName(heros).y += vitessey
}
}
//fonction qui gère la gravite===============================================
//===========================================================================
public function gravite(valeur) {
var myTimer:Timer = new Timer(1000/iteration);
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
function timerListener (e:TimerEvent):void{
vitessey += 0.12*valeur
}
start_btn.addEventListener(MouseEvent.CLICK, onStart);
function onStart(e:MouseEvent):void{
myTimer.start();
}
stop_btn.addEventListener(MouseEvent.CLICK, onStop);
function onStop(e:MouseEvent):void{
myTimer.stop();
}
}
}
}
L'erreur vient de la partie "gestion des touches clavier".
En effet, cette methode fonctionne bien mais des que j'appuie
sur 2 touches en meme temps, c'est la galère totale.
Comment fais-t-on pour gérer simultanément plusieurs touches
(par ex droite et haut si je veux sauter vers la droite...)
pour ne plus que ca bug ?
Un grand merci d'avance pour vos eventuel réponses..
delphijb
Messages postés9Date d'inscriptionmardi 5 janvier 2010StatutMembreDernière intervention12 janvier 2010 12 janv. 2010 à 10:12
ca va un peu mieux mais ce n'est pas encore ca. j'ai quelques bugs...
j'explique quelques exemples d'erreur de fonctionnement:
j'appuie sur DROITE, puis en maintenant, j'appuie sur HAUT
--> pendant que DROITE est enfoncé, j'ai un trace "DROITE"
--> mais quand j'appuie sur HAUT, je n'ai plus de trace "DROITE", juste un trace "HAUT"
j'appuie sur DROITE, je relache, j'appuie sur HAUT
--> pendant que DROITE est enfoncé, j'ai un trace "DROITE"
--> mais quand j'appuie ensuite sur HAUT, j'ai les deux ! "DROITE", suivi de "HAUT"
En résumé:
Quand j'essaie d'appuyer sur 2 touches en même temps, c'est toujours
la derniere pressé qui prend entierement le relais... meme si la
premiere pressé reste enfoncé.
en plus, j'ai un soucis qui vient de windows: quand je reste enfoncé,
il me fait un trace, puis plus rien pendant 1 seconde, puis ensuite
il enchaine les traces (suivant la répétition des touches paramétré
dans le panneau de configuration).
Y a pas moyen de contrer cela ?