JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Wie weise ich einem Objekt ein zweites zu?

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 28.08.2003, 18:27    Titel: Wie weise ich einem Objekt ein zweites zu? Antworten mit Zitat

Hallo,

*seufz* ja.... wieder ne laestige Frage Wink

Ich hab ein leichtes Verstaendnissproblem. Ich wollte eine Struktur anlegen, in die ich alles gesammelt reinschreiben kann, was ein Objekt betrifft. Also Schadensmodell, Energie, Empfindlichkeit usw.

Ich hab also folgende Struktur angelegt:

Code:

typedef struct EINHEITEN_STRUC {
C3DObjekt*    pMesh;
C3DObjekt*    pDestroyed;
int        iEnergy;
BOOL        bNormalWeapons;
BOOL        bNucWeapons;      
BOOL        bSpecialWeapons;   
} EINHEITEN;



Da ich aber noch mit Christians Routinen Meshes lade, hab ich ein Problem wie ich das zuordne. Also ich lade zwar ein Mesh, aber wie verknuepfe ich das mit den Werten und sogra einem zweiten Mesh im Zerstoerungsfall?

Vielen Dank fuer die Hilfe im voraus...[/code]


Zuletzt bearbeitet von X-FILE am 28.08.2003, 19:24, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 28.08.2003, 19:03    Titel: Antworten mit Zitat

Hiho,

was willst du denn genau? Die Werte in der Struktur (warum ist es keine Klasse?) kannst du ja bestimmt selber füllen, oder? Wenn du die beiden Modelle geladen hast, muss du nur hinbekommen, wann das eine und wann das andere angezeigt wird?

Code:

void EINHEITEN_STRUC::Update()
{
    if(m_bWasDestroyed)
    {
       m_nCurrentMesh = pDestroyed;
    }
   
    m_nCurrentMesh->Render();
}

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 28.08.2003, 19:34    Titel: Antworten mit Zitat

Uebler Rechtschreibfehler war in der Headline. Wieso sagt mir das keiner Wink

Zitat:

Die Werte in der Struktur (warum ist es keine Klasse?) kannst du ja bestimmt selber füllen, oder?


Ja keine Ahnung du, warums keine Klasse ist. Ich arbeite nahezu das erste mal mit ner Struktur. Ich dachte, dass waere die beste Loesung? Denkst du ne eigene Klasse waere besser?

Mein Problem ist es, bei 50 Objekten zu wissen, was welches Objekt jetzt hatte. Welche Energieeinheit, welches Schadensmodell usw. Also muesste ich diese Werte ja beim laden schon zuweisen?


Code:

Beispiel:

C3DObjekt* mesh = new C3DObjekt();
mesh->Init(...);
mesh->Load(...);
mesh->SetPosition(...); //bis hierher gut und normal. Ab jetzt??
mesh->LoadDestroyedMesh(...);
mesh->SetEnergie(...);
mesh->SetWeapons(...);



Also so denke ich mir das. So muesste es ja gehen. Aber irgendwo muss ich das ja reinspeichern, so dass ich immer die Werte jedes einzelnen Modells abfragen kann?
Also das ich dem Zeiger m_nCurrentMesh (aus deinem Beispiel), auch das korrekte pDestroyed zuweise. Und nich auf einmal aus Model1 nach dem zerstoeren Model2 wird. Ich hoffe man versteht mein Problem?

Ueberhaupt ist das mein groeßtes Problem, dass einen Zeiger "mesh", ja x-Beliebige Modelle beinhalten kann und somit auf Anhieb ja nicht als Eindeutig erkennbar ist Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 28.08.2003, 19:38    Titel: Antworten mit Zitat

Warum legst du im Programm nicht einfach eine Liste der geladenen Meshs an ?
Jedes mal wenn du dann ein Mesh für eine Struktur/Klasse brauchst suchst du nach dem richtigen Mesh und übergibst den Zeiger an deine Struktur/Klasse.
Wenn kein Mesh gefunden wurde legst du einfach eins an.

So machen die Profis das doch auch oder irre ich mich da ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 29.08.2003, 01:22    Titel: Antworten mit Zitat

Hi,

ich hatte dein Post total uebersehen. Sorry Confused

Ja so mach ich das auch schon. Ich lege ne Liste aller geladenen Meshes an und rendere die Liste durch. Passiert was besonderes, wie zum Beispiel ein aktivieren des Meshes durch Picking, wird da nachgekuckt welches es is und dementsprechend verfahren (Bewegung, Rotation, usw.)

Das Problem liegt vielmehr in der Erweiterung dieser Tatsache. Also da, wos anfaengt fuer eigentlich nur (real gesehen) ein Modell zwei Zustaende zu geben. Als beispielsweise einmal heil und einmal kaputt. Oder einem Modell bestimmte Werte zuzuordnen, die es in der virtuellen Welt bis zum ableben oder "~" haben soll Wink
Das ist meine Schwierigkeit. Ich habs auch grad probiert, dem Mesh beispielsweise beim Picking eine andere Erscheining zu geben, die zur Vereinfachung mal fest definiert war. Das hat nich hingehauen leider.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 29.08.2003, 19:39    Titel: Antworten mit Zitat

Du scheinst meine Antwort falsch verstanden zu haben.

Ich sagte du kannst eine Liste mit allen Meshs erstellen.

Dann ertsllen eine Liste mit deinen Objekten (Raumschiffe, Schüsse,...) und in der Klasse der Objekte kannst du dann einen Verweis auf ein Mesh der Meshliste machen. Das spart Speicherplatz weil die Meshs nicht tausende male geladen werden müssen sondern nur einmal.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 29.08.2003, 19:51    Titel: Antworten mit Zitat

Hmm ja du hast recht. Ich verstehs wirklich falsch. So ganz verstehe ich den Unterschied zu dem was ich eh schon tue nicht.

Ich lege eine Liste an, aller Objekte die in der Szene vorkommen und ... hmm das wars auch schon Wink
Da bin ich jetzt wohl zu doof fuer .... wie meinst du denn das? Was soll ich mit der Liste noch machen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 29.08.2003, 20:04    Titel: Antworten mit Zitat

mhh

Ich erklär das mal in einem Pseudocode Beispiel:

Code:


Function ErstelleRaumschiff("ModelName","Bezeichnung")
Begin

  Mesh *Model=SucheModel("ModelName") (suche Mesh aus MeshListe)

  Ist "ModellName" nicht vorhanden (Modell wurde noch nie geladen)
  Begin
    Model = ErstelleModell("ModellName") (suche ModellName aus Verzeichnis und füge zu MeshListe)
  End

  Ist Model vorhanden (Model wurde gefunden oder geladen)
  Begin
    Erstelle notwendige Daten
    NotwendigeDaten->SchiffsModel = Model
  End

End
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 29.08.2003, 20:18    Titel: Antworten mit Zitat

Ahhhhh jetzt verstehe ich!! Jetzt weiß ich warum ichs ned verstanden habe. Weils etwas von dem zweiten Meshobjekt wegfuehrt. Wink

Du meinst also ich soll zu anfangs ne Liste haben, wo ich dann die Objekte als "NowNeeded" heraus zu erstellen?? Oder??

Hab ichs so recht verstanden?? Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 29.08.2003, 20:21    Titel: Antworten mit Zitat

Ja so ungefähr. Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 29.08.2003, 20:37    Titel: Antworten mit Zitat

Am besten ist, wenn man sich einen Ressourcen Manager erstellt, von dem man sich die nötigen Sachen holt und der auch darüber Buch führt, wieviele Objekte eine bestimmte Ressource benutzen. Wenn eine Ressource dann garnicht mehr benötigt wird, kann man sie dann auch nach einer Weile wieder löschen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 29.08.2003, 20:40    Titel: Antworten mit Zitat

Ja genau so habe ich das gemeint. (ich hätt das genauso kurz schreiben sollen)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 29.08.2003, 20:45    Titel: Antworten mit Zitat

Hmm jaja.... Ressourcenmanager nutze ich auch, sowohl fuer Texturen, als auch Objekte usw. usw.

Aber das Problem bleibt:
Wie weiße ich einem Objekt aus diesen Listen meinetwegen ein anderes zu? Das ist trotzdem noch da....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 29.08.2003, 20:53    Titel: Antworten mit Zitat

wenn deine ObjektKlasse so ist ist das sicher kein Problem:

Code:

class ObjektKlasse
{
   ...
   public:
   Mesh *currentMesh;
   ...
};


dann geht das sicher so (die Meshklasse ist doch was mit LP... oder ?):

Code:

klasse->currentMesh=MeshManager->SucheMesh(MeinNeuesMesh);


wenn es immer noch nicht klappt dann sende einfach mal deinen Quellcode wo das reinkommen sollte und wie du es jetzt hast.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum