JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=0f9561f94ddd40aa8cefbde1bf055305Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

vector Frage
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Florian
Super JLI'ler


Alter: 37
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 10.04.2004, 16:20    Titel: vector Frage Antworten mit Zitat

Hallo wie kann ich die Größe eines vectors festlegen.
Ich weiß nur noch beim Deklaieren kann man das so machen glaube ich.
vector<int> zahl(9);
in diesem beispiel ist es ein vector miit 9 zahlen;
wie kann ich aber das nach der Deklaration machen.
Geht es so zahl.size = 9 oder wie bitte kann mir jemand da helfen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 10.04.2004, 19:08    Titel: Antworten mit Zitat

Fast Wink
Code:
zahl.resize(9);

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Florian
Super JLI'ler


Alter: 37
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 10.04.2004, 19:13    Titel: Antworten mit Zitat

ok Danke werde ich gleich mal probieren. Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 10.04.2004, 20:56    Titel: Antworten mit Zitat

Es gibt auch

Code:
v.reserve(9);

_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 19:41    Titel: Antworten mit Zitat

Ich hab ein kleines Problem beim Löschen von Elementen aus Vectoren:

Code:

//Deklaration
vector<CBillboard*>::iterator itExplosion; //Grafikzeiger
vector<CBillboard*> listExplosion; //Grafikliste



//Löschen von Explosionsbillboards bei Animationsende
for(itExplosion=listExplosion.begin();itExplosion!=listExplosion.end();itExplosion++)
   {
    if((*itExplosion)->m_animationEnd){
      delete (*itExplosion);
      itExplosion = listExplosion.erase(itExplosion);

    }
 }   



Wenn ich versuche, weiterhin zu rendern, kommt eine Fehlermeldung.

Code:

//Billboards rendern
 for(itExplosion=listExplosion.begin();itExplosion!=listExplosion.end();itExplosion++)
   {
      (*itExplosion)->Render(Environment.m_Position+Environment.m_Zoom,Environment.m_LookAt);
      (*itExplosion)->GetDrawPosition();
   }



Wenn ich die vorhandenen Objekte zählen lasse, wird dieselbe Anzahl ausgegeben wie vor dem Löschen eines Billboards. Andererseits wird beim Versuch, das vermeintlich gelöschte Objekte zu rendern, kommt eine Fehlermeldung.

Wo könnte hier der Fehler im Quellcode liegen??
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 20:31    Titel: Antworten mit Zitat

wenn der Fehler beim Rendern kommt, dann wohl sehr wahrscheinlich bei
CPP:
CBillboard->Render()


wo zeigt denn der Compiler dir den Error an? Welche Zeile? Ach ja, und poste mal Render() und GetDrawPosition()

Nebenbei:
LeeDiGer hat Folgendes geschrieben:
CPP:
//Deklaration
vector<CBillboard*>::iterator itExplosion; //Grafikzeiger
vector<CBillboard*> listExplosion; //Grafikliste
 


eigentlich ist zwischen vector und list in der STL ein Unterschiedt, aber is egal..

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 21:58    Titel: Antworten mit Zitat

Nee, an meine Funktionen "Render()" und "GetDrawPosition()" liegts nicht. die funktionieren, wenn ich Listen benutze. Es wird ein Nullzeigerfehler ausgegeben.

Ich wollte hier aber "Vector" verwenden, um einen Sortieralgorithmus anwenden zu können, um Billboards mit Alphablending in korrekter Reihenfolge zu rendern.

Was ist gegen diese Deklaration einzuwenden:
Code:

//Deklaration
vector<CBillboard*>::iterator itExplosion; //Grafikzeiger
vector<CBillboard*> listExplosion; //Grafikliste


Gibt zumindest keine Kompilerfehler. Kann man immer noch einzelne Elemente an jeder Stelle löschen wenn man folgerndermaßen deklarieren würde:

Code:

//Deklaration
vector<CBillboard> Listxplosion; //Grafikzeiger

_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 22:06    Titel: Antworten mit Zitat

Bist du dir sicher, dass an dem Speicherbereich auch noch gültiger Speicher ist?
Du übergibst deinem Vector ja nur Zeiger auf CBillboard-Objekte. Die Objekte selbst müssen allerdings auch so lange im Speicher existieren wie du sie durch den Vector verwenden willst. Eine Funktion wie diese bringt also wenig:
CPP:
void AddBillboard(void)
{
    CBillboard my_new_billboard;
    //Initialisierung
    listExplosion.push_back(&my_new_billboard);
}
//Ab hier wird der Gültigkeitsbereich von my_new_billboard verlassen

