VB6 /directX8 et direct3D ( bug incompréhensible)

Signaler
Messages postés
48
Date d'inscription
jeudi 16 août 2007
Statut
Membre
Dernière intervention
3 juin 2018
-
Messages postés
425
Date d'inscription
samedi 11 juillet 2009
Statut
Membre
Dernière intervention
28 octobre 2016
-
Bonjour à tous
Je voudrais vous soumettre un bug incompréhensible qui se produit dans le programme que je suis en train de mettre au point à savoir:
C'est un jeu de bandit manchot en 3d et dans ma sub de rendu de direct3d , je fait un test de couleur pour savoir sur quelle case s'arrete la roue ( j'utilise pour cela l'API Windows GETPIXEL....).
Et donc je veux qu'en fonction de la couleur , la variable gain change de valeur.
Quand je lance le programme il arrive que de temps en temps la variable gain reste à 0 alors que la couleur est bien testée ( car je l'affiche à l'écran pour les tests).J'ai vérifié au moins 30 fois mon code et il n'y a pas d'erreur et de plus ,ce defaut se produit que sur la roue du centre alors qu'il y en a trois , pourquoi ? et pourquoi de manière aléatoire , car s'il y avait une erreur dans le code , le bug apparaitré chaque fois .
bien sur l'API GETPIXEL est bien déclarée en début de module
Ainsi que toutes les variables utilisées (long pour la couleur et Integer pour la variable gain).
Voici un extrait de mon code dans la sub rendu3D

couleur=getpixel(form1.hdc,x,y) ' x et y étant les coordonnées du point à tester.
if couleur=&hff00ff then gain=1
if couleur=&hffff00 then gain=2
etc
J'ai fait les tests 20 fois et au 21e , le bug apparait mais il peut aussi apparaitre au bout de 5 ,8 ou 15 tests.
Je devient fou de ne pas comprendre alors si quelqu'un peut m'aider , j'en serais très reconnaissant.
Encore merci et cordiales salutations

3 réponses

Messages postés
425
Date d'inscription
samedi 11 juillet 2009
Statut
Membre
Dernière intervention
28 octobre 2016
1
Saluu !
Montre moi la déclaration complète de l'api que tu a utilisé


Microsf01
Copyright©Microsf01
Favier Sébastien 01
http://microsf01.fr.nf/
Messages postés
48
Date d'inscription
jeudi 16 août 2007
Statut
Membre
Dernière intervention
3 juin 2018

Bonjour,
A vrai dire , la conception de ce jeu étant déjà ancienne , j'ai du trouver la solution moi mème à l'époque mais je ne me souviens plus quelle était ma boulette.
Toujours est il , voici la déclaration de l'API utilisée.
Merci pour l'attention portée à mon programme.

Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, _
ByVal X As Long, ByVal Y As Long) As Long

Cordiales salutations
Messages postés
425
Date d'inscription
samedi 11 juillet 2009
Statut
Membre
Dernière intervention
28 octobre 2016
1
Bonjour,

j'utilise la même déclaration :/

essaie de séparer mais faire la condition avec une variable


c1 =  &hff00ff
c2 = &hffff00

if couleur=c1 then gain=1
if couleur=c2 then gain=2


OU même , je te passe un bout de code de mon programme de motion détection que j'ai développé
aperçu : http://microsf01.e-monsite.com/rubrique,mes-ptits-programmes,1469712.html Partie V

    pixel  = GetPixel( {objet} .hdc, Int(x), Int(y))

    'On récupère le rouge :
    R = Int(pixel Mod 256)

    'Le vert :
    v = Int((pixel - R) / 256 Mod 256)

    'Et le bleu
    B = Int((pixel - R) / 256 / 256)


Comme ça on récupère la couleur R , V , B sur un pixel indiqué dans les coordonnées X , Y

après tu fais
rem pour le vert foncé
if r = 17 then
  if v = 89 then 
    if b = 38then
      {....}
    end if
  end if
end if



ps : pour savoir la couleur correspondante au rvb , ouvre Paint , et va dans "modifier les couleur" un truc comme ça et tu doit avoir des couleurs étalées au quelle tu peux choisir la couleur , choisis la et regarde en dessous il y a le rvb

Voilà !

Microsf01
Copyright©Microsf01
Favier Sébastien 01
http://microsf01.fr.nf/