J'arrivais pas à dormir....

Programmation avancée de jeux en PureBasic
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

je sais que office 2000 mettait plein de son à la c.. sur l'ordi, fait une recherche de wav.
j'avait des tirs de laser, des rebond, des toilettes (la chasse d'eau 8O ) enfin de tous et n'importe quoi.
après, on se plaint que office prend de la place .... :?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Bon, c'est pas tout ça, mais maintenant que j'ai mis les sons, ( c'est le même code, page précédente, avec les trois fichiers son à télécharger), faudrait que j'arrive à corriger le bug qui se produit quand la balle tape la raquette sur le bout!

La balle se met à rebondir comme si elle se trouvant à l'intérieur de la raquette, et ça fait 30 points en une demi seconde :lol:

Fait ch... ça !

Quelqu'un à déjà eu ce problème avec SpriteCollision() ?, parce que là, je ne vois pas du tout quelle est la cause du problème.

(Je sais que je suis chiant, avec mon squash, mais tant quà faire, autant que je le finisse :roll: ) :lol:

Chris :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Régis, au s'cours, j'ai cliqué deux fois

Tu peux virer le dernier message, s'il te plaît ?

Chris ;)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

ben une idée comme ça , peut-être qu'il faut faire un SensY = -SensY
quand tu touches les extrémités plutôt qu'un SensX = -SensX ?

et dans ce cas ,tu vas être obligé de tester toi même la position de ta balle en fonction de la position de la raquette , et ouais , ça ne fait pas tout le spritecollision() :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

comtois a écrit :ben une idée comme ça , peut-être qu'il faut faire un SensY = -SensY
quand tu touches les extrémités plutôt qu'un SensX = -SensX ?

et dans ce cas ,tu vas être obligé de tester toi même la position de ta balle en fonction de la position de la raquette , et ouais , ça ne fait pas tout le spritecollision() :)
Ben j'ai essayé ça, mais ça n'a pas fonctionné. Ou alors, j'ai pas fait comme il faut. C'est possible.
Je vais réessayer, on verra bien.

Merci ;)

Chris :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

et puis une autre idée comme ça ,il ne suffit pas d'inverser le sens , il faut aussi placer la balle hors collision , sinon , il est possible que tu sois en collision sur plus d'un tour :?:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ca, je l'ai pas fait, par contre. Je vais essayer ça aussi.

Merci ;)

Chris :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

fait la balle carré pour etre dans l'esprit d'epoque !!
on avais pas inventé le cercle a cette epoque !! :)
lorsque ta balle a touche ta raquette tu inverse tes coordonees (normal !)
mais surtout tu temporise la detection de rebond !!!
c'est indispensable pour pas que cette detection se fasse sur plusieur tour !


petit algo shematisé !

variable=11

boucle principal
variable+1

si variable>10:test balle collision raquette:endif

la balle touche la raquette:inversion des coordonees ball : variable=0


fin_boucle principal
Dernière modification par Backup le mer. 09/juin/2004 0:36, modifié 1 fois.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

c'est plus propre de placer la balle au contact de la raquette et d'inverser le sens , comme ça , tu vois vraiment la balle rebondir sur la raquette , c'est mieux qu'une tempo non ? :P
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

fait la balle carré pour etre dans l'esprit d'epoque !!
on avais pas inventé le cercle a cette epoque !!
Exact, il y avait un carré à la place de la balle. Je vais modifier ça.
petit algo shematisé ! ....
J'ai rien pigé à ce que tu me racontes :lol:
Je suis pas un habitué des trucs en 2D, moi.

Chris :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

losque ta balle a touche ta raquette
il faut que tu deconnecte la detection de rebond !!
car pendant plusieur tour de boucle
la detection va continuer a se faire
hors ! si a la premiere detection tu inverse les coordonees
pour creer le rebond c'est bien
mais comme dans la boucle suivante la balle continuera de toucher la raquette les coordonnes vont encore s'inverser, ce qui fera revenir la balle vers la raquette !!!
et on recommence !! (j'ai eu le problem avec purenoide !)

la solution consiste apres le rebond a deconnecter la detection !!! pendand un laps de temps qui permet a la balle de repartir !!

car la detection ne se fait pas vraiment sur les bords des sprites !!!
mais sur une chevauche !!!!
Resultat = SpriteCollision(#Sprite1, x1, y1, #Sprite2, x2, y2)
Description

Teste si les deux Sprites se chevauchent
:D
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Oui, en fait, ca revient à faire ça:

Code : Tout sélectionner

If SpriteCollision()
  Variable = 1
  ...
  ...
  ...
  If variable = 1
    Inverse le sens
    Variable = 0
  endif
endif
C'est ça ?

Chris :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Chris a écrit :Oui, en fait, ca revient à faire ça:

Code : Tout sélectionner

If SpriteCollision()
  Variable = 1
  ...
  ...
  ...
  If variable = 1
    Inverse le sens
    Variable = 0
  endif
endif
C'est ça ?

Chris :)

non !!

car la tu fait confiance a la fonction de detection !!
ça va marcher pour le premier tour de boucle
mais le suivant la fonction "If SpriteCollision()"
sera encore vrai , et regalere !!!

Code : Tout sélectionner





if variable=0
 SpriteCollision()
 flag = 1 :; cela va creer la tempo !!!
  ...
  ...
  ...
  Inverse le sens
  xball=-xball
  yball=-yball

  pour les rebon tu peut mettre une nouvelle condition
  qui dit que si la balle est inferieur au millieu de la raquett
  ell par vers le bas
  si elle est superieur au millieu de la raquette
  elle part vers le haut !!
endif

if flag=1
  variable+1 :; on coupe la detection !!!
endif


if variable>20 
  variable=0 :; on rend la detection a nouveau possible !!!
  flag=0
endif 

bien sur le pas de la balle doit etre en dehors de cette condition
au debut du prog dans les inits

ex : xball=10 :yball=10
de cette facon la detection n'aura lieu QUE si la variable<20

donc ça laisse 20 boucle pour que la balle se barre !!




:) [/code]
Répondre