-Ivan-
09-02-2005, 17:24
Allora questo è il codice che mi da problema:
int main(int argc, char *argv[])
{
void carica_oggetti();
void gestione_eventi();
carica_engine(risoluzione_x, risoluzione_y, bit_colori, modalita);
carica_oggetti();
//loop principale
while (GetAsyncKeyState(VK_ESCAPE)==0){
fps=calcola_fps();
pulisci_schermo();
gestione_eventi();
metti_su_schermo();
}
chiudi_engine();
return 0;
}
/*--------------------------------FUNZIONI------------------------------------*/
////////////////////////////////////////////////////////////////////////////////
/////////////////////*GESTIONE EVENTI*/////////////////////////////////
//loop principale
void gestione_eventi(){
disegna(sfondo, 0, 0);
disegna(scacchiera, 100, 100);
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
disegna(pc, coord_xp, coord_yp, 40, 40, 0, 0);
scegli_mossa();
//il problema fondamentalmente è qui
imput_tastiera();
}
///////////////////////////////*IMPUTTASTIERA*///////////////////////////////////
void imput_tastiera ( )
{
if(mossa==1)
{
//PULSANTI GIOCATORE
if (GetAsyncKeyState(VK_UP))
{
if(Ncasella>10){Ncasella=Ncasella-10;}
scelta_casella();
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
}
if (GetAsyncKeyState(VK_DOWN))
{
if(Ncasella<91){Ncasella=Ncasella+10;}
scelta_casella();
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
}
if (GetAsyncKeyState(VK_LEFT))
{
if(Ncasella>1){Ncasella=Ncasella-1;}
scelta_casella();
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
}
if (GetAsyncKeyState(VK_RIGHT))
{
if(Ncasella<99){Ncasella=Ncasella+1;}
scelta_casella();
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
}
}
}
Ho omesso molte cose perchè non utili per capire il problema, cmq nel codice non ci sono errori tutto funziona se faccio partire.
Il problema è: questo codice mi fa muovere un quadrato che rappresenta il giocatore 1 su una scacchiera, quando parte il programma io il giocatore lo muovo ma il movimento è continuo, cioè io devo fare in modo che premendo a destra (ad es.) il quadrato si muova a destra di una casella anche se tengo premuto, mentre per come è impostato ora si muove a destra fino all'ultima cassella a destra della scacchiera.
La cosa è problematica perchè tutto è dentro un ciclo while e non posso fare una cosa del tipo creare una variabile che è impostata a 0 e dopo che mi ha chiamato la funzione imput tastiera(che viene eseguita solo se quella variabile è a 0) si mette a 1 e la volta successiva che devo muovermi la reimposto a 0.
Non so quanto possiate aver capito di quello che ho detto ma sono un attimo fuso, se necessita posso postare l'intero codice.
int main(int argc, char *argv[])
{
void carica_oggetti();
void gestione_eventi();
carica_engine(risoluzione_x, risoluzione_y, bit_colori, modalita);
carica_oggetti();
//loop principale
while (GetAsyncKeyState(VK_ESCAPE)==0){
fps=calcola_fps();
pulisci_schermo();
gestione_eventi();
metti_su_schermo();
}
chiudi_engine();
return 0;
}
/*--------------------------------FUNZIONI------------------------------------*/
////////////////////////////////////////////////////////////////////////////////
/////////////////////*GESTIONE EVENTI*/////////////////////////////////
//loop principale
void gestione_eventi(){
disegna(sfondo, 0, 0);
disegna(scacchiera, 100, 100);
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
disegna(pc, coord_xp, coord_yp, 40, 40, 0, 0);
scegli_mossa();
//il problema fondamentalmente è qui
imput_tastiera();
}
///////////////////////////////*IMPUTTASTIERA*///////////////////////////////////
void imput_tastiera ( )
{
if(mossa==1)
{
//PULSANTI GIOCATORE
if (GetAsyncKeyState(VK_UP))
{
if(Ncasella>10){Ncasella=Ncasella-10;}
scelta_casella();
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
}
if (GetAsyncKeyState(VK_DOWN))
{
if(Ncasella<91){Ncasella=Ncasella+10;}
scelta_casella();
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
}
if (GetAsyncKeyState(VK_LEFT))
{
if(Ncasella>1){Ncasella=Ncasella-1;}
scelta_casella();
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
}
if (GetAsyncKeyState(VK_RIGHT))
{
if(Ncasella<99){Ncasella=Ncasella+1;}
scelta_casella();
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
}
}
}
Ho omesso molte cose perchè non utili per capire il problema, cmq nel codice non ci sono errori tutto funziona se faccio partire.
Il problema è: questo codice mi fa muovere un quadrato che rappresenta il giocatore 1 su una scacchiera, quando parte il programma io il giocatore lo muovo ma il movimento è continuo, cioè io devo fare in modo che premendo a destra (ad es.) il quadrato si muova a destra di una casella anche se tengo premuto, mentre per come è impostato ora si muove a destra fino all'ultima cassella a destra della scacchiera.
La cosa è problematica perchè tutto è dentro un ciclo while e non posso fare una cosa del tipo creare una variabile che è impostata a 0 e dopo che mi ha chiamato la funzione imput tastiera(che viene eseguita solo se quella variabile è a 0) si mette a 1 e la volta successiva che devo muovermi la reimposto a 0.
Non so quanto possiate aver capito di quello che ho detto ma sono un attimo fuso, se necessita posso postare l'intero codice.