Wyciąganie obIektu z konstruktora

0

Witam!
Jest to mój pierwszy post tutaj, więc proszę o wyrozumiałość.
Otóż chcę napisać grę bazującą na bibliotekach Box2D i Allegro5.
Problem pojawił się, gdy stworzyłem klasę Obiekt i konstruktor tej klasy, mianowicie gdy w konstruktorze stworzyłem obiekt klasy b2Body i chciałem wywołać go w mainie to powstawały błędy.
Szukałem w googlach długo, próbowałem ze operatorami "::" i ":" ale to nic nie dawało.
Zapewne problem jest banalny ale dawno nie pisałem w c++ i dopiero się uczę objektówki.

Obiekty.h

#include <Box2D/Box2D.h>

#ifndef obiekty_h
#define obiekty_h

class Obiekt{
    public:
        float x, y, rozx, rozy, ad, gs, d, f, a;
        bool act;

    Obiekt(float, float, float, float, float, float, float, float, float, bool);
};

#endif // obiekty_h

Obiekty.cpp

#include <Box2D/Box2D.h>

#include "obiekty.h"

b2Vec2 gravity(0.0f, 10.0f);
b2World world( gravity );

Obiekt::Obiekt(float _x, float _y, float _rozx, float _rozy, float _ad, float _gs,
                    float _d, float _f, float _a, bool _act){
    x = _x;
    y = _y;
    rozx = _rozx;
    rozy = _rozy;
    ad = _ad;
    gs = _gs;
    d = _d;
    f = _f;
    a = _a;
    act = _act;

    b2BodyDef obj;
    obj.type = b2_dynamicBody;
    obj.position.Set(x, y);
    obj.angularDamping = ad;
    obj.gravityScale = gs;
    obj.angle = a * b2_pi;
    obj.active = act;
    b2Body *Obj = world.CreateBody(&obj); //to chce "wyciągnąć"

    b2PolygonShape shape;
    shape.SetAsBox(rozx, rozy);
    b2FixtureDef fix;
    fix.shape = &shape;
    fix.density = d;
    fix.friction = f;
    Obj->CreateFixture(&fix);


}

main.cpp (fragment)

while( !al_key_down( &kl, ALLEGRO_KEY_ESCAPE ) ){

	al_get_keyboard_state( &kl );

        b2Vec2 pos = Obj::Objekt()->GetPosition(); //tu jest błąd!
        float rot = Obj->GetAngle();                      //tu też!

        al_flip_display();
        world.Step(1.0f/60.0f, 8, 1);
    }

Z góry dziękuje za pomoc.
Sengi

0

Tak samo jak "wyciągasz" np act

1
b2Vec2 pos = Obj::Objekt()->GetPosition(); 

tak sie nie tworzy obiektow

Obj *obj = new Obj() 
b2Vec2 pos = obj->GetPosition()

jak juz cos. Tylko ze

  1. nie masz konstruktora domyslnego
  2. jak wywolujesz konstruktor to ten co zdefiniowales, a ty zdefiniowales z MILIONEM parametrow (co w samo sobie juz jest zle jezeli chodzi o OOP)
  3. to jest goly wskaznik ktorego sie nie powinno uzywac. Dlaczego napisalem? Bo i tak bys nie zrozumial idei RAII wiec chcialem to uproscic.
  4. nie masz nigdzie funkcji GetPosition zadeklarowanej w swojej klasie

Rada na dzis?
Poczytaj w jakims tutorialu o klasach. Bo daleko nie zajedziesz ze swoja wiedza

0
Obj *obj = new Obj() 
b2Vec2 pos = obj->GetPosition()

Ale Obj nie jest klasą tylko obiektem klasy b2Body, który chcę użyć w main.cpp aby otrzymać pozycję obiektu.
Metoda GetPosition jest metodą klasy b2Vec2, która jest częścią Boxa2D, którego zaincludowałem w mainie.

0

Chyba mogę użyć dziedziczenia. Klasa Obiekt będzie dziedziczyć z klasy b2Body.

1

Nie musi dziedziczyć, wystarczy zawieranie.

0

I o coś podobnego mi właśnie chodziło.
Dzięki _13th_Dragon.
Zamykam temat.

1 użytkowników online, w tym zalogowanych: 0, gości: 1