CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[aide] une accélération

News jeu

Expeditions: Samurai veut révolutionner le RPG tactique avec une aventure entièrement jouable en coop

Voir
[MrDiamond]
[MrDiamond]
Niveau 7
02 décembre 2012 à 22:45:02

voilà je voulais savoir comment faire une vitesse
(pour le moment, j'ai un déplacement, quand on appuie sur z le curseur se met à bouger de une case par seconde), mais je voudrais que quand on reste appuyé sur z, le point bouge de n+1 une case à chaque coup (et que quand on change de direction, on perde la vitesse acquise bien sur)

[MrDiamond]
[MrDiamond]
Niveau 7
02 décembre 2012 à 22:55:09

:up:
help please

[MrDiamond]
[MrDiamond]
Niveau 7
02 décembre 2012 à 23:09:26

personne?

tbop2
tbop2
Niveau 10
02 décembre 2012 à 23:13:48

T'as le feu au lac ?

Au lieu d'upper comme un crétin t'as pas l'impression d'avoir oublié quelques informations importantes pour que quelqu'un puisse au moins répondre à ta question ? :honte:

[MrDiamond]
[MrDiamond]
Niveau 7
02 décembre 2012 à 23:37:42

J'ai hésité à mettre les infos, cad les bouts de code correspondants, mais je voulais juste que ceux qui avaient la solution s'intéressent à ma question. Visiblement j'aurais mieux fait de le faire...
Et oui j'ai le feu a lac

Donc voilà le code

void gotoligcol(int lig,int col)
{
// ressources
COORD mycoord;

mycoord.X=lig;
mycoord.Y=col;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), mycoord );
}

int main()
{
//ressources
int key, time=0;
int *varx1=0;
int *vary1=0;
int *vitnx1=0;
int *vitny1=0;
int *nx1=0;
int *ny1=0;
int *x1=0;
int *y1=0;

menu();

while(0<1)
{
if (kbhit())
{
touche(&varx1,&vary1);//acquisition de la touche préssée par le joueur
}

Sleep(1);//on réexecute l'acquisition toutes les 1 ms, c'est à dire presque tout le temps

time++;

if (time>=1000)//toutes les secondes
{
deplacement(&x1,&y1,&x1,&y1,&varx1,&vary1);//on calcule les nouvelles coordonnées *x1 et *y1
vitesse(&x1,&y1,&x1,&y1,&vitnx1,&vitny1);
time=0;
}
}
return 0;
}

int touche(int *varx1, int *vary1)//*varx1 et *vary1 permettent d'alléger le code en prenant pour chaque case la valeur de la modification de *x1 et *y1
{
int key;
key=getch();//avant l'appel de touche(), on vérifie si une touche a été préssée, si oui key prend la valeur du caractère entré
switch(key)
{
case 'a':
*varx1=-1;
*vary1=-1;
break;
case 'q':
*varx1=-1;
*vary1=0;
break;
case 'w':
*varx1=-1;
*vary1=1;
break;
case 'z':
*varx1=0;
*vary1=-1;
break;
case 'x':
*varx1=0;
*vary1=1;
break;
case 'e':
*varx1=1;
*vary1=-1;
break;
case 'd':
*varx1=1;
*vary1=0;
break;
case 'c':
*varx1=1;
*vary1=1;
case 's':
ralentisseur();
break;
}
}

int deplacement(int *x1, int *y1,int *nx1,int *ny1, int *varx1, int *vary1)
{
//gotoligcol(*x1,*y1);
//printf(" ");
*nx1=*x1+(*varx1);//nx1 prend la valeur x1 + la modification de sa position
*ny1=*y1+(*vary1);//même principe avec y1
//gotoligcol(*nx1,*ny1);//on affiche d'abord la case précédente
//printf("X");//puis la nouvelle position de X
printf("%d %d\n\n",*nx1,*ny1);
}

