Un conseil pour un debutant

remus38 Messages postés 69 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 7 mai 2006 - 9 déc. 2004 à 13:47
paladin33 Messages postés 3 Date d'inscription mercredi 6 juillet 2005 Statut Membre Dernière intervention 16 juillet 2005 - 16 juil. 2005 à 17:58
Bonjour,
voila je us en train de faire mon premier jeu et j'ai quelque problemes. Le jeu est simple : on dirige un tank vu de dessus, des ennemis arrive et avec le tank on les detruits.
Problèmes :
1- Quand je tire avec le tank et que je maintiens le bouton de tir et que je bouge le tank, le missile bouge aussi. J'ai utilisé un MovieClip que je lance quand je tire. Dois-je faire comme ça ou non.
2- une fois que vous m'aurez aidé à résoudre ce problème, comment je dois faire pour pouvoir tirer plusieurs coups à la suite.
3- Pour en revenir à la question 1, je pense que je n'utilise pas la bonne methode car je ne vois pas coment arreter la course du missile apres la destruction d'un ennemi.

Merci

17 réponses

John_Doe_88 Messages postés 606 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 13 décembre 2006
9 déc. 2004 à 14:07
1-Il faudrait voir le code qui gere le deplacement du mc, mais le deplacement du missile ne doit pas dépendre de celui du char !
2-il faut dupliquer ce clip en AS, fonction attachmovie
3-regarde la doc de la fonction hitTest pour detecter les collisions et aussi unloadmovie pour supprimer un clip de la scene.
0
remus38 Messages postés 69 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 7 mai 2006
9 déc. 2004 à 15:39
J'ai utilisé un clip ou le tout droit
En action j'ai :
onclipevent(enterframe){
if key = espace
positionner le missile au niveau du tank
lancer le clip : _root.missile.play()
0
John_Doe_88 Messages postés 606 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 13 décembre 2006
9 déc. 2004 à 15:55
Mets du vrai code stp ca c illisible.
0
remus38 Messages postés 69 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 7 mai 2006
9 déc. 2004 à 19:32
voila le script du tank :
onClipEvent (load) {
_root.tir.stop();
}
onClipEvent (enterFrame) {
if (Key.isDown(Key.LEFT)) {
_x = _x-5;
}
if (Key.isDown(Key.RIGHT)) {
_x = _x+5;
}
if (Key.isDown(Key.UP)) {
_y = _y-5;
}
if (Key.isDown(Key.DOWN)) {
_y = _y+5;
}
if (Key.isDown(Key.SPACE)) {
_root.tir._x = this._x;
_root.tir._y = this._y;
_root.tir.play();
}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
John_Doe_88 Messages postés 606 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 13 décembre 2006
10 déc. 2004 à 09:55
Ok. Alors le code du déplacement du missile stp.. Comment le missile bouge ?
Deja quelques commentaires :

1/ je vois pas comment tu peux gerer le déplacement du missile sans avoir une variable ou tu mets sa direction (c'est pour ça que j'aimerais bien voir comment tu gères le déplacement, je pense que ça vient de la)

2/remplace ton onClipEvent(enterFrame) par onClipEvent(keyDown), ça sera plus efficace

3/si tu veux pouvoir lancer plusieurs missiles il faut mettre ce code
if (Key.isDown(Key.SPACE)) {
_root.attachmovie("tir", "tir"+nbmissiles, nbmissiles);
_root["tir"+nbmissiles]._x = this._x;
_root["tir"+nbmissiles]._y = this._y;
_root["tir"+nbmissiles].play();
}
en considerant nbmissiles une variable comptant le nombre de missiles affichés

@+
0
remus38 Messages postés 69 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 7 mai 2006
10 déc. 2004 à 10:46
Ben en fait pour le deplacement du missile j'ai simplement créé une animation où le missile par verticalement
Si tu veux mieux comprendre ce que j'ai fait je peux t'envoyer mon fichier
0
John_Doe_88 Messages postés 606 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 13 décembre 2006
10 déc. 2004 à 11:25
Ok. Alors c normal que le missile bouge aussi parce que ton code :
if (Key.isDown(Key.SPACE)) {
_root.tir._x = this._x; //a chaque fois que tu appuies sur espace le missile prend la coordonnée x du tank
_root.tir._y = this._y;
_root.tir.play();
}
Avec un seul missile il faudrait que tu sache si il est lancé ou pas pour éventuellement empêcher de le replacer. Mais autant directement passer à plusieurs missiles, tu n'auras plus ce probleme.
Apres c comme tu veux : soit tu m'envoie ton code et je te le fais pour plusieurs missiles (mais bon tu n'auras pas fait grand chose, ce qui n'est pas top pour toi), soit si tu es motivé et tu essaies tout seul et je veux bien t'aider (je pense t'avoir donné les éléments pour commencer).
Il faut mettre un code du style ca sur ton missile :
onClipEvent(enterFrame) {
this._y--;
if (this._x < 0) { //le missile sort de la scene
this.unloadMovie(); //destruction du clip
}
else if (this.hitTest(enemy._x, enemy._y)) { //rencontre u ennemi
this.unloadMovie(); //destruction du missile et de l'ennemi
_root.enemy.unloadMovie();
}
}
Enfin j'essaie de donner des éléments, mais c dur de détailler tout comment tu fais comme ça par message.
Mais franchement essaie c pas difficile et je me tiens à ta disposition.
@+
0
remus38 Messages postés 69 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 7 mai 2006
10 déc. 2004 à 11:35
Je vais essayer tout seul mais je vais quand meme t'envoyer mon fichier au cas ou. Comme ca tu pourras mieux voir ce que j'ai fais et tu pourras mieux m'expliquer en cas de problème.
Merci
0
remus38 Messages postés 69 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 7 mai 2006
10 déc. 2004 à 17:20
en fait j'ai pas compris comment on doir faire pour que le tir soit independant
et ni comment en tirer plusieurs ( nbmissiles je ne vois pas à quoi il sert)
0
John_Doe_88 Messages postés 606 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 13 décembre 2006
11 déc. 2004 à 15:14
if (Key.isDown(Key.SPACE)) {
_root.tir._x = this._x;
_root.tir._y = this._y;
_root.tir.play();
}


Avec ca a chaque fois que tu appuies sur espace le tir reprend la position du char. Donc il faut que si le missile est tiré tu ne refasse pas ça. Donc il faut rajouter une variable pour savoir si le missile est tiré :

if (Key.isDown(Key.SPACE) && (tire == false)) {
tire = true;
_root.tir._x = this._x;
_root.tir._y = this._y;
_root.tir.play();
}

et avec ca il faut que quand le missile est détruit (renconter un ennemi ou sort de la scene) tu fasse : tire =false;

Comment en tirer plusieurs : à chaque fois que tu tires tu crées une nouvelle occurence du clip tir (avec attachmovie).
nbmissiles sert uniquement à différencier tes missiles : quand tu attaches une nouvellle occurence de ton clip tir, tu dois lui donner un nom différent de ceux qui sont sur la scene, donc on utilise nbmissiles, qu'on incrémente à chaque fois qu'on crée un missile, comme ça ils ont tous des noms différents.
0
remus38 Messages postés 69 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 7 mai 2006
11 déc. 2004 à 18:34
ok mais j'ai toujours un probleme
Le code de mon tank est celui la :

onClipEvent (load) {
var nbmissiles;
nbmissiles=0;
}

onClipEvent (enterFrame) {
if (Key.isDown(Key.LEFT) && _x>-10) {
_x = _x-5;
}
if (Key.isDown(Key.RIGHT) && _x<560) {
_x = _x+5;
}
if (Key.isDown(Key.UP) && _y>20) {
_y = _y-5;
}
if (Key.isDown(Key.DOWN) && _y<390) {
_y = _y+5;
}
if (Key.isDown(Key.SPACE)) {
_root.attachMovie("tir","tir"+nbmissiles,nbmissiles);
nbmissiles++;
_root["tir"+nbmissiles]._x = this._x;
_root["tir"+nbmissiles]._y = this._y;
_root["tir"+nbmissiles].play();
}
}

Pour moi ça me semble juste mais ca marche pas. J'ai declare une variable nbmissiles que j'initialise à zero au debut de l'application et quand j'appuie sur espace je l'incremente pour que nom change.

Autre chose, quand je fais dans missile
onClipEvent(load){
this.stop();
}

onClipEvent (enterFrame) {
if (this._y<0) {
this.stop();
}
else if (this.hitTest(ennemi1._x, ennemi1._y)){
this.unloadMovie();
_root.ennemi1.unloadMovie();
}
}

ben le unloadMovie marche pas

Je t'envoie ce que j'ai fait pour que tu comprenne mieux
0
remus38 Messages postés 69 Date d'inscription vendredi 17 septembre 2004 Statut Membre Dernière intervention 7 mai 2006
11 déc. 2004 à 18:47
J'ai oublié, j'ai une autre question : comment on fait pour utiliser hitTest pourun intervalle de points et non pour un seul point. Parce que sinon je pense qu'il faut que les coordonnées du missile et celles de l'ennemi soit exactement les memes.
0
John_Doe_88 Messages postés 606 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 13 décembre 2006
13 déc. 2004 à 13:29
enemy.hitTest(teteMissile.x, tetemissile.y);
avec tetemissile un point représentant la tete du missile (que tu calcules d'apres les coordonnées de ton missile. C'est logique
Comme ça tu testes si la tête du missile rencontre l'ennemi.

Sinon je regarde ton .fla ce soir ou au pire demain
@+
0
paladin33 Messages postés 3 Date d'inscription mercredi 6 juillet 2005 Statut Membre Dernière intervention 16 juillet 2005
14 juil. 2005 à 04:48
slt john, je suis moi aussi en train d'essayer de recréer un vieu jeu capcom histoire de m'entrainer avec flash.

Pour ma part, mon shoot marche bien, mais j'arrive pas à avoir plusieur shoot. J'ai donc essayé ton code mais ça marche pas .

Mon shoot marche tres bien pour un seul tir, mais qd j'applique ton code pour ta duplication de tir, il ne se passe plus rien.

J'ai donc attaché ce code a mon clip principal "player1".

-----------------------------------------------------------------
onClipEvent (load)
{
// declare and set speed variable
speed = 10;
}

onClipEvent (enterFrame)
{

if (Key.isDown(Key.SPACE))
{


gotoAndPlay(2);
// _root.tir._x = _x + 60;
// _root.tir._y = _y - 10;
//n = 0;

_root.attachmovie(tir, "tir"+nb, nb);
_root["tir"+nb]._x = this._x+60;
_root["tir"+nb]._y = this._y-10;
_root["tir"+nb].play();

}


// deplacement haut bas droite gauche
if (Key.isDown(Key.LEFT) && !Key.isDown(Key.RIGHT)) {
_x -= speed;

}
if (Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT)) {
_x += speed;

}
if (Key.isDown(Key.UP) && !Key.isDown(Key.DOWN)) {
_y -= speed;

}
if (Key.isDown(Key.DOWN) && !Key.isDown(Key.UP)) {
_y += speed;

}
//
// deplacements en diagonale

if (Key.isDown(Key.LEFT) && Key.isDown(Key.UP) && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.DOWN)) {

}
if (Key.isDown(Key.RIGHT) && Key.isDown(Key.UP) && !Key.isDown(Key.LEFT) && !Key.isDown(Key.DOWN)) {

}
if (Key.isDown(Key.LEFT) && Key.isDown(Key.DOWN) && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.UP)) {

}
if (Key.isDown(Key.RIGHT) && Key.isDown(Key.DOWN) && !Key.isDown(Key.LEFT) && !Key.isDown(Key.UP)) {

}
//
// limite d'ecran

if (_y<0)
{
_y = 0;
}

if (_y>768)
{
_y = 768;
}

if (_x<0)
{
_x = 0;
}

if (_x>1024)
{
_x = 1024;
}

}
-----------------------------------------------------------

pour le clip "tir"

-----------------------------------------------------------


onClipEvent (enterFrame)


{
_x = _x + 10;
}
------------------------------------------------------------
0
paladin33 Messages postés 3 Date d'inscription mercredi 6 juillet 2005 Statut Membre Dernière intervention 16 juillet 2005
14 juil. 2005 à 13:54
Bon voila, ça marche comme ça.

if (Key.isDown(Key.SPACE))
{


gotoAndPlay(2);



quantité = 1;
while (quantité>0) {

duplicateMovieClip (_root.tir, "tir"+i, i);
_root["tir" + i]._x = this._x+60;
_root["tir" + i]._y = this._y-10;
_root["tir" + i].play();

trace("tir"+i);

i++;
quantité--;
}
}

----------------------------------------------------------
Le probleme john, le ton code etait incomplet, il n'incrémentait pas "nbmissiles". J'avais modifier ton code en conséquence, mais impossible de le faire marcher. il ne se passait rien qd j'appuyais sur espace.. J'ai pas réussi a comprendre pourquoi ça ne marcher pas.
0
John_Doe_88 Messages postés 606 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 13 décembre 2006
16 juil. 2005 à 17:03
Si j'avais fait un code complet je l'aurais mis dans la catégorie
sources. Et vu comme j'avais quand même pas mal expliqué j'aurais
préféré un "merci".

Ton code marchait pas parce que tu dis n'imp et ta pas l'air capable de
recopier un code (nbmissiles++ ca veut dire incrémenter nbmissiles et
je vois pas l'incrémentation de nb dans le tien).

Ptetre que des fois il vaudrait mieux se taire...
0
paladin33 Messages postés 3 Date d'inscription mercredi 6 juillet 2005 Statut Membre Dernière intervention 16 juillet 2005
16 juil. 2005 à 17:58
je t'ai rien de désagréable que je sache pour que tu me parles ainsi...
Entre parenthese je me suis appuyé sur ton code pour sortir le mien et je ne fesais que de demander ton aide.

En attendant le mien est complet et marche pour ceux qui en ont besoin.
0
Rejoignez-nous