Forum » Programiranje » [C++] OpenGL
[C++] OpenGL
matej94 ::
Pozdravljeni, sem nov na forumu, upam da sem zadel temo.
Opazil sem da pomagate tudi pri reševanju problemov. Delam igrico za sprostitev rad bi da bi vsebovala meni. Menija pa žal ne znam narediti :( Prosil bi če kdo mi namigne kako se ga lotiti, da kak predlog. Karkoli samo da bo v pomoč
V naprej se zahvaljujem.
lp
Koscak
Opazil sem da pomagate tudi pri reševanju problemov. Delam igrico za sprostitev rad bi da bi vsebovala meni. Menija pa žal ne znam narediti :( Prosil bi če kdo mi namigne kako se ga lotiti, da kak predlog. Karkoli samo da bo v pomoč
V naprej se zahvaljujem.
lp
Koscak
- spremenil: Mavrik ()
matej94 ::
Dobro pa pustimo meni, do sedaj sem delal z knjižnico glut od opengl, sedaj imam problem, hočem vstavit sliko oz. teksturo pa jo glut ne podpira kaj naj naredim. Če želim z open Gl moram spremenit vseh 800 vrstic kode, ma kdo kako boljšo idejo.
matej94 ::
Samo opengl je pa zelo težek, ali morma sedaj od začetka, kako svetuješ da to popravim, ali obstaja kak drug način
Zgodovina sprememb…
- spremenilo: matej94 ()
matej94 ::
Naredil sem igro (ladje in sovražne ladje ladje) med seboj se streljajo vendar ko sem dodal več ladij je prišlo da lahkih problemov.
Za vsi metki in vse sovražne ladje so zapisane v vektorjih, problem nastane ker program ne prepozna z katero ladjo bi mogel streljat in kateri ladji odstranjevat življenje.(ugotovi da je ladja dovolj blizu vendar ne katera)
Vsa koda kjer ima kaj veze z tem 5timi ladjami
Opisal sem problem in da ne bo težav sem opisal kaj se v vsakem delu kode naredi sem napisal zgoraj, prosil bi če kdo ki zna vzame nekaj minut in pomaga. Neskončno bom vam hvaležen. Problem se zdi obširen vendar verjamem da ni najlepša hvala ;)
Sovrazna ladja class glej konstruktor:
Metki(glej življenje)
(glej streljanje !!!!! )
Update in display
main-ustvarjanje metkov
Že vnaprej se zahvaljujem za vsakršno pomoč.
Za vsi metki in vse sovražne ladje so zapisane v vektorjih, problem nastane ker program ne prepozna z katero ladjo bi mogel streljat in kateri ladji odstranjevat življenje.(ugotovi da je ladja dovolj blizu vendar ne katera)
Vsa koda kjer ima kaj veze z tem 5timi ladjami
Opisal sem problem in da ne bo težav sem opisal kaj se v vsakem delu kode naredi sem napisal zgoraj, prosil bi če kdo ki zna vzame nekaj minut in pomaga. Neskončno bom vam hvaležen. Problem se zdi obširen vendar verjamem da ni najlepša hvala ;)
Sovrazna ladja class glej konstruktor:
class sovrazna_ladja {public: double metekx, meteky , ladr, metekr; float ladx, lady; int k,zdravjenasp; int direction; //konstruktor za sovrazno ladjo sovrazna_ladja() { metekr=0.07; ladr = 0.07; float x = rand()%(10); ladx=x/10; cout<<" ladx "<<ladx<<" "; float y = rand()%(10); lady = y/10; cout<<" lady "<<ladx<<" "; k=0; direction = 0; zdravjenasp=100; } ~sovrazna_ladja(); void move() { lady+=0.0025; if(lady>1) ladx-=0.01; if (ladx > (1.0) || ladx < (-1.0 - ladr)) ladx = -ladx; if (lady > (1.0 + ladr) || lady < (-1.0 - ladr)) lady = -lady; } void draw() { glBegin(GL_POLYGON); glColor3d(0.5, 0.5, 0.5); glVertex2f(sin((0 + direction)*PI/180)*ladr+ladx, cos((0 + direction)*PI/180)*ladr+lady); glVertex2f(sin((140 + direction)*PI/180)*ladr+ladx, cos((140 + direction)*PI/180)*ladr+lady); glVertex2f(sin((180 + direction)*PI/180)*ladr/4+ladx, cos((180 + direction)*PI/180)*ladr/4+lady); glVertex2f(sin((220 + direction)*PI/180)*ladr+ladx, cos((220 + direction)*PI/180)*ladr+lady); glEnd(); } }; vector<sovrazna_ladja*> listasovraznih_ladij;
Metki(glej življenje)
class metki{ public: double x, y, r; int smer,strel; int i; int readytoclear; // int direction; metki() { r = 0.02; x = ship->x; y = ship->y; strel = 1;// <-------- nastavi vrednost na 0 (metek ne leti) smer=ship->direction; readytoclear = 0; i=0; } ~metki(); void move() { /* x=ship->x; y=ship->y; smer=ship->direction;*/ if(strel == 1) { i++; // cout<<" "<<i; cout<<"pozozozozozoz"<<smer<<"ffsggetger"; //stik metek ladja for (int j=0; j<listasovraznih_ladij.size(); j++) { double dx = listasovraznih_ladij.at(j)->ladx - x; double dy = listasovraznih_ladij.at(j)->lady - y; double ar = listasovraznih_ladij.at(j)->ladr + r; if(dx*dx + dy*dy < ar*ar) { readytoclear = 1; strel = 0; i=0; listasovraznih_ladij.at(j)->zdravjenasp=listasovraznih_ladij.at(j)->zdravjenasp-10; if(listasovraznih_ladij.at(j)->zdravjenasp==0) {cout<<" "<<"hastala vistalas"<<" "; // listasovraznih_ladij.erase( listasovraznih_ladij.begin() + j); cout<<"življenja je še"<<listasovraznih_ladij.at(j)->zdravjenasp<<"alala"; } } if(i>150) { readytoclear = 1; strel=0; i=0; } } } } void draw() { glBegin(GL_POLYGON); glColor3d(0, 0.5, 0.5); glVertex2f(sin((0 + smer)*PI/180)*r+x, cos((0 + smer)*PI/180)*r+y); glVertex2f(sin((140 + smer)*PI/180)*r+x, cos((140 + smer)*PI/180)*r+y); glVertex2f(sin((180 + smer)*PI/180)*r/4+x, cos((180 + smer)*PI/180)*r/4+y); glVertex2f(sin((220 + smer)*PI/180)*r+x, cos((220 + smer)*PI/180)*r+y); glEnd(); glBindTexture(GL_TEXTURE_2D,5); } }; vector<metki*> listaMetkov; // s tem ustvarimo vektor metkov
(glej streljanje !!!!! )
class naspmetki{ public: double x, y, r; int smer,strel; int i; int readytoclear; // int direction; naspmetki() { r = 0.02; for (int j=0; j<listasovraznih_ladij.size(); j++) { x = listasovraznih_ladij.at(j)->ladx; y = listasovraznih_ladij.at(j)->lady; } strel = 1;// <-------- nastavi vrednost na 0 (metek ne leti) readytoclear = 0; i=0; } ~naspmetki(); void move() { /* x=ship->x; y=ship->y; smer=ship->direction;*/ if(strel == 1) { i++; // cout<<" "<<i; x-= 0.01; double dx = ship->x - x; double dy = ship->y- y; double ar =ship->r + r; if(dx*dx + dy*dy < ar*ar) { readytoclear = 1; strel = 0; i=0; ship->zdravje=ship->zdravje-10; if(ship->zdravje==0) {cout<<" "<<"hastala vistalas ubila si mojo ladjo prasica"<<" "; // exit(1); } } if(i>150) { readytoclear = 1; strel=0; i=0; } } } void draw() { glBegin(GL_POLYGON); glColor3d(0, 0.5, 0); glVertex2f(sin((0 + smer)*PI/180)*r+x, cos((0 + smer)*PI/180)*r+y); glVertex2f(sin((140 + smer)*PI/180)*r+x, cos((140 + smer)*PI/180)*r+y); glVertex2f(sin((180 + smer)*PI/180)*r/4+x, cos((180 + smer)*PI/180)*r/4+y); glVertex2f(sin((220 + smer)*PI/180)*r+x, cos((220 + smer)*PI/180)*r+y); glEnd(); glBindTexture(GL_TEXTURE_2D,5); } }; vector<naspmetki*> listanaspMetkov; // s tem ustvarimo vektor nasprotnih metkov
Update in display
static void Update(int value) { pritisni(); glutPostRedisplay(); ship->move(); for (int i=0; i<listasovraznih_ladij.size(); i++) listasovraznih_ladij.at(i)->move(); //dodajanje mojih metkov v vektor for( int i=0; i<listaMetkov.size(); i++ ) { // preverjanje if( !listaMetkov.at(i)->readytoclear ) listaMetkov.at( i )->move(); else listaMetkov.erase( listaMetkov.begin() + i); } //dodajanje nasprotnih metkov v vektor for( int j=0; j<listanaspMetkov.size(); j++ ) { if( !listanaspMetkov.at(j)->readytoclear ) listanaspMetkov.at( j )->move(); else listanaspMetkov.erase( listanaspMetkov.begin() + j); } //preverjanje streljanje if( lahkoStreljas == false ) { tmrStrel++; if( tmrStrel == 15 ) { tmrStrel=0; lahkoStreljas = true; } } // for (int i=0; i<listasovraznih_ladij.size(); i++) { double dx = ship->x -listasovraznih_ladij[i]-> ladx; double dy = ship->y -listasovraznih_ladij[i]-> lady; dx=sqrt(dx*dx); dy=sqrt(dy*dy); if(dx<(1.0)&&dy<(0.2)) { if ( lahkoStreljasnasp == true ) { listanaspMetkov.push_back(new naspmetki()); lahkoStreljasnasp = false; //<------------------------ cout<<"Metek ustvarjen"; cout<<listaMetkov.size(); } } } if( lahkoStreljasnasp == false ) { tmrStrelnasp++; if( tmrStrelnasp == 15 ) { tmrStrelnasp=0; lahkoStreljasnasp = true; } } collision(); glutTimerFunc(1000/FPS, Update, 1); }
main-ustvarjanje metkov
int main(int argc, char** argv) // <---------------------------------------MAIN { for( int i=0; i<256; i++) { tip[i] = false; } srand((unsigned)time(0)); for (int j=0; j<ST_NASPROTNIH_LADIJ; j++) { listasovraznih_ladij.push_back(new sovrazna_ladja()); cout<<" ladja ustvarjena "; } ship = new Ship(); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowPosition(10, 10); glutInitWindowSize(512, 512); glutCreateWindow("Krneki"); glutKeyboardFunc(tipkovnica); glutKeyboardUpFunc(tipkovnica2); glutDisplayFunc(display); glutTimerFunc(1000/FPS, Update, 1); // <-------- glutMainLoop(); return 1; // system("pouse"); }
Že vnaprej se zahvaljujem za vsakršno pomoč.
matej94 ::
Po prespani noči in spočitem dnevu kot za hip našel napako.
Pri odstranjevanju ladij iz vektorja, ko je življenje 0 mi pa naredi napako:
Če je ladja sama x in y kordinata ok če pa so 3 takole skupaj kot doli mi pa program zajamra :(
Takole zgleda odštevanje
Pri odstranjevanju ladij iz vektorja, ko je življenje 0 mi pa naredi napako:
Če je ladja sama x in y kordinata ok če pa so 3 takole skupaj kot doli mi pa program zajamra :(
Takole zgleda odštevanje
listasovraznih_ladij.at(j)->zdravjenasp=listasovraznih_ladij.at(j)->zdravjenasp-10; if(listasovraznih_ladij.at(j)->zdravjenasp==0) {cout<<" "<<"hastala vistalas"<<" "; listasovraznih_ladij.erase( listasovraznih_ladij.begin()+ j); cout<<"življenja je še"<<listasovraznih_ladij.at(j)->zdravjenasp<<"alala"; } }
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | World of Warships (strani: 1 2 3 4 5 6 7 )Oddelek: Igre | 44431 (22870) | oo7 |
» | tekstura [c++ opengl]Oddelek: Programiranje | 911 (696) | matej94 |
» | GrafikaOddelek: Programiranje | 1695 (1047) | aaaaa93 |
» | Darkstar One (strani: 1 2 3 4 5 )Oddelek: Igre | 12567 (6334) | Mercenary |
» | Rise and fallOddelek: Igre | 2077 (1474) | Berserker |