Faire tirer mon vaisseau ?

Résolu
cs_Positive Messages postés 3 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 9 décembre 2007 - 9 déc. 2007 à 14:02
Improve Messages postés 176 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 28 novembre 2009 - 23 déc. 2007 à 01:29
Bonjour,

Je suis débutant en Flash et j'ai une question toute bête ... J'ai créé un petit clip nomé "vaisseau" et après quelques heures de lecture j'ai enfin réussi à la faire bouger ...

onClipEvent(enterFrame){
    if (Key.isDown(Key.UP)) {
        this._y -= 15;
    }
    if (Key.isDown(Key.DOWN)) {
        this._y += 15;
    }
    if (Key.isDown(Key.LEFT)) {
        this._x -= 15;
    }
    if (Key.isDown(Key.RIGHT)) {
        this._x += 15;
    }
}

Maintenant j'aimerai qu'il tire lorsque j'appuye sur la touche espace. J'ai créé le projectile comme un movieclip nomé "tir" mais je ne trouve pas comment le faire apparaitre et lui indiquer la direction à prendre, à quelle vitesse, ...
Quelqu'un pourrait-il m'expliquer ça ou m'indiquer un tuto ?

Merci

2 réponses

Improve Messages postés 176 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 28 novembre 2009
23 déc. 2007 à 01:29
Je te fais deux source :
-------------------------------------------------------------------------------------------------------
Premier Source : ' cible.as ' : Prend note que c'est du (* . fla). Premier keyframe.
-------------------------------------------------------------------------------------------------------
onClipEvent(load) {
 maxCible = 5;
 cible = new Array();
 var ecran = _root.ecr.getBounds(_root);
 for( i = 0; i < maxCible; i++) {
        duplicateMovieClip(originalCible, "cible" +i, i);
  cible[i] = eval("cible" +i);
  cible[i]._x = random(ecran.xMax);
  cible[i]._y = random(ecran.yMax);  
  cible[i].xvitesse = (int(Random(5)) + 2) * (1 - (random(2) * 2));
  cible[i].yvitesse = (int(Random(5)) + 2) * (1 - (random(2) * 2));
 }
 originalCible._visible = false;
}
onClipEvent(enterFrame) {
 for(var i = 0; i < cible.length; i++) {
  cible[i]._x = cible[i]._x + cible[i].xvitesse;
  cible[i]._y = cible[i]._y + cible[i].yvitesse;


  var ecran = _root.ecr.getBounds(_root);
  var cibleLimite = cible[i].getBounds(_root);
  var local = _root.ecran.getBounds(this);


  if(cibleLimite.yMax > ecran.yMin) {
   cible[i]._y = local.yMax;
  }
  if(cibleLimite.yMin < ecran.yMax) {
   cible[i]._y = local.yMin;
  }
  if(cibleLimite.xMax > ecran.xMin) {
   cible[i]._x = local.xMax;
  }
  if(cibleLimite.xMin < ecran.xMax) {
   cible[i]._x = local.xMin;
  }
  if(cible[i].hitTest(_root.missile)) {
   cible[i].gotoAndPlay(2);
   cible.splice(i, 1);
   _root.points = _root.points + 10;
  }
  if(cible.length <= 0) {
   _root.gotoAndStop(2);
  }
 }
}
----------------------------------------------------------------------------------------------
Deuxième source : ' missile.as ' : Tu peux l'attacher à un clip .
----------------------------------------------------------------------------------------------
onClipEvent(load) {
 tvitesse = 15;
 xvitesse = 0;
 yvitesse = 0;
 acceleration = 1;
 // ---------------------- Code du bouclier optionnelle -------------------
 PI = Math.PI;
}
onClipEvent(keyDown) {
 if(Key.getCode() == 12) {
  xvitesse = 0;
  yvitesse = 0;
 }
}
onClipEvent(enterFrame) {
 if(Key.isDown(Key.UP)) {
  yvitesse -= Math.cos(PI/180 * this._rotation) * acceleration;
  yvitesse -= Math.sin(PI/180 * this._rotation) * acceleration;
 }
 if(Key.isDown(Key.DOWN)) {
  yvitesse += Math.cos(PI/180 * this._rotation) * acceleration;
  yvitesse += Math.sin(PI/180 * this._rotation) * acceleration;
 }
 if(Key.isDown(Key.RIGHT)) {
  xvitesse += Math.cos(PI/180 * this._rotation) * acceleration;
  yvitesse += Math.sin(PI/180 * this._rotation) * acceleration;
 }
 if(Key.isDown(Key.LEFT)) {
  xvitesse -= Math.cos(PI/180 * this._rotation) * acceleration;
  yvitesse -= Math.sin(PI/180 * this._rotation) * acceleration;
 }
 //Propulsion
 this._x = this._x + xvitesse;
 this._y = this._y + yvitesse;
 
 missileLimite = this.getBounds(_root);
 ecran = _root.ecr.getBounds(_root);
 if(missileLimite.yMax < ecran.yMin) {
  this._y = ecran.yMax;
 }
 if(missileLimite.yMin > ecran.yMax) {
  this._y = ecran.yMin;
 }
 if(missileLimite.xMax < ecran.xMin) {
  this._x = ecran.xMax;
 }
 if(missileLimite.xMin > ecran.xMax) {
  this._x = ecran.xMin;
 }
}
-------------------------------------------------------------------------------------------------
Je ne répond peut-être pas directement à ta question. Cependant il y a des choses intéressant de ces sources
qui font bouger de façon réaliste les cibles ou les missiles. La partie en bleu, c'est ce qui rend réaliste le
déplacement des objets . Bonne Chance.
-------------------------------------------------------------------------------------------------
Improve
3
Improve Messages postés 176 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 28 novembre 2009
23 déc. 2007 à 00:45
Pour faire au max, tendre vers la réalité, tu devras te soumettre à la trigonométrie [Math.sin( ) et Math.cos( )] sont des méthodes très utilisé pour les jeux de tir à partir d'un vaisseau. Je vois que tu es en ' MX ', dû moins je le pense. Je vais essayer de retrouver un vieux code. dans mes archives qui traite du sujet.
je re : a+

Improve
0
Rejoignez-nous