1 pièce(s) jointe(s)
[Linux] simuler au système pression sur touches du clavier
Bonjour,
je suis sur un projet pour simuler l'appuis sur les flèches directionnelles selon la variation de position du volant.
Je suis sous Archlinux.
Je joue à FS19, mais le jeu ne reconnait pas le volant.
Qjoypad ne donne pas bon résultat car il ne dose pas l'appui sur les touches selon la variation du volant
J'ai donc commencé à coder en C++ avec SDL un petit soft qui récupère la position du volant, calcule la variation du volant entre 2 temps pour définir s'il faut braquer à droite ou à gauche et de combien.
Cette partie fonctionne très bien, maintenant ma question est comment je dis qu'il faut simuler au système que j'ai appuyé une, 2.3... fois sur la flèche droite ou gauche.
J'ai trouvé des sujets avec key_event mais il dépend de la librairie windows.h qui est windows ? je me trompe?
quelle librairie et quelle fonction je peux utiliser?
J'ai regardé dans SDL mais je n'ai pas trouvé.
Pièce jointe 464958
Mon projet :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
| #include "SDL2/SDL.h"
#include <iostream>
#include <string>
#include <unistd.h>
int main(int argc , char *argv[])
{
//initialisation de sdl
SDL_Init(SDL_INIT_JOYSTICK);
std::cout << "initilisation volant" << SDL_Init(SDL_INIT_JOYSTICK) << std:: endl;
//verification du volant
SDL_Joystick *joy;
if (SDL_NumJoysticks() > 0)
{
// Open joystick
joy = SDL_JoystickOpen(0);
if (joy)
{
printf("Opened Joystick 0\n");
printf("Name: %s\n", SDL_JoystickNameForIndex(0));
printf("Number of Axes: %d\n", SDL_JoystickNumAxes(joy));
printf("Number of Buttons: %d\n", SDL_JoystickNumButtons(joy));
printf("Number of Balls: %d\n", SDL_JoystickNumBalls(joy));
}
else {
printf("Couldn't open Joystick 0\n");
}
}
else {
printf("pas de volant");
}
//position du volant
Sint16 x;
Sint16 SDL_JoystickGetAxis(SDL_Joystick* joystick, int axis);
int X;
int Xold;
int DeltaX;
X=0;
Xold = 0;
std::cout << "centrez votre volant avant de renter dans un vehicule" << std::endl;
int Temps;
Temps = 25;
while (Temps>0)
{
Temps = Temps-1;
Xold=X;
SDL_JoystickClose(joy);
joy = SDL_JoystickOpen(0);
x = SDL_JoystickGetAxis(joy, 0);
if (x>3000)
{
if (x>30000)
{
X=10;
}
else if (x>27000)
{
X=9;
}
else if (x>24000)
{
X=8;
}
else if (x>21000)
{
X=7;
}
else if (x>18000)
{
X=6;
}
else if (x>15000)
{
X=5;
}
else if (x>12000)
{
X=4;
}
else if (x>9000)
{
X=3;
}
else if (x>6000)
{
X=2;
}
else
{
// de 3000 à 6000
X=1;
}
}
else if (x<-3000)
{
if (x<-30000)
{
X=-10;
}
else if (x<-27000)
{
X=-9;
}
else if (x<-24000)
{
X=-8;
}
else if (x<-21000)
{
X=-7;
}
else if (x<-18000)
{
X=-6;
}
else if (x<-15000)
{
X=-5;
}
else if (x<-12000)
{
X=-4;
}
else if (x<-9000)
{
X=-3;
}
else if (x<-6000)
{
X=-2;
}
else
{
// de -6000 à -3000
X=-1;
}
}
else{
// de -3000 à +3000
X=0;
}
DeltaX=X-Xold;
if (DeltaX>0)
{
std::cout <<"Position: "<< X << " Braquer vers droite de : " << DeltaX << std::endl;
}
else if (DeltaX<0)
{
std::cout <<"Position: "<< X << " Braquer vers gauche de : " << DeltaX << std::endl;
}
else
{
std::cout <<"Position: "<< X << " garder la position , ne pas braquer : " << DeltaX << std::endl;
}
sleep(2);
}
SDL_JoystickClose(joy);
return 0;
} |
Merci de votre aide future