Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 28.08.2003, 18:27 Titel: Wie weise ich einem Objekt ein zweites zu? |
|
|
Hallo,
*seufz* ja.... wieder ne laestige Frage
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 |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 28.08.2003, 19:03 Titel: |
|
|
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 |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 28.08.2003, 19:34 Titel: |
|
|
Uebler Rechtschreibfehler war in der Headline. Wieso sagt mir das keiner
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  |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 28.08.2003, 19:38 Titel: |
|
|
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 |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 29.08.2003, 01:22 Titel: |
|
|
Hi,
ich hatte dein Post total uebersehen. Sorry
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
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 |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 29.08.2003, 19:39 Titel: |
|
|
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 |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 29.08.2003, 19:51 Titel: |
|
|
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
Da bin ich jetzt wohl zu doof fuer .... wie meinst du denn das? Was soll ich mit der Liste noch machen? |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 29.08.2003, 20:04 Titel: |
|
|
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 |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 29.08.2003, 20:18 Titel: |
|
|
Ahhhhh jetzt verstehe ich!! Jetzt weiß ich warum ichs ned verstanden habe. Weils etwas von dem zweiten Meshobjekt wegfuehrt.
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??  |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 29.08.2003, 20:21 Titel: |
|
|
Ja so ungefähr.  |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 29.08.2003, 20:37 Titel: |
|
|
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 |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 29.08.2003, 20:40 Titel: |
|
|
Ja genau so habe ich das gemeint. (ich hätt das genauso kurz schreiben sollen) |
|
Nach oben |
|
 |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 29.08.2003, 20:45 Titel: |
|
|
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 |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 29.08.2003, 20:53 Titel: |
|
|
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 |
|
 |
|