Utilisation des classes pour créer des boules de billard [Résolu]

Messages postés
21
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
13 octobre 2006
- - Dernière réponse : jsem2k1
Messages postés
125
Date d'inscription
samedi 11 décembre 2004
Statut
Membre
Dernière intervention
12 août 2008
- 24 mai 2006 à 23:53
bonjour,

je passe à VB .net et au même temps à la POO. j'ai lu comment créer des classes et ça va pas trop mal. mon problème vient plutot de ma façon de penser( lol dit comme ça ).
j'aimerais créer une classe Cboule qui possède comme propriétés position, vitesses,vitesses angulaires,....
jusqu'à la pas de blème.
maintenant ce qui m'intéresse c'est comment faire pour qu'une boule reconaisse qu'elle entre en collision avec une autre.
est-ce qu'il faut faire un tableau possédant toutes les positions des instances de Cboule et les comparer pour chaque boule ou est-ce qu'il existe un moyen pour qu'une boule reconnaisse simplement qu'elle touche une autre boule?
désolé si c'est pas super claire. n'hésitez pas à demander plus de détails.

merci d'avance

amicalement

miro
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
125
Date d'inscription
samedi 11 décembre 2004
Statut
Membre
Dernière intervention
12 août 2008
1
3
Merci
Salut c'est tout un problème sa (du moins pour moi) moi a ta place ce que je ferais c'est assez simple. Je commancerai par regarder la trajectoire de la bal. ce qui en sois est assez simple si on a la vitesse et sa position. par la suite je vérifirais s'il existe des boulle sur cette trajectoir la première boule sur la trajectoire sera donc celle a regerder.  ce qui implique qu c'est la boule qui va entré en contacte avec la boule de départ. Maintent a savoir quand le moment exacte de la collision va se produir et avec quelle force et bien c'est une question de mathématique (ou de physique a toi de voir) qui peux etre assez simple a programer si on n'a les bonne équation.

Autre petit truc si tu éliminais toutes les boule qui son déja sorti du jeux ce serai plus simple. je ne sais pas si j'ai peu t'aider. Voi que je ne suis pas exper la dedans mais c'est comme sa que je procèderais
Bonne chance

[size=4]The J/size=4 [B)]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 206 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jsem2k1
Messages postés
21
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
13 octobre 2006
0
Merci
merci c'est déja un début.
pour la physique( et c'est bien de la physique,vive la méchanique) ça joue merci.
c'est vraiment une question de programme qui me pose problème. ce que je peut calculer(et ce qui m'intéresse pour calculer les collisions) c'est la position de la boule à l'instant suivant, c-a-d au prochain coup de timer. maintenant je peux comparer cette position avec toutes les autres positions des boules au prochain instant sans problème avec par exemple un tableau, mais le tout est très lourd.
ne connnaissant pas bien la POO, je me demandais si on ne créer un évenement qui se déclenche quand deux boules se rencontrent sans passer par un tableau de positions.
merci
miro
Commenter la réponse de mi12ox
Messages postés
125
Date d'inscription
samedi 11 décembre 2004
Statut
Membre
Dernière intervention
12 août 2008
1
0
Merci
Au lieux de faire tous tes calcul en "temps réel" soi a chaque coup du timer pour quoi ne les fait tu simplement pas a l'avance. Je veux dire Soi B: la boule blanche et Cn la boule #n. Si je ne me trompe pas si on frappe la boule B elle va en ligne droite. Elle enprunte donc un certain couloirs et il n'existe qu'un nombre fini de boul dans ce couloir. Une fois que l'on n'a déterminer les boule dans ce couloir il suffi de trouver la plus proche des boule. Soi la boule Cn qui se trouve dans le couloir et qui est la plus proche de B. On fait les calcul pour savoir comment la boul Cn qui sera frapper va se comporter et tout et tout. Une fois que l'on n'a toutes les information. Il suffi de créé une annimation. On n'a donc pas besoin d'un timer. En fait on calcul tout au début et on créé une animation par la suite. Pour l'animation ce n'est pas si dur on n'a des objet graphique qu'on change leur possition.

Moi comment est ce que je voi cette parti de collision c'est qu'on n'a une fonction qui détermine la tajectoire de la boule frappé et permer de savoir qu'elle boule (ou Coté sera toucher par la boule frapper.) Une fonction qui permet de déterminer le comportement de la boule  après avoir attein sa première cible ( une autre boul, le trou ou un des cotés). Et après que l'on connais exactement le comportement de touts les boule on cré une annimation. Pour l'annimation on n'a juste besoin du point de dépar, du point d'arrivé et d'un flag qui sera relevé quand on pourra partir une autre annimation.

Voi tu peux aussi créé un évènement dans ta classe qui se déclance a chaque fois que la possotion de ta boule change. Cette evèmement chercherais par examble dans touts les boulles encore sur le jeux s'il y en a une qui a la meme possition que lui. Si oui elle t'indiquerais qu'il y a une collision. Le problème c'est que sa bouffe beaucoup de ressource et que c'est pas pratique. 

Je ne me considaire pas expère dans ce domaine ( les boulle de billard) mais je crois que dans ce cas prési si c'est mieux de calculer tout les déplacement et de faire une annimation après que de le faire en "temps rééel.

The J/size=4
Commenter la réponse de jsem2k1
Messages postés
21
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
13 octobre 2006
0
Merci
merci pour ta réponse,

en effet ça pourrait être plus simple de tout calculer à l'avance, mais le problème c'est que les boules ne vont pas toujours en ligne droit(->Effets latéraux et verticaux) et que toutes les boules peuvent être en mouvement simultanément, c'est pourquoi je pense qu'il est tout de même plus simple de calculer en temps réel.
par contre je suis interessé dans ta proposition d'un événement qui se déclenche à chaque déplacement.est-il indépendant du timer?donc peut-il se déclencher 3 fois en un coup de timer(multicollision ou cassage du début)?

merci

miro
Commenter la réponse de mi12ox
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
18
0
Merci
D'accord sur le principe de dire qu'on ne peut aps calculer à l'avance la boule qui sera toucher par une autre, car les autres bouge aussi (remarque qu'en fait , cela est possible, il ne s'agit que d'un système d'équation, que les boule aille en ligne droite opu avec un effet, mais le système d'équation serait à mon avios trop lourd à gérer. LE calcul en temps réel devrait être mieux je pense)
Piour gérer les collisions (la question de départ en fait, je crois), perso, je traiterais cela à chaque tour calcul :
Sur un coup de timer, tu parcoures ta collection de boule et tu recalcules leur nouvelle position en fonction de leur position courante, leur direction et leur vitesse. Une fois fait, tu reparcours a nouveau ta collection de boule pour voir si une boule ne serait pas par hasard en contact avec une autre (en comparant leur position après mouvement en tenant compte du rayon des boules). S'il y a contact, il y a impact : Tu recalcules alors une nouvelle vitesse et une nouvelle direction pour les deux boules et tu continues la recherche d'impacte.
Tu attends alors le nouveau coup de timer et tu boucles.
Il te faudra aussi géré les impacts entre une boule et une bandes mais cela sera faisable en même temps que la recherche d'impact entre deux boules
Si le modèle objet et le modèle mathématique sont bien optimisés, cela devrait roulé

CR
Commenter la réponse de crenaud76
Messages postés
125
Date d'inscription
samedi 11 décembre 2004
Statut
Membre
Dernière intervention
12 août 2008
1
0
Merci
Mmmmmm si l'évènement  qui vérifi une collision ce déclanche quand la position de la boule est modiffier et que la position de la boule est modiffier a chaque coup de timer je ne crois pas qu'il est possible de déclancher l'évènement de vérifiation de collision plusieur fois avant un coup tu timer.

Mais a tu penser au Multi Threading...
je veux dir par la que tu gère chaque boule en mouvement sur un thread différant. un threand qui vérifi continullement les possition des boule a chaque coup du timer détermine les collision et créé et libère de nouveau threads lors de la collision . 

[size=4]The J/size=4 [B)]
Commenter la réponse de jsem2k1