DirectX --> interception clavier + empecher rotation

icornato Messages postés 13 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 5 mai 2009 - 2 mars 2009 à 21:59
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009 - 20 mars 2009 à 22:07
Salut à tous

J'ai quasiment fini de développer mon appli : VB.net + directX.

2 petites choses qui m'embetent :

--> j'intercepte le clavier dans le programme  : par exemple si l'utilisateur appuie N, ça fait apparaitre certains numéros. Le probleme, c'est que suivant le graphique affiché (plus ou moins chargé) et la puissance du PC, c'est galere ! Parfois faut appuyer une fraction de seconde, d'autres faut appuyer longtemps. C'est un peu embetant.

--> ma fenetre directX n'est pas plein écran. Quand l'utilisateur clique sur le bouton gauche de la souris en déplaçant cette derniere, la structure rentre en rotation. Ca c'est impeccable. Mais j'aimerai que quand l'utilisateur déplace la fenetre (en cliquant dans la barre bleue en haut), ça n'induise plus de rotation. Comment savoir que l'utilisateur a cliqué sur cette barre bleue, et qu'il est en train de déplacer la fenetre ?

Merci

Bonne soirée

4 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 mars 2009 à 07:43
pour ta souris, tout est question de %, dans un jeu video...


si tu veux que ton jeu soit fluide et constant, quelle que soit la puissance ou la charge du pc...

tu calcule les deplacements, et tout en te choississant une base de temps...

tant de millimetres par secondes, etc...

tu calcules ensuite le temps ecoulé depuis la dernière frame.

si, par exemple (en gros, hein) tu as 0.5 secondes écoulées, tu devra diviser par deux l'amplitude de tes mouvements

si la frame suivante intervient en 0.4 secondes, la fraction change, etc.etc.

tout cela absorbe alors la charge de ton processeur a chaque frame.
0
icornato Messages postés 13 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 5 mai 2009
3 mars 2009 à 20:53
en fait je ne programme pas un jeu mais un logiciel de calculs avec visu graphique.
Mais j'imagine que le principe reste le meme.
La rotation (clic gauche+déplacement souris), la translation (clic droit+déplacement), le zoom (on maintient appuyé + ou -  suivant qu'on zoome ou dézoome), tout ça ça roule bien.


Mais l'interception d'une pression unique et non durable (comme le + ou - du zoom) sur un bouton du clavier est vraiment plus chiante. Je vais essayer de programmer un timer....

Merci pour ta réponse


 


PS : pour mon probleme de rotation   http://www.youtube.com/watch?v=e83YxFIW2HY
j'explique : je lance un calcul dans mon appli développée, je visualise la structure, je m'amuse à la faire rentrer en rotation, et à la fin je fais apparaitre le probleme --> la structure rentre également en rotation quand l'utilisateur déplace la fenetre graphique (normal puisqu'il déplace avec la combinaison interceptée par directX, soit clic gauche +déplacement souris). Comment bloquer cette rotation quand la fenetre est déplacée ?


 
0
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
20 mars 2009 à 22:03
Je m'excuse de m'immiscer dans la conversation, mais je suis confronté au problème inverse: j'arrive pas à démarrer. J'ai construit un beau tetraêdre inscrit dans une sphère pytagoricienne au centre du repère des axes pour simplifier, et avec l'idée d'appliquer aux volumes des règles identiques à celles qu'on utilise pour faire de la tri-D avec ses triangles, car trois teraêdres joints par les cotés font un demi-tour : la somme des angles inscrit et comme c'est isométrique, on peut le répèter comme des fractales, et ainsi remplir des volumes comme on le ferait pour les surfaces avec des triangles.
Evidemment, quel que soit le coté qu'on choisit pour l'observer, c'est toujours trés prés du triangle. Les déformations de la troisième plus petite face visible ne sont jamais très fortes. Je crois qu'en déplacant l'objet, en rotation par exemple, on pourait lui donner du volume. Il existe de nombreuses fonctions pour ca, mais leur caractère trés rigoureux risquerait de gacher l'interprètation spaciale de l'observateur qui doit interragir pour créer le relief. C'est à lui de vérifier qu'il y a bien quatre faces, quatre sommets, et, si il est courageux et qu'il sait compter jusqu'a six, il peut aussi s'interesser au nombre des arrêtes.
Tout ceci n'est pas trés compliqué, et quand on a compris, parait meme très simple, et j'ai donc écrit un programe pour suivre les mouvements de la souris dans une sphère imaginaire autour de l'objet, le moteur d'affichage s'occuppe des projections et des calculs de rèflexion pour l'éclairrage. rien de bien compliqué non plus: il n'y a aucune raison pour que ca ne fonctionne pas.
J'ai fait comme vous: je ramène le déplacement à un couple de rotations orthogonales que je transmet au moteur dans des variables de type compatible. Tout semblait aller bien, le programme enregistre le clic souris et passe la main au timer pour calculer les deux rotations tous le dixièmes de seconde et le compilateur me dit:
  Le thread appelant doit être en mode STA, comme l’exigent de nombreux composants de l’interface utilisateur.
Je sais que ce n'est pas direct X, mais nous sommes en VB.Net et développons des volumes, et j'ai hate d'essayer mon générateur de révolutions autour d'un axe pour pouvoir enfin m'occuper de rythme et de pouvements. Si vous pouvez trouver une idée pour débloquer ma souris, je poserais plus de questions idiotes sur le site.
Je vous suplie !!!
0
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
20 mars 2009 à 22:07
PS. Je contrôle le bouton. C'est le déplacement qui n'est pas sur le fil.
0
Rejoignez-nous