int vitesse(int *x1, int *y1,int *nx1,int *ny1,int *vitnx1,int *vitny1)
{
*vitnx1=*nx1-*x1;
*vitny1=*ny1-*y1;
printf("%d %d\n\n",*vitnx1,*vitny1);
}

tbop2
tbop2
Niveau 10
02 décembre 2012 à 23:57:41

Mets ton code sur pastebin, c'est quoi ton code au juste du C++ ?

Poneymovez
Poneymovez
Niveau 9
03 décembre 2012 à 16:42:33

Ou alors :d)

public static int velocity;
public static int acceleration;

acceleration = 1;
velocity = 0;

if(On avance) {
velocity += acceleration;
acceleration += 1;
}

tbop2
tbop2
Niveau 10
03 décembre 2012 à 16:55:50

Normalement l'exemple typique est de faire appel a la methode d'Euler (meme si en pratique on utilise plus communement RK4 beaucoup plus stable).
Les exemples ci-dessus fonctionnent pour le cas ou le laps de temps est 1, c'est un cas tres partiel car celui-ci ne se rencontre normalement jamais, bien evidemment en pratique entre deux frames tu as moins d'une seconde qui s'ecoule.

Si tu es en Terminale S tu ne devrais avoir aucun probleme a resoudre ce probleme par la methode d'Euler toute bete que tu as du voir en cours.
Il suffit de faire de l'integration discrete de maniere lineaire en fonction d'une variable/fonction d'acceleration donnee, le reste (velocity et position) decoulent tout simplement d'un processus d'integration sur le laps de temps elapsedTime = currentTime - latestTime mesurable entre deux appels de frame rendering.

Plus d'explications ici sur cette excellent lien :
http://gafferongames.com/game-physics/integration-basics/

PS: Ton code est tres moche. :(

myke38
myke38
Niveau 7
03 décembre 2012 à 17:29:50

Poneymovez et WhiteAppleX : L'acceleration doit etre constante !
Si vous faite du "acceleration++", alors vous allez vite vous emballer ^^

Et cela ne marche que si le FPS est constant, et le même sur toutes les machines.

Il vaut mieux utiliser la methode proposé par tbop2, qui prend en compte le nombre de milliseconde écoulé entre 2 itérations.
Ainsi, la distance parcouru sera identique, aussi bien a 2 FPS qu'a 1000 FPS.

http://fr.wikipedia.org/wrg/wiki/Acc%C3%A9l%C3%A9ration : tu as le code en C ;)

Poneymovez
Poneymovez
Niveau 9
03 décembre 2012 à 17:39:31

myke :d) J'ai fais ça à la va vite.

Tout ce genre de chose je crée mon Thread (Java) timer :

:d)

public void run() {
while(this.can) {
try {
this.sleep(1000);
this.seconde += 1;

} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

lokilok
lokilok
Niveau 17
03 décembre 2012 à 18:39:47

C'est, je pense, une mauvaise idée de créer un thread juste pour faire ça :(

tbop2
tbop2
Niveau 10
03 décembre 2012 à 20:52:57

What the fuck, aucun rapport avec les threads là-dedans c'est une archi mauvaise structure de programme que tu as là si tu as du faire ça poneymovez :S.

tbop2
tbop2
Niveau 10
04 décembre 2012 à 10:59:20

Ok, l'OP etait donc semble toute un enieme ejaculateur precoce de la programmation qui debarquait sur ce forum. :honte:

[-ArK-]
[-ArK-]
Niveau 30
04 décembre 2012 à 11:08:41

pourquoi tu dis ça maintenant ? il s'est passé un truc depuis ? :hap:

tbop2
tbop2
Niveau 10
04 décembre 2012 à 13:21:02

Ouais le gars m'avait "harcele" par mail pour que je l'aide juste apres que je fasse mon moralisateur sur ce meme thread. Je lui ai repondu que c'etait pas le hotline ici et qu'il poste ses questions sur le forum lui-meme.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment