Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.11.2009, 16:40

Array Problem!

Hallo, ja.. ich hab wieder ein Problem.
Naja, ich denke mal diesmal ist es kein all zu kompliziertes
Problem.
Undzwar will ich Arrays in SFML benutzen, so siehts bis jetzt
aus:

C-/C++-Quelltext

1
2
DWORD Objekt1 = 1; //Zähler für Objekt1

sf::Sprite SStein[Objekt1](Stein);

Das ist die Fehlerausgabe:

Zitat


1>.\CLoad.cpp(9) : error C2057: Konstanter Ausdruck erwartet
1>.\CLoad.cpp(9) : error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich.
1>.\CLoad.cpp(9) : error C2075: 'SStein': für die Initialisierung eines Arrays sind geschweifte Klammern erforderlich


Natürlich funktioniert es auch nicht mit geschweiften
Klammern... sieht auch irgendwie komisch aus.
Meine Frage ist jetzt wie ich es hinbekomme das
Array zu benutzen, so dass es auch funktioniert.
Das ganze ist für eine Funktion die
z.B die Zahl 1 im Spiel als Stein intepretiert.
Wie in Davids Buch bei Breakanoid. :)

Ich hoffe man kann mir helfen!
Danke schonmal!

2

29.11.2009, 16:43

Was soll denn der Code Machen ?

also du kannst ein Array nicht so deklarieren.
als was ist denn Stein Deklariert ?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

29.11.2009, 16:48

Was du suchst nennt sich std::vector ;)

4

29.11.2009, 16:49

Wow, das war schnell.
Der Code soll wie gesagt Zahlen als Objekte
Intepretieren, eine art Lvl Editor, nur das es halt eine
Funktion und kein Editor ist.

Stein ist als sf::Image Stein; deklariert.
Das Problem ist eigentlich das ich nicht weiß
wie ich nach dem Laden vom Stein, den Stein
öfters auf dem Bildschirm Zaubere, deswegen hab
ich es bis jetzt immer so gemacht:

C-/C++-Quelltext

1
2
3
sf::Sprite SStein1(Stein);
sf::Sprite SStein2(Stein);
//So konnte ich den Stein öfters benutzen als nur einmal


Nur war das umständlich deswegen wollte ich mit hilfe
des Arrays es so machen das SStein[Array] da ist.
Und bei jedem mal wenn ich z.B die Zahl "1" in die Funktion
schreibe (die im Spiel als Stein intepretiert wird) dann soll
Array++; verwendet werden um dann das nächste zu
verwenden. Hoffe mal das man sich nicht über die
Idee lustig macht, aber leider gibt zur sfml zu wenig
tutorials.

Haxx0r

Treue Seele

Beiträge: 209

Wohnort: Da!

Beruf: Rebell mit aktivem Lebensstil

  • Private Nachricht senden

5

29.11.2009, 16:55

std::vector<sf::Sprite> SStein;?

6

29.11.2009, 17:00

Ehmm.. ich habs leider nicht gerafft.
Hat, std::vector<sf::Sprite> SStein;
genau den gleichen Effekt wie es eigenltich
sf::Sprite SStein[Array](Stein);
haben sollte.Ich hab bisjetzt noch nicht mit
vector<> gearbeitet.

EDIT: Hier nochmal der ganze Code der Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void CLoad::LvlGenerator(char *pObjekt)
{
    DWORD Objekt1 = 1; //Zähler für Objekt1

    DWORD Objekt2 = 1;   //Zähler für Objekt2

    DWORD Objekt3 = 1;   //Zähler für Objekt3

    DWORD Objekt4 = 1; //Zähler für Objekt4

        sf::Sprite SHeld[Objekt1](Held);
    sf::Sprite SStein[Objekt2](Stein);
    sf::Sprite SBaum[Objekt3](Baum);
    sf::Sprite SMonster[Objekt4](Monster);
    for (DWORD dwChar = 0; dwChar < strlen(pObjekt); dwChar++)
    {
        if(pObjekt[dwChar] != ' ')
        {
            if(pObjekt[dwChar] == '1')
            {
                App.Draw(SHeld[Objekt1]);
                Objekt1 = +1;
            }
            else if(pObjekt[dwChar] == '2')
            {
                App.Draw(SStein[Objekt2]);
                Objekt2 = +1;
            } //...

        }
    }
}

So, war das Prinzip...

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

29.11.2009, 17:04

Das ist grundsätzlich das ja, allerdings ist der vector am Anfang noch leer, wenn du ihn erstellst.

Das heisst.

C-/C++-Quelltext

1
2
3
4
5
std::vector<sf::Sprite> SStein;

SStein.push_back ( Stein );
SStein.puhs_back ( Stein );
//usw. kannst ja auch mit einer Schleife einfügen


Der Zugriff findet dann analog zu einem Array statt.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

29.11.2009, 17:07

Sowas

C-/C++-Quelltext

1
sf::Sprite SStein[Objekt2](Stein); 


Geht nicht wie du ja bereits herausgefunden hast. drakon hat schön vorgezeigt wies geht. Die std:: Containerklassen (vector, list, map, ...) solltest du dir mal anschauen, die sind irre praktisch ;)

9

29.11.2009, 17:10

boost::tuple sollte man auch nicht verachten

10

29.11.2009, 17:14

Ganz ehrlich ist es für mich immer noch ein bissian
bahnhof...

Was bewirkt denn vector bzw. SStein.pushback im großen
und ganzen?
Google sagt .pushback = Add Element at the end.
Nur ist das nicht gerade aussage kräftig.

Werbeanzeige