vod SomewhereElse(void)
{
    listExplosion[0]->DoSth(); //<- Zugriff auf ungültigen Speicher
}

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 22:10    Titel: Antworten mit Zitat

LeeDiGer hat Folgendes geschrieben:
Kann man immer noch einzelne Elemente an jeder Stelle löschen wenn man folgerndermaßen deklarieren würde:


Bei jeder Reallokierung verlieren alle Iteratoren ihre Gültigkeit.

Alle Algorithmen sollten auch mit list funktionieren.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 22:14    Titel: Antworten mit Zitat

PeaceKiller hat Folgendes geschrieben:
Alle Algorithmen sollten auch mit list funktionieren.

Leider der sort-Algo im VC 6.0 für Listen nicht Confused (weiß gerade nicht mehr, obs der allgemeine Algo oder - falls es das bei list überhaupt gibt - die sort()-Methode war)
Da ist irgendein Bug im Compiler, der da einen Fehler verursacht.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...


Zuletzt bearbeitet von The Lord of Programming am 12.05.2005, 22:32, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 22:27    Titel: Antworten mit Zitat

Listen wollt ich natürlich auch sortieren, hab aber nix dazu gefunden.
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 22:31    Titel: Antworten mit Zitat

LeeDiGer
std::vector != std::list

Bei std::vector gehts so:
CPP:
#include <iostream>
#include <string>
#include <algorithm> 

class item 

public:
    item (const std::string& name_) : name(name_) {};
    ~item (void) {}

    std::string name; 
    unsigned int arguments; 
};
 
 
bool const ssss (const item& left, const item& right) 

    if (left.name<right.name) return (true); 
    if (left.name>right.name) return (false); 

    return (false); 

 
int main (void)
{
    std::vector<item> items_vec;

    items_vec.push_back(item("hallo2"));
    items_vec.push_back(item("hallo"));
    items_vec.push_back(item("mamaaaaa"));
    items_vec.push_back(item("hallo63"));
    items_vec.push_back(item("hallo44"));
    items_vec.push_back(item("arschilochi"));

    std::sort(items_vec.begin(),items_vec.end(), ssss);

    for (int i=0; i<items_vec.size(); ++i)
    {
        std::cout<<items_vec[i].name.c_str() << std::endl;
    }
 
    std::cin.get();
 
    return 0;
}


Bei std::list gibt es die Memberfunktion std::list::sort, da std::list anders aufgebaut ist als std::vector.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 22:31    Titel: Antworten mit Zitat

The Lord of Programming hat Folgendes geschrieben:

Bist du dir sicher, dass an dem Speicherbereich auch noch gültiger Speicher ist?


Nein, ich bin mir nicht sicher Very Happy.

Es soll ja auch ein Objekt gelöscht werden. Aber es wurde irgendwie nur halb gelöscht. Einerseits hab ich das Gefühl, dass das Element weg ist. Andererseits ist der Speicherplatz aber immer noch belegt. Der vektor hat also immer noch die gleiche Anzahl an Elementen wie vor dem Löschvorgang (oder hab ich falsch gelöscht???).
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 22:41    Titel: Antworten mit Zitat

Du könntest den Löschvorgang auf jeden Fall vereinfachen. Anstatt jedes Element einzeln zu erasen, kannst du nach dem Durchlaufen der Liste/des Vectors(bei dem du den Speicher freigibtst) auch billboardvector.clear() aufrufen Wink
Ich bin mir gerade nicht sicher, aber kann auch sein, dass erase dir ein ungewünschtes Ergebnis zurückgibt. Entweder gibt es dir einen Iterator auf das Element vor dem gelöschten oder auf das Element nach dem gelöschten zurück. Wenn du übrigens den Iterator beim erasen mit einem dieser beiden Möglichkeiten initialisierst und durch die Schleife den Iterator nach hinten schiebst(itExplosion++), dann ist es auch naheliegend, dass Elemente übersprungen werden.

Bsp:
CPP:
itExplosion = listExplosion.erase(itExplosion);
//itExplosion zeigt auf Element nach dem gelöschten, weil dieses selbst nicht mehr existiert

CPP:
for(itExplosion=listExplosion.begin();itExplosion!=listExplosion.end();itExplosion++)
//Dadurch wird bei dem nächsten Schleifendurchlauf der Iterator auf das zweitnächste Element gesetzt
//=> Element wird übersprungen

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 12.05.2005, 22:49    Titel: Antworten mit Zitat

Wie würdest dus denn am besten machen? Ich will ja im Grunde genommen nur irgendwelche Billboards zeichnen, sortieren und gegebenfalls löschen, wenn die Animation eines Billboards abgelaufen ist.
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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