» »

[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
  • 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.

MrBrdo ::

MrBrdo

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:
    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
             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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

World of Warships (strani: 1 2 3 4 5 6 7 )

Oddelek: Igre
33744420 (22859) oo7
»

tekstura [c++ opengl]

Oddelek: Programiranje
9911 (696) matej94
»

Grafika

Oddelek: Programiranje
201695 (1047) aaaaa93
»

Darkstar One (strani: 1 2 3 4 5 )

Oddelek: Igre
20512567 (6334) Mercenary
»

Rise and fall

Oddelek: Igre
222077 (1474) Berserker

Več podobnih tem