Aaa ok merci...
Jverrais plus tard alors ![]()
Et bonne nuit à tous ( enfin ceux qui restent)
++
![]()
j´ai un probleme avec un programme:
j´ai une fonction qui teste si une touche est appuyée.
la voici:
void UpdateCommandes()
{
SDL_Event event; / * Evenements de l´application */
/* Gestions des messages Systeme */
while ( SDL_PollEvent(&) ) {
switch ( event.type) {
case SDL_KEYDOWN:
switch( event.key.keysym.sym )
{
case SDLK_ESCAPE:
done = 1;
break;
case SDLK_SPACE:
IsSpace = 1;
break;
case SDLK_LEFT:
IsLeft = 1;
break;
case SDLK_RIGHT:
IsRight = 1;
break;
case SDLK_DOWN:
IsDown = 1;
break;
case SDLK_UP:
IsUp = 1;
break;
default:
break;
}
break;
case SDL_KEYUP:
switch( event.key.keysym.sym )
{
case SDLK_SPACE:
IsSpace = 0;
break;
case SDLK_LEFT:
IsLeft = 0;
break;
case SDLK_RIGHT:
IsRight = 0;
break;
case SDLK_DOWN:
IsDown = 0;
break;
case SDLK_UP:
IsUp = 0;
break;
default:
break;
}
break;
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
}
======================
le probleme c´est que ca ne detecte qu´un appui
et moi je voudrais que ca renvoi " vrai" meme quand on garde appuyée une touche.
comment faire???
Personne ne sais pk sa fait cette erreur ? ?
Merci JeanYvesYves ^^
Maintenant, en y repensant j´aimerais bien connaître la différence entre
static const int CONSTANTE = 20
et
const int CONSTANTE = 20
c´est le static qui me turlupine.
Et puis allez hop, j´en rajoute un pendant mon élan
je sais pas trop non plus c´est quoi la particularité de cette constante.
cobradu94 : je pense que tu doit utiliser SDL_GetKeyState, mais j´en suis pas sur car je ne l´ai jamais utiliser comme fonction. regarde dans la doc comment on s´en sers.
koyo : static sers normallement a dire au compilo que la variable est staic ! c´est a dire qu´elle ne sera pas réinitialisé entre les différend appel de la foction ou elle se trouve.
pour une variable const ça ne change donc rien.
par contre, static veut aussi dire que la variable a une porté qui ne dépasse pas le fichier où elel est déclaré.
elle ne pourra pas donc être utilisé dans un autre fichier avec le mots clef extern si tu connait.
pour ça, ça change qqch, mais bon, c´est pas très important.
ce que vaut réellement constante_h dépend du compilo je crois, mais disont pour simplifier, que l´on peut admettre que dans une expression comme ça constante_h vaut true, ou plus précisemment, elle a la valeur initialiser,
et donc dans un #ifdef constante_h, ça marchera ( if defined)
mais t´as question était un peu vague
Tu t´y connais dnob. C´est vrai que ma question est vague ; ceci dit, l´esprit l´est également.
Nan tu reponds pas a ma question, la quesion jl´ai poser a la page 152, jla repose :
Pourquoi mon programme ne compile pas, il me fait une seul erreur et il nya pas de ligne, l´erreur est
C:\Dev-Cpp\projet\projet pong avec son2\projet pong avec son\projet pong avec son\Makefile.win [Build Error] [dev.exe] Error 1
J´ai essayer de debugger mais il me dise que le programme doit etre compiler d´abord, et quand je compile il me dise l´erreur, je sais pas comment faire, je suis bloquer parceque je sais pas ou se trouve l´erreur, si vous savez merci.
guyver2 : plus haut c´est à ta question que je répondais et non pas à celle de cobradu94 ( désolé)
pour cobradu94, tu devrait soit mettre ton code source, soit créer un nouveau projet et y remettre ton code, car j´ai l´impression que ça pourrait venir du makefile, même si j´ai jamais vu ça, peut-être que ya eue un bug avec dev C++
salut, si j´ai bien compris typedef permet de créer des nouveaux types,c´est à dire il permet de garder des donné en memoir quand ont les appels c´est bien ca ?
_-hebuskiller-_
Si la soulution c´est sa je n´avait pas vu que ton image se déplacait à 30 pixels
donc tu remplace:
dstblue.x = tuxX - 1;
dstblue.y = tuxY - 1;
par:
dstblue.x = tuxX - 30;
dstblue.y = tuxY - 30;
et ça
dstblue.w = image->w + 1;
dstblue.h = image->h + 1;
par:
dstblue.w = image->w + 60;
dstblue.h = image->h + 60;
--------------------------------------------------
p.s:Euhh.. Non c´etait pas moi qui avait dit:"C´est quoi le c++?"
Rikkuman4 > oui pour typedef.
inconnu[pure] >
pourquoi modifies tu les champs w et h de ton rectangle( il est vrai que j´ai pas tout suivi)
dans un blit, tu as 2 rectangles :
source : les 4 données x,y,w,h sont utiles
destination : uniquement x et y sont utiles ici ![]()
JeanYvesYves
Enfaites le but est de créer un rectangle bleuqui efaces les trace du tux donc comme il se déplace à une vitesse de 30pixel il faut déssiner un rectangle qui le dépace de 30 pixel à gauche, à droite , en bas et en haut.
Bon voila mon problème de SDL à cette fonction il y a un problème:
void GamePaint()
{
int s=0;
for(s=0;s<10;s++)
{
Skull[i]->Draw(surface);
}
FlipScreen(surface);//Et plus particliarement a cette ligne
i++;
if(i==10)i=0;
}
alors voici le code de la fonction FlipScreen:
void FlipScreen(SDL_Surface *screen)
{
SDL_Flip(screen);
}
Dans mon fichier srderr il m´ecrit:"Fatal signal: Segmentation Fault ( SDL Parachute Deployed)
"
Pendant le programme il charge l´image puis il quitte a la fonction FlipScreen.
Merci d´avance pour la réponse
--------------------------------------------------
--------------------------------------------------
JYY : j´aurais besoin d´aide
si j´ai bien compris tes fonctions Map et Pixel , tu recuperes en fait la couleur Bleu du pixel , et si c bleu tu dessines un mur . ..
mais , je ne comprends pas pourquoi a la fin de Pixel() , tu " return P[val] ( avec val = 2 ) "
?
puisqu´apres tu ne te sers pas de P . .. ?
mais de pix . ..
Bon , en fait tout ca , c´est pas très clair , mais je crois que ca qui m´arrangerait , c´est de savoir précisément ce que fait cette ligne de code :
SDL_GetRGBA(pix,level->format,&[0],&[1],&[2],&
[3]);
Qu´est ce qu´elle renvoit ? parceque , ensuite tu testes juste if ( pix == 0 ) ,
et pix , tu l´as ici :
pix=((Uint32*)(level->pixels))[b*(level->pitch/lev
el->format->BytesPerPixel)+a];
alors j´aurais voulu savoir ce que faisait aussi cette ligne la . ..
merci
bon, alors, en relisant le code, je corrige un truc que je t´avais dit hier :
a savoir que ça réagissait sur le noir et le non noir : en fait ça réagit en effet que sur le bleu, je t´explique pourquoi :
la couleur d´un pixel est composé de 4 octets :
1 octet pour le rouge
1 octet pour le vert
1 octet pour le bleu
1 octet pour le canal alpha(oublie le celui la)
dans l´ordre, si tu prends juste les initiales, on est en mode RVBA. Et le Uint32 pix qui est dans la fonction Pixel récupere donc tout le pixel, donc le RVBA.
je cree ensuite un tableau P[0], P[1], P[2], P[3].
la fonction :
SDL_GetRGBA(pix,level->format,&[0],&[1],&[2],&
[3]);
décomposé le pixel, et remplit P[0], P[1], P[2], P[3].
a la sortie : tu as :
P[0] -> composante ROUGE de entre 0 et 255
P[1] -> composante VERTE de entre 0 et 255
P[2] -> composante BLEUE de entre 0 et 255
P[3] -> composante ALPHA de entre 0 et 255
et on retourne P[val].
Comme tu vois, j´appelle la fonction pixel avec l´indice 2, c´est a dire que je demande, pour le pixel a,b, sa composante BLEUE...
Apres, tu peux tres bien appeler la fonction avec le vert, le rouge, bref !
Et ce que je fais donc, j´appelle la fonction en demandant la composante bleue, ça me renvoie un nombre entre 0 ( pas de bleu du tout) et 255 ( maximum de bleu)
et je regarde s´il est égal à 0 ou non, c´est a dire que si y´a un petit peu de bleu, je mets la brique 1, dans tous les autres cas, je mets la brique 0.
Et dans ces cas la, tu peux remarquer que, comme mon if ne réagit que la dessus, si tu mets un pixel violet ( qui contient du rouge et du bleu) il le verra de la meme façon qu´un pixel bleu.
Mais évidemment, tu peux changer le if, et faire ce que tu veux ![]()
inconnu[pure] >
pour ton soucis, surement que " screen" n´est pas initialisé correctement : un segment fault, c´est quand tu essaies d´accéder a une zone mémoire qui n´est pas réservée au programme.
vérifie que screen soit correctement alloué.
OOOh merci ![]()
je vais modifier ta fonction , parceque , pour une carte , il me faudra plus de couleurs . .. d´ailleurs , paint est bien faiblard avec ces couleurs . .. vais prendre pixia je crois
Bon , allez , ce soir , j´ai ma premiere map ![]()
pas de soucis ![]()
Apres, tu peux tester le pixel que tu veux :
si par exemple tu veux tester le violet :
tu dis :
if ( P[0]==255 && P[1]==0 && P[2]==255)
par contre, si tu n´utilises pas paint, prend bien un logiciel qui te permette de voir la valeur RVB de tes pixels, car si tu procedes avec de tels if, un violet u chouia différent, que tu ne verras pas a l´oeil nu ( par exemple 254,0,255) ne sera pas vu comme le meme, et donc tu ne passeras pas dans le if ( logique)
donc soit exact sur le code RVB de tes pixels ![]()