cs_maat
Messages postés2Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention27 février 2004
-
23 févr. 2004 à 14:30
cs_maat
Messages postés2Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention27 février 2004
-
27 févr. 2004 à 12:10
S'il vous pait j'ai besoin d'un volontaire super sympas pour me programmer le tir d'un vaisseau qui se deplace dans tout les sens:
c'est un vaisseau qui peut tourner sur lui même vers la gauche ou la droite et avancer ou reculer dans la direction du vaisseau, je voudrais qu'il tir des petites boules jaunes en rafales. Je bute sur ce code depuis un certain temps déja (environ 3 mois!) alors si quelqu'un pouvais me preparer ce codes ce serait super sympa et je le mettrai dans les credit du jeu (c'est rien mais je ne saurais pas quoi faire d'autre pour le remercier!)
merci d'avance à tout les gentils qui m'aideront...
@+
Maat (alias Palléas de son vrai nom)
(r.pouclet@wanadoo.fr )
cadoudal56
Messages postés41Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 2 avril 2005 23 févr. 2004 à 18:16
Allez je suis d'humeur genereuse ce soir....
Il y a longtemps, environ 8 mois j'ai commencé flash par un jeu de tir...
C'etait un jeu de char que j'ai jamais fini......
Alors le heros etait un char qui rencontrait d'autre chars....
Le char du joueur est un clip qui se deplace de gauche a droite et de haut en bas.... Par contre il tire du haut vers le bas...
Voici le code du clip (char) du joueur :
onClipEvent (load) {
//vitesse de deplacement sur l'ecran
speed=8;
n=0;
}
//appui sur fleche droite
onClipEvent (enterFrame) {
if (key.isDown(key.RIGHT)) {
_x+=speed;
if (_x>800) {
_x = 800;
}
//appui sur fleche gauche
} else if (key.isDown(key.LEFT)) {
_x-=speed;
if (_x<0) {
_x = 0;
}
}
//appui sur fleche haut
if (key.isDown(key.UP)) {
_y-=speed;
if (_y<300) {
_y = 300;
}
//appui sur fleche bas
} else if (key.isDown(key.DOWN)) {
_y+=speed;
if (_y>450) {
_y = 450;
}
}
}
Maintenant cela se complique....
Parceque je redecouvre le script en meme temps que toi...
Voici la sequence de tir de l'ennemi, le tir s'oriente directement vers le joueur au moment ou il est lancé....
// ----------------------------------------------
//
// game gun
//
// ----------------------------------------------
shootchance = 3;
shotspeed = 5;
gunx = getProperty("", _x);
guny = getProperty("", _y);
sx = getProperty("_root.ship", _x);
sy = getProperty("_root.ship", _y);
mouse_x = getProperty("_root.ship", _x)-gunx;
mouse_y = getProperty("_root.ship", _y)-guny;
// ----------------------------------------------
// calculate absolute values:
// ----------------------------------------------
if (Number(mouse_x)<0) {
abs_mouse_x = Number(mouse_x)+Number((mouse_x*-2));
xsign = -1;
} else {
abs_mouse_x = mouse_x;
xsign = +1;
}
if (Number(mouse_y)<0) {
abs_mouse_y = Number(mouse_y)+Number((mouse_y*-2));
ysign = -1;
} else {
abs_mouse_y = mouse_y;
ysign = +1;
}
// ----------------------------------------------
// determine hypotenuse length
// ----------------------------------------------
// a squared plus b squared = c squared... (c=hypotenuese) so what is c?
input = Number((abs_mouse_x*abs_mouse_x))+Number((abs_mouse_y*abs_mouse_y));
call("sqrt");
hyp = output;
// ----------------------------------------------
// determine sin(theta)
// ----------------------------------------------
// now we know "c" (the hypotenuese) how do we find the angle? Sine(Theta) is Opposite over Hypotenuese, then lookup the Sine value in the lookup table.
sin_theta = abs_mouse_y/hyp;
// ----------------------------------------------
// lookup angle in table
// ----------------------------------------------
counter = 0;
found = 0;
while (not (found)) {
if (Number(substring(..:sine_lookup_table, Number((counter*6))+1, 5))<=Number(sin_theta)) {
// this counter will only increase if the value we are looking for is LESS than or EXACTLY the angle match in the lookup table. This way, if the sine value has no exact match then the counter will point to the angle closest (less than) the correct answer. How do we know the angle when it's not in the table? There are 90 values in the table. Counter represents which value we are currently comparing. Thus, counter IS the angle.
angle = counter;
} else {
found = 1;
}
counter = Number(counter)+1;
}
// ----------------------------------------------
// add back full circle values
// (because in making all the values absolute (required for some math calculations) we limit the angles to only one quadrant... but there are three more quadrants the angle could be in. This is where I fix this.)
// ----------------------------------------------
if (Number(sx)<Number(gunx)) {
angle = Number((90-angle))+90;
} else {
}
if (Number(sy)>Number(guny)) {
angle = Number(angle)+180;
} else {
angle = Number((90-angle))-90;
}
// ----------------------------------------------
// set rotation
// ----------------------------------------------
setProperty("tourelle", _rotation, angle+90);
// ----------------------------------------------
// shoot at user?
// ----------------------------------------------
// the variable "shootchance" represents a percentage of 100. Since I use a random number, there is (in theory) a 5 percent chance that the random number will be between 1 and 100. Since Random ACTUALLY returns a value between 0 and 99 I add +1.
shootnow = Number(random(100))+1;
if (Number(shootnow)<=Number(shootchance)) {
//if (Number(shootnow)<=100) {
// keep increasing "shotname" so there are no shots with the same name ever.
shotname = Number(shotname)+100;
if (Number(shotname)>=10000) {
shotname = 1000;
}
attachMovie ("star", "shot" add shotname, shotname);
// ----------------------------------------------
// determine shot travel values
// ----------------------------------------------
if (Number(abs_mouse_x)>=Number(abs_mouse_y)) {
// shot is more horizontal than vertical
set("shot" add shotname add ":xmov", shotspeed*xsign);
set("shot" add shotname add ":ymov", shotspeed*(abs_mouse_y/abs_mouse_x)*ysign);
} else {
// shot is more vertical than horizontal
set("shot" add shotname add ":ymov", shotspeed*ysign);
set("shot" add shotname add ":xmov", shotspeed*(abs_mouse_x/abs_mouse_y)*xsign);
}
shotx = getProperty("base_char", _x);
shoty = getProperty("base_char", _y);
setProperty("shot" add shotname, _rotation, angle);
setProperty("shot" add shotname, _x, shotx);
setProperty("shot" add shotname, _y, shoty);
}
Cette partie de code n'est pas de moi j'ai du l'adapter...
En gros tu recherches les coordonnées et tu orientes ton tir
Bref je vais voir si je peux te mettre la source dans le site, jette y un oeuil...
Tu apprendras plein de trucs... Sinon ben je te conseille de faire un tour dans des sites comme celui ci et de jeter un oeuil dans les sources accessibles section jeux, tu trouveras des jeux de tir et tu pourras comparer les scripts...
cs_tom
Messages postés1511Date d'inscriptionsamedi 8 décembre 2001StatutModérateurDernière intervention11 juin 2009 24 févr. 2004 à 12:41
Salut, je pense qu'il y avait plus simple, en partant du principe que si on appuie sur droite ou gauche, on change la _rotation.
Mais ca dépend de la façon dont on voit le fonctionnement, tu peux aussi aller faire un tour dans la section 'jeux', tu auras le choix pour les sources, y en a surement une qui t'aideras...
Cadoudal, tu aurais du traduire les commentaires ;)
Mais je ne sais pas si c'est exactement ce que voulais maat...
cs_maat
Messages postés2Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention27 février 2004 27 févr. 2004 à 12:10
En fait, j'y arrive a peu près à ce que le tir du vaisseau (des boules jaunes...) partes dans la bonne direction mais le problème c'est soit qd j'appuie a nouveau sur espace, la boule tirée precedement parte avec celle d'après, soit elle s'arrete qd je rappuis donc moi ce que je veux c'est que les boules continues leurs progression même quand une autre boule part pour faire un tir en rafale....
merci d'avance
maat