Salut a Tous !
Bon, voilà depuis peu de temps je me suis lancé dans l´Action Script de Flash.
Langage qui semble bien adapté a mes attentes...
Ainsi, je me suis mis a travaillé ce langage, qui me parait plutôt simple lorsque je vois les lignes de C, venant d´habitués du codage...
J´ai appris a utiliser certaines conditions
(if, if else, & if else if ainsi que les ´ternaires´ --> j´ai compris comment utiliser ces dernieres, mais, encore du mal à les appliquer... disons que ca ne vient pas instentanément )
mais aussi les principales boucles ( while & for ) et encore les principaux events ( onPres onRelease onRollOver... etc... ) (onMouseDown,onMouseMove... )
Par contre j´ai ENORMEMENT, de mal avec onLoad & onEnterFrame //--> la je n´ai rien compris, si un gentil flasheur, a 5 minutes...
- - - - -
Bon, voilà aujourd´hui j´ai eu l´envie, d´exploiter mes connaissances, car, si je ne m´entraine pas, je vais vite perdre le peu d´actionScript que je connais
J´ai voulu, gerer le déplacement d´un clip via le clavier...
Moui, sans parler Script, avec mes connaissances, ceci me semble possible...
Si touche(droite) est pressée
déplacer le clip de telle distance a droite.
Si touche(gauche) est pressée
déplacer le clip de telle distance a gauche
Si touche(haut) est pressée
déplacer le clip de telle distance en haut
Si touche(bas) est pressée
déplacer de telle distance le clip en bas
Jusque la tous me semble possible ![]()
Si une fois cette base de crée pourquoi ne pas faire une variable ´vitesse´ ainsi, par la suite
on pourrat acceler ou ralentir la vitesse de déplacement du clip.
Autre chose, une petite question puisque de toute facon rien ne marche sur mon code ´voir plus bas´ Pourrat faire ´simplement´ de sorte, que si l´on appui a la fois sur haut et droite les deux touche soient pris en compte en meme temps donc déplacement en diagonal !? ?
(possible? surement, mais facilement
)
----
Donc je me suis mis a coder...
Dans un premier temps a réfléchir sur papier
puis sous Flash.
Voilà ce que ca donne !
PS
= je justifi pourquoi j´ai fais ceci ou cela.
----Code ActionScript----
if (Key.isDown(Key.LEFT))
on m´a dit que les touches du clavier étaient utilisé de cette maniere // si pressement de la touche (gauche)
{
perso._x -= 5;
perso étant le nom du clip a déplacer...
gauche; donc on retire 5 sur l´axe x
donc déplacement vers la gauche
}
if (Key.isDown(Key.RIGHT))
hop j´ai répété plusieurs fois la meme manipulation...
{
perso._x += 5;
}
if (Key.isDown(Key.UP))
{
perso._y -= 5;
}
if (Key.isDown(Key.DOWN))
{
perso._y += 5;
}
-----
Voilà. On m´a aussi conseillé de ne JAMAIS directement introduire le code sur un clip mais sur un calque réservé aux codes.
PS: Flash m´indique que mon script ne contient aucune erreure *heuresement dailleur*
Mais une fois l´essai lancé rien ne marche
![]()
Pouvez-vous m´aider ?
Merci d´avance a tous !
PS²: HS// quoi de neuf sur le forum ?
http://actionscript.org/french/index.shtml
Alors, tu as placé ton code sur la premiere frame de la timeline j´imagine, très bien.
Mets toi à la place de flash :
"-J´arrive sur la premiere frame : aucune touche n´est appuyée (Sauf si tu fais expres d´appuyer dès le premier centieme de seconde mais ca m´etonnerait que t´ai testé) donc je ne fais rien.
-Ah ben voilà j´ai fini"
Ce qui te manque c´est une instruction pour dire à flash de re-éxecuter ton code à chaque frame.
Ainsi il te faut :
this.onEnterFrame= function(){
//Ton code
}
le this fait juste référence à la scene.
Ensuite pour le déplacement avec gestion de plusieurs touches, c´est très simple, ça donne ceci :
perso.speed = 5;
this.onEnterFrame = function() {
if (Key.isDown(Key.LEFT)) {
perso.vx = -perso.speed;
}
if (Key.isDown(Key.RIGHT)) {
perso.vx = perso.speed;
}
if (Key.isDown(Key.UP)) {
perso.vy = -perso.speed;
}
if (Key.isDown(Key.DOWN)) {
perso.vy = perso.speed;
}
perso._x += perso.vx;
perso._y += perso.vy;
}
Merci
Fil !
Vraiment merci !
J´ai décortiqué le code que tu m´a passé...
Mais je ne vois pas a quoi correspond ce V
if (Key.isDown(Key.UP)) {
perso.vy = -perso.speed;
vz ?? ![]()
Soit je n´ai jamais appris a m´en servir...
soit j´ai oublier *y´a plus de chance pour que se soit ca
*
Autre problème/question... ![]()
Il me semble avoir lu que toutes les touches du clavier ont un code particulier...
Existerait´il un rappel enfin quelque chose ou je pourrais ctrouver ce code ?
d´avance !
Autre problème *encore*
Si par exemple je veux maintenant, que mon clip change en fonction de la direction...
Comment pourrais-je faire ?
PS: a l´origine le clip que je souhaite faire bouger provient d´un Gif... ![]()
Merci d´avance ! ![]()
perso.vy c´est juste une variable contenue dans perso; j´aurai pu tout simplement mettre vy ou même vitessey
"Il me semble avoir lu que toutes les touches du clavier ont un code particulier...
Existerait´il un rappel enfin quelque chose ou je pourrais ctrouver ce code ?"
Dans l´aide du logiciel, va voir dans la classe Key, il devrait y avir un lien à suivre ou quelque chose...
"Si par exemple je veux maintenant, que mon clip change en fonction de la direction...
Comment pourrais-je faire ? "
Si ton clip est comme ça :
frame 1 => tourné vers la gauche
frame 2 => tourné vers la droite
frame 3 => tourné vers le haut
frame 4 => toutné vers le bas
Tu peux utiliser le code suivant :
perso.speed = 5;
this.onEnterFrame = function() {
if (Key.isDown(Key.LEFT)) {
perso.vx = -perso.speed;
perso.direction=1;
}
if (Key.isDown(Key.RIGHT)) {
perso.vx = perso.speed;
perso.direction=2;
}
if (Key.isDown(Key.UP)) {
perso.vy = -perso.speed;
perso.direction=3;
}
if (Key.isDown(Key.DOWN)) {
perso.vy = perso.speed;
perso.direction=4;
}
perso._x += perso.vx;
perso._y += perso.vy;
perso.gotoAndStop(perso.direction);
}
Merciii ![]()
Vraiment merci !
De rien, les questions sont posées intelligement et tu essaies de faire le code toi même, ça donne envie de répondre ;)
Salut all !
Heu ![]()
J´ai encore quelques petits problèmes...
Voilà, j´ai fini les déplacements.
Mais maintenant, j´aimerais bien m´occupper des collisions... ![]()
Comme pour les question précedentes
J´ecris d´abord a manière dont je pense qu´il faut faire, enfin qui pourrait marcher...
Donc déja, voilà je vais uploader quelques imges, ca sera, je pense plus simple
Voilà ce que j´ai fais pour le moment (pour les déplacements)
http://img164.imageshack.us/my.php?image=as5db.png
Donc je pense que:
Pour le mur se trouvant en haut ( mur_haut)
J´ai lu quelque part qu´il fallait utiliser:
hitTest
...comment ca marche ?
C´est sur cette partie, ou l´on utilise
hitTest que je bloque...
en tout cas, je pense que Si ceci est ´´vérifié´´
Alors, il faudra : perso._y -= vitesse;
Car le clip hero se déplacera de ´vitesse´ vers le bas, donc...
...non ?
Aie j´ai vraiment du mal avec ces collisions...
Merci d´avance; ;- )
Rkoopa
...Ou petit y´a t´il autre moyen plus simple, que d´utiliser hitTest ?
Tu ferais mieux de faire un Tile Based Game
http://www.devamateur.be pour plus d´infos. Merci à Quintoff pour sa traduction du tuto de Tonypa ![]()
Merci ![]()
Désolé, pour le retard ![]()
Tiens ca m´a l´air très interressant tout ca !
Aller vais voir ca plus en détails...
Salut a tous, bon voilà je n´allais pas recreer un topic pour une question traitant du meme sujet que mes questions précédentes...
Voici mon code pour les déplacements et les collisions sur les bords de l´animation:
---------//Action-Script//----------
var vitesse:Number = 5;
perso.onEnterFrame = function() {
posx = this._x;
posy = this._y;
if (Key.isDown(Key.DOWN)) {
perso._y += vitesse;
_root.perso.gotoAndPlay(2);
}
if (Key.isDown(Key.LEFT)) {
perso._x -= vitesse;
_root.perso.gotoAndPlay(18);
}
if (Key.isDown(Key.UP)) {
perso._y -= vitesse;
_root.perso.gotoAndPlay(34);
}
if (Key.isDown(Key.RIGHT)) {
perso._x += vitesse;
_root.perso.gotoAndPlay(50);
}
if (this._y<0) {
this._y = 0
}
if (this._y>400) {
this._y = 400;
}
if (this._x<0) {
this._x = 0;
}
if (this._x>493) {
this._x = 493;
}
}
Bon cela etait le code.
Ainsi, mon personnage peut se déplacer vers la gau
che, vers la droite, vers le haut, vers le bas, et en diagonale.
Mais j´aimerais, que le déplacement en diagonale ne se fasse pas !
Je voudrais que le joueur ne puisse se déplacer que vers la gauche la droite le haut et la bas. seulement.
Mais je ne sais comment faire...
Cela vient du fait que les 2 pressions de touche s´ajoutent, or je voudrais annuler celà.
Autre chose j´aimerais maintenant animer mes mouvement, j´ai réussis a faire de sorte que le personnage se tourne suivant la touche pressée.
Mais aussi, que l´animation s´arrete lorsque la touche n´est pas pressées.
Merci d´avance a tous !
Amicalement;
Rex-S.
Il existe plusieur maniere de ne traiter qu´une seule condition a la fois ( touche [x] pressee )
Tu devrais rechercher l´operateur OR ( qui s´ecrit || ) mais je pense que dans ton cas, la meilleur maniere de proceder serait de passer par un switch case ( chercher la commande "switch" dans le dico AS de Flash, tu auras un exemple d´utilisation )
une troisieme maniere serait de creer une fonction myKeyIsDown qui recupere la nature de la touche pressee et de gerer le deplacement a l´interieur de cette fonction ...
Bref, c´est ca le truc fun en programmation, c´est qu´il y a toujours plein de reponses differentes au meme probleme
Merci, j´ai la chance de tomber sur LE flasheur du forum, quoi que Fil a l´air de faire du bon boulot ![]()
ha ! Fil est certainement beaucoup plus actif que moi , et au niveau de la frequentation du forum, et au niveau du code : ca doit faire 6 mois que j´ai pas ecrit une ligne de code
et je suis bien content comme ca ![]()
quoiqu´il en soit, si tu veux passer par les fonctions, je te conseille de regarder aussi a addListener (Key.addListener method), histoire de faire ca dans les regles de l´art ...mais dans ton cas, je pense qu´un Switch case sera le plus simple ...
C´est un peu degueu mais ca marche :
done = false;
if (Key.isDown(Key.DOWN) and done != true) {
perso._y += vitesse;
_root.perso.gotoAndPlay(2);
done = true
}
if (Key.isDown(Key.LEFT) and done != true) {
perso._x -= vitesse;
_root.perso.gotoAndPlay(18);
done = true
}
if (Key.isDown(Key.UP) and done != true) {
perso._y -= vitesse;
_root.perso.gotoAndPlay(34);
done = true
}
if (Key.isDown(Key.RIGHT) and done != true) {
perso._x += vitesse;
_root.perso.gotoAndPlay(50);
done = true
}
Fil
J´aimerais maintenant animer mes déplacements.
J´ai donc 4 mouvements, par directions.
Et je n´arrive pas a faire de sorte, que le personnage bouge uniquement si la touche est pressée, et qu´il s´arrete mais garde la meme direction lorsquee aucune touche n´est pressée...
Aïe, j´ai du mal...
Pouvez-vous m´aider ?
PS: j´ai mis dans mon clip perso, 4 clips representant les 4 mouvements donc sur 4 frame de perso.
sur chaque frame j´ai fais un stop();
Mais rien ne marche
J´ai aussi essayer de faire tous les mouvements sur le meme clip. avec mon gotoAndPlay qui renvois au début du mouvement, etc. seulement, a chaque fois que la touche est pressée, hé bien, cela ramene au premier mouvement, donc ca ne l´anime pas, du moin qu´une fois que la touche n´est plus pressée...
Pouvez vous m´aider ? ![]()
Merci d´avance ;- )