pense que ca peut etre utilise dans des expressions un peu plus compliquees..
deja, si on fait un bete :
toto a;
a = a++;
ou encore :
toto a, b;
a = b + b++;
( bon, c´est idiot de faire ca, en terme de logique, maid c´est faisable et legitime, et le resultat doit etre correct)
etc. bref, et des qu´on mixe un peu avec d´autres termes, ca devient vite le bord...
de plus, si tu surcharges un operateur post ou pre, il est relativement mal aise de savoir si son antagoniste fait la meme chose ou pas.
donc, si on s´en tient a des cas simples, ca se vaut theoriquement. Mais comme il est legitime de faire des choses plus tordues avec, le compilo doit faire que ca marche quand meme. ( si je retrouve la page adequate des specs d´ICC, il y est specifie quelles expressions pre/post sont optimisees et comment ; c´est loin d´etre trivial)
pour mon niveau j´ai fait ça : http://img297.echo.cx/img297/2136/getsystemmetrics8fs.png
après tu dis ce que tu veux . ..
après pour le _ j´essaye . ..
yes!!! ça marche
^^
merci beaucoup ! ^^
Ouais, je veux bien plus d´info
( More Effective C++ tu dis ? )
parceque c´est relativement étonnant.
Encore un truc : cette ligne :
while(SDL_PollEvent(&)) // aquisition d´evenement
J´ai pas bien compris à quoi ça servait d´acquérir des évenement...
Et dans le void waitkey(), pourquoi ça ne marche pas quand on l´enlève ? ( J´enlève aussi le " waitkey()" du main, of course
)
Acquerir un evenement ça sert a quoi ?
Quand dans ton programme quelqu´un utilise la souris, ou le clavier, c´est un evenement, pour que le programme prenne en compte les messages de ces evenements, l´API prévoit une partie qui permet d´intercepter les messages, soit du materiel, soit du logiciel ( les evenements/messages peuvent aussi etre des messages du systeme)
enfin je connais pas SDL mais bon..
En fait, faut bien comrpendre le truc :
Imagine une file d´attente au cinéma. Chaque personne qui attend est un évenement.
Quand tu appuies sur une touche, ça genere un evenement ( donc ça ajoute un bonhomme dans la file, ce bonhomme est la pour dire " on a appuyé sur K")
quand tu relaches une touche, pareil, un bonhomme se rajoute.
Donc SDL controle une file d´attente d´evenements, tout seul. Jusque la ça va ?
SDL_PollEvent sert a dire " Suivant ! !"
Il prend donc le prochain mec de la file d´attente, et copie ce qu´il doit dire dans event.
SDL_PollEvent te renvoie VRAI si il y avait encore quelqu´un dans la file, et FAUX s´il n´y a plus personne.
Le while autour veut donc dire :
" Tant qu´il y a du monde dans la file d´attente, recupere la prochaine personne, met ce qu´elle a à dire dans " event", et fait ce qu´il y a dans le while"
Et, une fois dans le while, on analyse ce que l´evenement avait a dire...
hep ! qui peux m´aider ?
les WORD et DWORD j´arrive bien à les convertir mais pour les VOID ( LPVOID plus precisement) je trouve pas le truc . .. j´ai du mal avec les formats les types etc...
pendant ce temps je cherche . ..
et si tu fais :
DWORD v;
WORD w = ( DWORD)v;
ça marche pas ?
une variable void, ca n´exiset pas.
Une variable LPVOID, ce n´est pas vraiment un pointeur sur un void, c´est plus un pointeur vers un truc qu´on ne sait pas ce que c´est. C´est don difficile a afficher ( puisqu´on ne sait pas ce que c´est)
en outre, tu peux toujours affiher sa valeur ( l´adresse vers laquelle il pointe) en faisant un typecast
J´ai maintenant essayé de modifier le premier tuto SDL de JYY ( toujours le même) :
void waitkey() // attend qu´on appuie sur RETURN
{
while(1) // boucle
{
while(SDL_PollEvent(&)) // aquisition d´evenement
{
if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ?
{
if ( event.key.keysym.sym == SDLK_SPACE) return; / / c´est " RETURN" ?
}
}
}
}
void droite() // attend qu´on appuie sur RETURN
{
while(1) // boucle
{
while(SDL_PollEvent(&)) // aquisition d´evenement
{
if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ?
{
if ( event.key.keysym.sym == SDLK_RIGHT) / / c´est " RETURN" ?
{
rect1.x = 50;
return;
}
}
}
}
}
void gauche() // attend qu´on appuie sur RETURN
{
while(1) // boucle
{
while(SDL_PollEvent(&)) // aquisition d´evenement
{
if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ?
{
if ( event.key.keysym.sym == SDLK_LEFT) / / c´est " RETURN" ?
{
rect1.x = -50;
return;
}
}
}
}
}
int main(int argc , char **argv)
{
SDL_Rect rect1; // structure rectangle
prepare_SDL(); // initialise ( plus haut)
firstscreen = SDL_LoadBMP("image.bmp"); // charge l´image
/ / on dessine
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024; // défini le rectangle
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1); /
/ colle l´image sur l´écran, NULL car on affiche TOUTE l´image
SDL_Flip(screen); // affiche la prochaine frame
droite();
gauche();
waitkey(); // attends qu´on appuie sur Return ( plus haut)
SDL_ShowCursor(1); // reactive la souris
SDL_Quit(); // quitte SDL
return 0; // quitte le programme
}
Et ça bloque sur la ligne " rect1.x = 50". Pourquoi ?
J´ai oublié de dire que mon programme était sensé décaler l´image " image.bmp" de 50 px vers la droite quand on appuyait sur la touche droite et de 50 px vers la gauche quand on appuyait sur la touche gauche.
Essaye de remplacer rect1.x = 50 par rect1.x += 50
Jte garantie rien
Non, désolé, ça a pas marché
rect1 est déclaré dans le main, et non dans ta fonction gauche() ou droite()
si tu veux faire le porc, mais le " SDL_Rect rect1" est variable globale ( juste en dessous des include) et eneleve le du main.
Cependant, tu vas etre déçu :
ton programme va attendre que tu appuies sur gauche, puis il va attendre que tu appuies sur droite.
et ensuite, jamais tu ne reblittes ta surface.
tu fais droite()
puis ensuite gauche()
entre les deux, tu ne demandes pas de réafficher ![]()
En gros faut faire une boucle ![]()
Entre les lignes " rect1.h = 768" et
"SDL_BlitSurface(firstscreen,NULL,screen,&1);
// colle l´image sur l´écran, NULL car on affiche TOUTE l´image", j´ai ajouté :
while ( 1)
{
gauche();
SDL_BlitSurface(firstscreen,NULL,screen,&1); /
/ colle l´image sur l´écran, NULL car on affiche TOUTE l´image
}
while ( 1)
{
droite();
SDL_BlitSurface(firstscreen,NULL,screen,&1);
}
et ça bloque toujours sur la même ligne ![]()
moi j´ai un probleme c´est que:
using namespace std;
int main()
{
int age;
cout < < " votre age ? " < < endl;
cin > > age;
cout < < " vous avez " < < age < < " ans" < < endl;
system("PAUSE");
return 0;
}
/ * COMMENTAIRES
int age;
je viens de mettre sa puis j´ai compiler et executer mais sa me met du genre oubli de compilation alors que je viens juste de le faire
bastgame: pas compris, soit plus explicite donne un message exacte.
JYY: j´adore comment tu fais tes reponses, tu ne donne pas vraiment la solution mais tu loaclise le problemE.
J´aime bien c´est tres didactique! ![]()
En faite j´ai marqué le code C++ puis ensuite je compile et execute mais sa ne marche
ps:j´utilise DEV C++