PDA

Voir la version complète : fonction y=ax et vitesse de déplacement


maxilight
17/04/2005, 14h38
uuu,

screenshot du jeu sans média (http://img135.echo.cx/my.php?image=screenshot3uv.jpg)

je suis entrain de faire un petit jeu ou on utilise une catapulte,on clique sur le projectile puis on le dirige et enfin on relache la souris pour tirer.le problème commence quand je veux déterminer la direction du projectille qui va partir,j'ai pensé à faire une fonction y=ax.donc j'ai calculé a grace aux coordonnés du projectile.

J'arrive à faire que le projectille parte dans la direction voulu mais le problème c'est que la balle pars trop vite ou trop lentement suivant la grandeur du coefficient directeur a( c'est normal en fait ) je voudrais que la vitesse soit toujours la même (enfin pour l'instant) comment puis je faire ?

Atréides
17/04/2005, 14h43
comme je le dis souvent : newxvalue et autres sont de très mauvaises commandes : elles n'aide pas à l'apprentissage de la trigonométrie...

... imagine que tu veuilles lancer ton objet avec une force de 10 selon l'angle alpha :
vx = 10 * cos(alpha)
vy = 10 * sin(alpha)

et voila, le tour est joué

maxilight
17/04/2005, 19h20
moué bof ca marche pas ! lol

REM Projet: catapulte
REM Création: 16/04/2005 22:49:22
REM
REM ***** Fichier Source Principal *****
REM
sync on
sync rate 60
ballx as float
bally as float
coss as float
sinn as float

ballx=0
bally=0


do
cls
line 0,450,640,450
line 320,450,320,350
circle ballx+319,bally+350,6

if mousex()>=314 and mousex()<=325 and mousey()<=456 and mousey()>=344 and mouseclick()=1
feu=1
else
if mouseclick()=0 and hypotenuse<10 and feu<2
feu=0
ballx=0
bally=0
else
if mouseclick()=0 and hypotenuse>=10 and feu=1
feu=2
endif:endif:endif

if feu=2
ballx=ballx+(force*coss)
bally=bally+(force*sinn)
endif

if feu=1
center text 320,100,"feu !!!"
line 319,350,(ballx+319),(bally+350)
ballx=mousex()-319
bally=mousey()-350
hypotenuse=sqrt((ballx*ballx)+(bally*bally))
hypotenuse=int(hypotenuse)
force=hypotenuse/10
force=int(force)
coss=bally/hypotenuse
sinn=ballx/hypotenuse
if mousey()<=330 then bally=-20
endif

text 0,20,"ball en x à partir de la barre: "+str$(abs(ballx))
text 0,40,"ball en y à partir de la barre: "+str$(abs(bally))
text 0,0,"hypotenuse: "+str$(hypotenuse)+" / feu: "+str$(feu)+" / force: "+str$(force)
text 0,60,"cos alpha: "+str$(coss)+" / sin alpha: "+str$(sinn)
sync
loop

c'est mon code essaye pour voir...

maxilight
17/04/2005, 21h19
alors quelqun à essayé ? :00000015:

maxilight
18/04/2005, 01h02
nan enfait c'est bon,j'ai trouvé l'erreur

graphiboc
20/04/2005, 16h53
j'ai fait tout un tas de fonctions, permettant de gérer la physique en 2d, mais uniquement pour des objets de type "point". elles gèrent la gravité, les forces, le vent, les effets, le poids, la résistance de l'air en fonction de la taille, les effets de rotation, la friction du sol, et les collisions sur un terrain en memblock, systeme qui marche très bien, mais peut faire pas mal laguer l'ordi (en fait, lors des collisions avec le terrain, on peut avoir l'écran noirpendant une fraction de seconde). Tu peux modifier le terrain en tempsréél, etc. Le truc, c'est ce gérer tout simplement ton objet avec les vrais propriétés et formules physiques.

Sinon, tu vas sur le site officiel de dbpro, tu vas dans les newsletter et tu cherches, dans une il y a un moteur tout fait, en fonctions que j'ai découvert il y a deux semaines. (l'affiche c'est worms 3d je crois)