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

J´aide les personne en C/C++

elhuron
elhuron
Niveau 6
01 décembre 2006 à 19:00:10

Finalement il fonctionne :)
J´avais oublié de transferer le dossier de textures :)

T´aurais du creer un dossier klostro laby, mettre tout dedans, et le zipper.

Sinon, il y a des petits defaults, genres tu noir autour de l´ecriture, mais c´est ma carte qui doit faire ca (j´avais deja ca avant).

Pareil pour le jeu warcraftIII, il manque des textures a certains objets.

PS : Dsl pour le triple post...

TNToon
TNToon
Niveau 9
04 décembre 2006 à 09:24:36

Bonjour, je code un minijeu en C où il faut éviter des voitures. J´aimerais que les voitures arrivant en face apparaissent progressivement à l´écran et aient donc une position.y négative au départ, seulement voilà, ça veut pas :( . Même si je met -2000 :p) ça me place ma ´tite voiture à 0 ! Auriez-vous une solution ? Merci !

TNToon
TNToon
Niveau 9
04 décembre 2006 à 09:24:59

Je précise c´est avec SDL.

Fvirtman
Fvirtman
Niveau 10
04 décembre 2006 à 09:41:26

TNToon > tu dois caster en "unsigned" a un moment ou un autre.
car les coordonnées sont bien stockées en signed.

vérifie cela : car si tu mets -2000 dans un unsigned, il conservera une valeur positive (~63000)

TNToon
TNToon
Niveau 9
04 décembre 2006 à 17:34:55

Ouhla ouhla attends, "caster" ? Qu´est-ce que ça veut dire ? :) J´ai cru comprendre qu´on ne pouvait pas avoir de coordonnées négatives avec SDL mais je ne vois pas comment faire alors...

TNToon
TNToon
Niveau 9
04 décembre 2006 à 17:39:59

Oki j´ai vu ta réponse sur le forum de prog, on a qu´à discuter ici. Bref je crois vraiment qu´on ne peut pas placer une surface à une position négative, voilà mon code (simplifié) :
SDL_Rect positionVoiture, positionVoitureEnnemie;
while(continuer)
{
SDL_PollEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;

case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_RIGHT:
if (positionVoiture.x <= 395)
positionVoiture.x += 1;
break;

case SDLK_LEFT:
if (positionVoiture.x >= 200)
positionVoiture.x -= 1;
break;
}
break;
}
if (positionVoitureEnnemie.y <= 525)
positionVoitureEnnemie.y += 2;
if (positionVoitureEnnemie.y > 525)
{
positionVoitureEnnemie.x = rand() % (395 - 200 + 1) + 200;
positionVoitureEnnemie.y = -75; // Mal
gré cette ligne il me place ma voiture en 0.
}

SDL_BlitSurface(voiture, NULL, ecran, &pos
itionVoiture); // voiture est une surface

SDL_BlitSurface(voitureEnnemie, NULL, ecra
n, &positionVoitureEnnemie); // voitureEnnemie est une surface

SDL_Flip(ecran);
}

Fvirtman
Fvirtman
Niveau 10
04 décembre 2006 à 17:40:36

si, regarde la structure SDL_rect :

http://www.libsdl.org/cgi/docwiki.cgi/SDL_5fRect

x et y sont des Sint16
si tu regardes les typedef associées, c´est des :

signed short, autrement dit, de range -32768 .. +32767.

Donc tu peux avoir des coordonnées négatives sans problemes :)

w et h, eux, sont des Uint16 -> unsigned short, donc de 0 .. 65535
Ce qui est logique, car tu ne peux pas avoir une longueur/largeur négative.

Regarde bien comment tu remplis tes Srect::x et Srect::y , tu dois mal les remplir, ou alors tu mélanges rectangle source et rectangle destination.

N´oublie pas l´ordre dans SDL_Blit :
http://www.libsdl.org/cgi/docwiki.cgi/SDL_5fBlitSurface

d´abord la source, puis ensuite la destination.
Tu peux mettre NULL pour le rect source, mais surement pas pour le rectangle destination ! vérifie que tu as bien rempli x et y pour le rectangle dest.

PS : caster = convertir le type. A priori, je ne pense pas que ton soucis vienne de la.

Fvirtman
Fvirtman
Niveau 10
04 décembre 2006 à 17:44:41

Il est possible, avec les if et les switch en amont, que tu ne passes tout simplement pas par ta ligne
positionVoitureEnnemie.y = -75;

Met un breakpoint et passe en debuggage.
J´ai fait un topic la dessus il y a longtemps.
(et ne lance pas ton test en plein écran quand tu debug)

cherche dans ce forum "debug", un topic de mon ancien pseudo : "JeanYvesYves"

TNToon
TNToon
Niveau 9
04 décembre 2006 à 18:05:45

J´ai fait un code simple, et bien, lorsque je "blitte" en dehors de ma boucle while, ça marche et à l´intérieur, ça ne marche pas ! Une solution ?

// Ce code fonctionne

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <SDL/SDL.h>

int main(int argc, char *argv[])
{
int continuer = 1;
SDL_Surface *ecran = NULL, *test = NULL;
SDL_Rect position;

position.x = 0;
position.y = -45;

SDL_Event event;

SDL_Init(SDL_INIT_VIDEO);

ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWS
URFACE | SDL_DOUBLEBUF);
test = SDL_CreateRGBSurface(SDL_HWSURFACE, 50, 50, 32, 0, 0, 0, 0);

SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
SDL_FillRect(test, NULL, SDL_MapRGB(ecran->format, 255, 0, 0));

SDL_BlitSurface(test, NULL, ecran, &position);
SDL_Flip(ecran);

while(continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
}
// Je met d´habitude ici mes BlitSurface...
}

SDL_FreeSurface(test);
SDL_Quit();

return EXIT_SUCCESS;
}

TNToon
TNToon
Niveau 9
04 décembre 2006 à 18:06:34

Quand je dis ça marche, c´est que ça me place bien ma surface avec une partie non visible. Comment faire maintenant ?

TNToon
TNToon
Niveau 9
04 décembre 2006 à 18:14:38

Ah ça marche si je redéfini la "position" dans la boucle, bon je teste ça avec mon mini jeu, merci Fvirtman.

Fvirtman
Fvirtman
Niveau 10
04 décembre 2006 à 18:22:50

fait attention avec les pollevent.

normalement, quand tu appuies sur une touche, un seul event est généré, puis un seul est généré quand tu relaches.

regarde mon tuto §2.1.4 si tu veux une encapsulation de ça, je suis assez fier de ma fonction "UpdateEvents" qui me permet d´oublier pollevent :)

TNToon
TNToon
Niveau 9
04 décembre 2006 à 18:27:02

Bah écoute je crois que je vais te piquer ta fonction :) . Là je suis en train de "refaire" le code en virant ce qui ne sert à rien pour le moment pour m´assurer de ne pas faire de bêtise et je vais voir comment me servir de ta fonction qui m´a l´air bien pratique.

Fvirtman
Fvirtman
Niveau 10
04 décembre 2006 à 18:29:35

ok :)

TNToon
TNToon
Niveau 9
04 décembre 2006 à 18:43:25

while(continuer)
{
UpdateEvents(); // Gère les évenement clavier et s
ouris

if (key[SDL_QUIT]) // Clic sur la croix
continuer = 0; // Arrêt du programme
......

Le "key" passe pas : "key" undeclared (first use i
n this function)... :(

TNToon
TNToon
Niveau 9
04 décembre 2006 à 19:14:21

Je suis stupide, key est une globale que j´avais pas ajouté... Pfff :)

Fvirtman
Fvirtman
Niveau 10
04 décembre 2006 à 20:01:31

:-)

TNToon
TNToon
Niveau 9
04 décembre 2006 à 20:29:24

Bon bah j´ai réussi, quoi je faisait, ma voiture était d´abord blitté à -75, puis à 0, il a fallu créer une variable qui effectue une sorte de "décompte" à chaque fois que la voiture est replacée et qui défini à chaque fois la position de la voiture, ça peut te paraitre pas très clair, c´est pas très très propre mais ça marche, merci pour ta fonction au fait ! :)

TNToon
TNToon
Niveau 9
04 décembre 2006 à 20:36:40

Juste une question sur UpdateEvents(), est-ce que le fait que key soit un tableau chars est important ? Est-ce que son nombre de cases, 400, est choisi au hasard ?

Fvirtman
Fvirtman
Niveau 10
06 décembre 2006 à 10:39:34

le 400 est arbitraire. Mais pas completement :

ouvre le fichier SDL_keysym.h
Ce fichier contient le code de toutes les touches.
Dans mon implémentation de SDL, la derniere touche définie est :

SDLK_UNDO = 322,

donc il en faut au moins 322. (meme si cette touche est une touche pour Atari).
J´ai arrondi a 400 pour prévoir large si SDL est modifié.

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