Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Collision entre une "image" et une "line" [ Algorithme / Maths ] (nickotine1986)

mardi 15 janvier 2008 à 18:01:09 | Collision entre une "image" et une "line"

nickotine1986

Bonjour à tous et à toutes,

Voilà, je recherche désespérement à détecter les collisions entre une image et une ligne.

Je m'explique:
j'ai deux controles sur une form, Image1 et Line1.
Je peux déplacer mon image avec les flèches du clavier à droite, à gauche, en haut et en bas.
La Line est fixe.

Je ne trouve pas l'algo pour détecter si l'image1 touche la Line1. Quelqu'un pourrait il m'aider? Ce serait super sympa.

Merci d'avance,
Dimitri.

mardi 15 janvier 2008 à 18:58:31 | Re : Collision entre une "image" et une "line"

jmfmarques

Membre Club
Bonjour,

Si ta ligne est un contrôle et qu'elle n'est ni horizontale ni verticale :

Il te faudra en établir l'équation (y = ax + B) et vérifier qu'un point de coordonnées (x,y) des bords de ton image a des coordonnées telle que l'équation est vérifiée. (de l'algèbre, donc)

Tu peux par contre te montrer plus astucieux (puisque ta ligne est fixe) : en lieu et place d'un contrôle, utilise donc la méthode line pour dessiner cette ligne sur ta form, avec la couleur de ton choix. Il ne te restera alors plus qu'à vérifier à quel moment les coordonnées d'un des angles de ton image correspondent à cette couleur (utilisation de Point - voir ce mot dans ton aide en ligne).

mardi 15 janvier 2008 à 22:52:32 | Re : Collision entre une "image" et une "line"

nickotine1986

Merci beaucoup pour ta réponse jmfmarques, qui m'a mit sur la voie. Cependant, j'ai encore quelques problèmes. Voici ma routine de détection de collision que m'a proposé mon frangin (plus calé que moi en maths), entre un contrôle "Command" (qui est bougé par les flèches) et une "line":

Diff = (Line1.Y1 - Line1.Y2) / (Line1.X1 - Line1.X2)
commandx1 = Command1.Left
commandy1 = Command1.Top
Toto = Line1.Y1 - (Line1.X1 * Diff)
moumoute = commandy1 * Diff + Toto
If commandx1 < moumoute Then
ATA = Command1.Top + Command1.Height
ATB = Command1.Left + Command1.Width
    micheline = ATB * Diff + Toto
    If ATA > micheline Then
    ATA = micheline - 1
    Command1.Top = ATA - Command1.Height
    End If
End If

Cependant mon code fonctionne très mal. D'une part, je ne détecte que les collisions si le commandbutton est à gauche de la ligne et si la collision touche la line vers la droite. Ce qui n'est pas du tout pratique, puisque si je veux créer une barrière que le joueur peut contourner, avec ce code la gestion des collisions ne se fera que d'un seul côté de celle ci.

J'ai un niveau très faible en géométrie, ce qui me rend la tâche très difficile voire même impossible. Pourrais tu me donner un coup de main à ce niveau? Mon projet de jeu est bien avancé, mais là je péche par mon niveau en maths médiocre et du coup je ne peux plus avancer. De plus, je ne peux pas utiliser ta deuxième solution, car j'utilise des contrôles dynamiques d'une multitude de couleurs.

Ce qu'il faudrait, c'est que le commandbutton puisse contourner cette "barrière" (la line1) tout en étant bloqué lorsqu'il veut la franchir directement. Après je mettrais l'algo dans une fonction qui sera appelée lors des déplacements du joueur. Je n'enverrais que les positions du joueur (matérialisé par un contrôle image donc 4 positions left, top, left+width,top+height) et les 4 positions de la line en question.

Si tu peux et veux m'aider, ce serait très sympa de ta part. Je comprendrais si ça t'ennuye de donner du code brute, par soucis de ne pas mâcher le travail aux autres, mais ce n'est pas par fénéantise que je viens sur ce forum, mais bien parce que je suis bloqué au niveau mathématiques.


mercredi 16 janvier 2008 à 00:48:56 | Re : Collision entre une "image" et une "line"

jmfmarques

Membre Club

Désolé, mais en traitant la chose par l'algèbre, d'une part, et en devant pouvoir à la fois déterminer une collission et contourner ta droite (ton mur, donc), il va te falloir une infinité de vérifications (une pour chacun des points de ton objet en mouvement, puisqu'un segment à 45 degrés, par exemple, peut avoir l'une de ses deux extrêmités pouvant toucher n'importe quel point du périmètre de l'objet se déplaçant).

L'équation d'une droite passant par deux points est l'une des choses les plus simples à faire.

Mais une infinité de vérifications :

1) ralentira considérablement ton appli
2) prendra un temps tel que le temps que le calcul soit terminé, l'objet aura déjà "enfoncé" ton mur ...

Tu es mal barré, là ...


mercredi 16 janvier 2008 à 13:35:16 | Re : Collision entre une "image" et une "line"

nickotine1986

Merci encore. Dans ce cas, aurais tu une idée pour contourner ce problème? Je veux dire, sans utiliser de line, mais toujours avec l'image de la barrière qu'on ne doit pouvoir traverser ni d'un côté, ni de l'autre. L'idée de m'utiliser des couleurs, je doute que ça puisse fonctionner, car j'ai à peu près 500 images différentes, avec des couleurs parfois similaires voire identiques mais pas forçément de la même taille, ni forçément infranchissable. Surtout que comme j'utilise de la 2D isométrique, ça complique encore plus le truc. 

Je comprends mieux pourquoi j'ai entendu dire sur ce forum que les collisions étaient ce qu'il y a de plus difficile à gérer dans la programmation d'un jeu !

mercredi 16 janvier 2008 à 13:36:34 | Re : Collision entre une "image" et une "line"

nickotine1986

Merci encore. Dans ce cas, aurais tu une idée pour contourner ce problème? Je veux dire, sans utiliser de line, mais toujours avec l'image de la barrière qu'on ne doit pouvoir traverser ni d'un côté, ni de l'autre. L'idée de m'utiliser des couleurs, je doute que ça puisse fonctionner, car j'ai à peu près 500 images différentes, avec des couleurs parfois similaires voire identiques mais pas forçément de la même taille, ni forçément infranchissable. Surtout que comme j'utilise de la 2D isométrique, ça complique encore plus le truc. 

Je comprends mieux pourquoi j'ai entendu dire sur ce forum que les collisions étaient ce qu'il y a de plus difficile à gérer dans la programmation d'un jeu !

mercredi 16 janvier 2008 à 13:37:19 | Re : Collision entre une "image" et une "line"

nickotine1986

Merci encore. Dans ce cas, aurais tu une idée pour contourner ce problème? Je veux dire, sans utiliser de line, mais toujours avec l'image de la barrière qu'on ne doit pouvoir traverser ni d'un côté, ni de l'autre. L'idée de m'utiliser des couleurs, je doute que ça puisse fonctionner, car j'ai à peu près 500 images différentes, avec des couleurs parfois similaires voire identiques mais pas forçément de la même taille, ni forçément infranchissable. Surtout que comme j'utilise de la 2D isométrique, ça complique encore plus le truc. 

Je comprends mieux pourquoi j'ai entendu dire sur ce forum que les collisions étaient ce qu'il y a de plus difficile à gérer dans la programmation d'un jeu !

dimanche 20 janvier 2008 à 20:48:53 | Re : Collision entre une "image" et une "line"

nickotine1986

Je patauge, je patauge...
J'ai eu une autre idée pour ma gestion de collision. Imaginons deux contrôles "image". L'un, qui a l'image d'une statue, a ses coutours noir. L'autre, le joueur, a ses contours bleus.

Serait il possible de programmer une routine qui repère une collision entre les pixels de l'Image du joueur et les pixels noirs de l'image de la statue?



Cette discussion est classé dans : image, détecter, line, image1, collision


Répondre à ce message

Sujets en rapport avec ce message

Toucher l'autre image a l'Aide d'un image [ par ATH|500| ] Moi ce que je voudrais c'est que quand mon image1 touche au coté de mon image2 ben qu'il y ait un msgbox qui se passe...J'ai essayer mais ça marche pa retourné une image mais pas dans une picturebox mais dans une image1.picture [ par toto ] retourné une image mais pas dans une picturebox mais dans une image1.picture car la fonction paint picture n'a pas l'air de marcher (image1.paintictur retourné une image non pas dans picturebox mais dans image1.picture [ par toto ] retourné une image non pas dans picturebox mais dans image1.picture car j'ai tout essayer et paintpicture ne marche pas (image1.paintpicture et tout l pb redimensionnement image [ par chris21 ] Bonjour, je recherche une méthode pour redimensionner et sauvegarder une image, j'ai essayé ça: Image1.Picture.Width = Image1.Picture.Width / 2Image1. Line et image [ par Sibelle07 ] Salut tout le monde !j'aurais voulu savoir comment je pourrais faire par exemple Je crée un contrôle image et que quand l'image passe au dessus de cet Redimensionnement d'image impossible [ par zoglub14 ] Bonsoir à tous,J'essaie desesperement de redimensionner une image chargé dans une PictureBox, pour ensuite la sauvegarderPour cela j'ai crée une deuxi Mon redimensionnement d'image marche mais pas à la bonne taille pourquoi ? [ par zoglub14 ] Bonjour à tous,Données1 Picturebox en visible = False de taille 15479 x 10376 (Twips)1 control image en visible = true et stretch= false taille 5835 x Charger mon image !!! devient fou [ par YabLeo ] Salut j'aimerai savoir pourquoi qd je fais ça :Dim Image1 As Image Image1.Picture = LoadPicture("D:\Mes Documents\Mes images\Marsipio.bmp")ça plant valeur de i dans image(i) [ par deubal ] salut,je bosse sur vb6, mon projet est en lien avec access 2000. Dans une des forms de mon projet, j'ai 4 images qui 'saffichent. elle font partie d'u Line dessus une image [ par Satirik ] Voila je voudrais pouvoir mettre ma Line en premier plan et qu'elle soie au premier plan !! dessus une image et un usercontrol. Et je veux pas dessine


Nos sponsors

Sondage...

CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.