Pomoc s OpenGL – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pomoc s OpenGL – C / C++ – Fórum – Programujte.comPomoc s OpenGL – C / C++ – Fórum – Programujte.com

 

gaben0
Stálý člen
12. 11. 2009   #1
-
0
-

Snažím sa spraviť veľmi jednoduchú hru v OpenGL, niečo podobné ako bola hra CERVII. Zatiaľ som spravil kód, podľa ktorého by sa had mal predlžovať (had sa v tejto hre nehýbe, iba rastie požadovaným smerom). No akosi mi to nefunguje. Poradí mi niekto?



#include <stdio.h>
#include <GL/glut.h>

GLint x = 100, y = 100;
GLint smer; //R = 1, L = 2, U = 3, D = 4

//---------------------------------------------------------------------
// Nastavenie súradnicového systému
//---------------------------------------------------------------------
void onResize(int w, int h) // W a H reprezentujú novú veľkosť okna
{
glViewport(0, 0, w, h); // Viditeľná oblasť nastavená cez celé okno
glMatrixMode(GL_PROJECTION); // Začiatok modifikácie projekčnej matice
glLoadIdentity(); // Vymazanie projekčnej matice
glOrtho(0, w, 0, h, -1, 1); // Mapovanie abstraktných súradníc do súradníc okna
}

//--------------------------------------------------------------------
// Táto funkcia podľa stlačených kláves vykresľuje hada
//--------------------------------------------------------------------
void Hra()
{
int x = 50; y = 50; // Začiatočné body ;;;;NESKOR RAND()

switch(smer)
{
case 1:
x++; break;
case 2:
x--; break;
case 3:
y++; break;
case 4:
y--; break;
}
}

void VykresliHada()
{
glColor3f(0.0, 0.0, 1.0);
glEnable(GL_POINT_SMOOTH);
glPointSize(5.0);
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
}

//---------------------------------------------------------------------
// Táto funkcia je volaná pri každom prekreslení okna
//---------------------------------------------------------------------
void onDisplay(void)
{
glClearColor(0.0, 0.0, 0.0, 1.0); // Nastavenie mazacej farby na čiernu
glClear(GL_COLOR_BUFFER_BIT); // Vymazanie bitových rovín farebného bufferu
VykresliHada(); // Volanie funkcie, ktorá vykreslí hada
glFlush(); // Vykreslenie zmien
}

//---------------------------------------------------------------------
// Táto funkcia určuje smer hada podľa stlačených klávesov
//---------------------------------------------------------------------

void Smer(int key, int x, int y){
switch(key){
case GLUT_KEY_RIGHT:
smer = 1;
break;
case GLUT_KEY_LEFT:
smer = 2;
break;
case GLUT_KEY_UP:
smer = 3;
break;
case GLUT_KEY_DOWN:
smer = 4;
break;
}
}



//---------------------------------------------------------------------
// Funkcia volaná pri stlačení klávesy
//---------------------------------------------------------------------
void onKeyboard(unsigned char key, int x, int y)
{
if (key == 27)
exit(0);
}

//---------------------------------------------------------------------
// Hlavná funkcia konzolovej aplikácie
//---------------------------------------------------------------------
int main(int argc, char **argv)
{
glutInit(&argc, argv); // Inicializovanie knižnice GLUT
glutCreateWindow("CERVIK v0.1"); // Vytvorenie okna
glutReshapeWindow(1024, 768); // Nastavenie veľkosti okna
glutPositionWindow(100, 100); // Nastavenie pozície ľavého horného rohu okna
glutSpecialFunc(Smer);
glutReshapeFunc(onResize); // Registrácia funkcie volanej pri zmene veľkosti okna
glutDisplayFunc(onDisplay); // Registrácia funkcie volanej pri prekreslení okna
glutKeyboardFunc(onKeyboard); // Registrácia funkcie volanej pri stlačení klávesy

Hra();

glutMainLoop(); // Nekonečný cyklus, kde sa volajú zaregistrované funkcie
return 0;
}

Nahlásit jako SPAM
IP: 85.248.1.–
C, C++
liborb
~ Redaktor
+18
Guru
18. 11. 2009   #2
-
0
-

Problém bude asi v tom, že funkce Hra je volána pouze jednou, a to před vstupem do GLUT smyčky. Takže se ti nemůže had pohybovat. A druhá věc je, že v té funkci Hra chceš měnit pozice x a y, ale stejně sis nadefinoval i lokální proměnné, takže vždy změníš jenom jejich hodnotu.

Nahlásit jako SPAM
IP: 85.207.166.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 45 hostů

Podobná vlákna

C++, OpenGL, SDL /// C++, OpenGL — založil Kolemjdouci

OpenGL? — založil Lordest

OpenGL 1.4 — založil koudis;

C++ opengl — založil opengl

OpenGL — založil Wizard

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý