Przekazywanie klasy, nie jej obiektów

0

Witam.

Mam pewien problem. Mam klasę z obiektami:

// Obj.java
public class Obj {
    public static class obj_gracz extends GameObject {
    }
    public static class obj_rasta extends GameObject {
    }
}

No i mam obsługe scen, a raczej list grafik, animacji i właśnie obiektów, które mają być tworzone przy starcie danej sceny.
Tutaj właśnie mam źle, i nie wiem jak to zrobić. Chcę aby insOBJ przechowywał adres do klasy, a nie jej obiekt.

// gScene.java
public class gScene {

    // klasa pomocnicza
    public class insOBJ {	
        GameObject Handle;// Jak tu powinno być?
        float X, Y, ScaleX, ScaleY, Angle, Alpha;
		
        public insOBJ( GameObject obj, float x, float y, float sx, float sy, float ang, float alp ) {
            Handle = obj;//?
            X = x;
            Y = y;
	    ScaleX = sx;
	    ScaleY = sy;
            Angle = ang;
            Alpha = alp;
        }
    }

    public Vector< insOBJ > Objects;

    public void ObjectAdd( GameObject obj, float x, float y, float sx, float sy, float ang, float alp ) {
	Objects.add( new insOBJ( obj, x, y, sx, sy, ang, alp ) );// ??
    }

}

Do tworzenia obiektów mam funkcje

Instance.Create( new Obj.obj_gracz(), 10, 10 );

Ale niestety, nie wiem jak zrobić coś typu:

Instance.Create( new ins.Handle(), 10, 10 );

Ktoś pomoże?

0

Domyślam się tylko o co chodziło:

public void foo(Class c){
  Object ob = c.newInstance();
}
4

public void ObjectAdd( GameObject obj, float x, float y, float sx, float sy, float ang, float alp ) {

kill_with_fire.jpg
Poważnie te floaty są ze sobą tak niezwiazane że nie da się z nich zrobić osobnej klasy która je upakuje?

Poza tym wydaje mi się że cały design tej aplikacji jest zrobiony źle. Powinieneś mieć obiekty które maja jakąs metodę drawYourself() która służy za malowanie obiektu. Tzn obiekt wie jak sie ma malować. I potem rysowanie sceny to tylko iteracja po wszystkich obiektach i wołanie drawYourself na każdym.

0

Wybaczcie, ale jakoś tak baaardzo dziwnie się wrzuciło :| Właśnie mniej więcej o to chodzi. Mam główną klasę Obj i w niej podklasy z extends GameObject. GameObject to klasa obiektu, którą dziedziczy każdy z tworzonych obiektów w grze. Teraz mam tak:

// gScene.java
public class gScene {
    public class insOBJ {	
	Class Handle;
	float X, Y, ScaleX, ScaleY, Angle, Alpha;
		
	public insOBJ( Class obj, float x, float y, float sx, float sy, float ang, float alp ) {
		Handle = obj;
		X = x;
		Y = y;
		ScaleX = sx;
		ScaleY = sy;
		Angle = ang;
		Alpha = alp;
	}

    public Vector< insOBJ > Objects;

    public void ObjectAdd( Class obj, float x, float y, float sx, float sy, float ang, float alp ) {
	Objects.add( new insOBJ( obj, x, y, sx, sy, ang, alp ) );
    }
}

// I teraz tworzę scenkę:
public static gScene scn_1= new gScene();
public static void Load() {
    scn_1.ObjectAdd( Obj.obj_gracz,  10f,  10f, 1f, 1f, 0f, 1f );// TUTAJ
    // Jak to zrobić? Obj.obj_gracz jest klasą GameObject. Jak to rozwiązać?
}
0

Ale po co robisz coś takiego? Czemu scena miałaby w taki dziwny sposób tworzyc te obiekty? Jaki jest tego cel? Nie możesz mieć po prostu kolekcji obiektów gry?

0

Napisz może - co chcesz zrobić ? bo to co masz teraz to jest jakiś łatafak

0

Bo wygląda to tak: mam klasę Scn.java i w niej jak widać obiekty gScene. W nich trzymam listy grafik i animacji sceny, które odpalane są na starcie. Ten fragment działa. Teraz chciałbym dodać ostatni element: listę obiektów( ich klas ) które mają się tworzyć. Nie moge trzymać obiektów bo nie chcę ich tworzyć przy samym dodawaniu mapki, a wtedy, gdy mapa jest odpalana.

0

Mam klasę sceny: gScene. W niej mam 3 vectory: Before i After do grafiki, animacji. No i trzeci vector to Objects. Nie zapisuję mapek w plikach, tylko tworzę nowy obiekt gScene i dodaję dany element mapy poprzez funkcję z gScene.

public class Scn {

	public static gScene scn_1= new gScene();// nowy obiekt scenki. w nim trzymam listę obiektów danej mapy

	public static void Load() {
		scn_1.BeforeAddSprite( Spr.spr_9, 96f, 480f, 1f, 1f, 0f );// Grafika i animacje
		scn_1.BeforeAddSprite( Spr.spr_8, 0f, 480f, 1f, 1f, 0f );
		scn_1.BeforeAddSprite( Spr.spr_20, 96f, 576f, 1f, 1f, 0f );
		scn_1.BeforeAddSprite( Spr.spr_21, 192f, 576f, 1f, 1f, 0f );

		scn_1.ObjectAdd( Obj.obj_gracz,  10f,  10f, 1f, 1f, 0f, 1f );// Obiekty
	}
}

Mam klasę Instance.java i w niej vector z listą GameObject. Jest i kolejna klasa: Scene.java. W scene mam funkcję Set( gScene mapa ).
Po wywołaniu funkcji Scene.Set( Scn.scn_1 ); czyści mi się mapa, dodaje na nią wszystkie elementy tła( vector Before i After ). No i chciałbym jeszcze aby tworzyły mi się wszystkie obiekty które są dodane do mapki. Rozumiecie?

0

Ja nie rozumiem, ale utwierdza mnie to tylko w przekonaniu że źle to zaprojektowałes a teraz szukasz hacka który by to jakoś posklejał. Co powinieneś zrobić z ty kodem masz w moim pierwszym poście.

0

Nie mam problemu z rysowaniem itp itd.. Po prostu chcę jakoś zapisać do klasy gScene liste obiektów GameObject którą ma tworzyć przy starcie właśnie tej sceny, rozumiesz? Nie znam za bardzo javy i dlatego mam z tym problem.. gScene przechowuje listę obiektów które mają być tworzone. Przy wybraniu funkcji Scene.Set( scena ) obiekty z listy tej sceny mają się wywoływać. Czyli jak mam na liście 2 obiekty np: obj_gracz i obj_rasta to teraz ma stworzyć obiekt obj_gracz( new Obj.obj_gracz() ). Rozumiesz?

0

Ale nie możesz zwyczajnie stworzyć listy/seta/hasha/arrayki - czekokolwiek [List<twojeobiekty> lista = new ArrayList<>();] i przekazać do tej klasy ? Twoim problemem nie jest nieznajomość javy tylko nieumiejętność programowania która kaleczy me oczęta.
Klasa:

class Pupka{
 private List<TwojeObiektyDoStworzenia> lista;

 public void setTwojeObiektyJakośJakolwiek(List<TwojeObiektyDoStworzenia> lista){
  this.lista = lista // TUTAJ PRZEKAZUJESZ LISTE TYCH OBIEKTÓW A NIE ROBISZ ŁATAFAKA
 }
}
0

Niestety się nie dogadaliśmy, ale już rozwiązałem swój problem w inny sposób :] Dzięki za pomoc.

0

Ciężko się dogadać z gościem który klasę nazywa obiektem...

0
niezdecydowany napisał(a):

Ciężko się dogadać z gościem który klasę nazywa obiektem...

Jemu chodziło właśnie o przekazanie obiektu tyou Class, tylko nie zakumał twojej pierwszej odpowiedzi.

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