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

21

29.11.2009, 20:38

Generell, was unterscheidet deine Baum-Sprites so von Stein- oder Monster Sprites, dass du für alle eigene Listen anlegen musst?

eine einziger Vector ...

Quellcode

1
 std::vector<sf::Sprite> AllDrawables;
... sollte ausreichen.

Für weitergehende Logik dahinter musst du das natürlich anders handhaben (Kollision z.B.)

So Far...

Laguna

22

30.11.2009, 18:43

Danke, ich versuchs gleich aus.
Ich hab für jeden einen einzelne Liste gemacht
da ich bei nur einer liste nur schwer ein lvl erstellen kann...
Weil ich will ja für jedes Objekt eine eigene Zahl
also Zahl 1= Baum Zahl2 = Stein usw.
Wenn ich alles zusammen in eins mache dann kann ich,
wenn ich mich nicht irre, die Objekte nur schwer beliebig verteilen.

23

30.11.2009, 19:23

Also, ich habs jetzt ganz versucht... nur geht es
natürlich nicht... :(
Nochmal der ganze code:

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
28
29
30
31
32
33
34
#include "CLoad.hpp"
#include <vector>

void CLoad::LoadAllSprites()
{
//....

}
void CLoad::LvlGenerator(char *pObjekt)
{

    std::vector<sf::Sprite> SStein;
    std::vector<sf::Sprite> SHeld;
    std::vector<sf::Sprite> SBaum;
    std::vector<sf::Sprite> SMonster;
    for (DWORD dwChar = 0; dwChar < strlen(pObjekt); dwChar++)
    {
        if(pObjekt[dwChar] != ' ')
        {
        }
            if(pObjekt[dwChar] == '1')
            {
                App.Draw(SHeld.at(0));
            }
            else if(pObjekt[dwChar] == '2')
            {
                App.Draw(SStein.at(1));
            }
        }
    }

//Soo soll es dann in der main.cpp aussehen.

        CLoad Load;
        Load.LoadAllSprites();
        Load.LvlGenerator("0101"); //Objekt SHeld, SStein, SHeld, Stein erstellen.

Außerdem macht vector noch ein problem undzwar
kann ich jetzt nicht auf die SFML Methoden zugreifen
also SetPositon(X, Y); usw. was mir das Positionieren der
Objekte noch schwer macht... :?

Das ist die Ausgabe (fehler):

Zitat

Eine Ausnahme (erste Chance) bei 0x7602fbae in Bogen.exe: Microsoft C++-Ausnahme: std::out_of_range an Speicherposition 0x001af2bc..
Unbehandelte Ausnahme bei 0x7602fbae in Bogen.exe: Microsoft C++-Ausnahme: std::out_of_range an Speicherposition 0x001af2bc..
Bogen.exe hat einen Haltepunkt ausgelöst.
Durch einen Pufferüberlauf in Bogen.exe wurde der interne Programmzustand beschädigt. Klicken Sie auf "Unterbrechen", um das Programm zu debuggen, oder auf "Weiter", um es zu beenden.

Weitere Informationen finden Sie im Hilfethema "Gewusst wie: Debugging von Pufferüberlaufproblemen".
Durch einen Pufferüberlauf in Bogen.exe wurde der interne Programmzustand beschädigt. Klicken Sie auf "Unterbrechen", um das Programm zu debuggen, oder auf "Weiter", um es zu beenden.

Weitere Informationen finden Sie im Hilfethema "Gewusst wie: Debugging von Pufferüberlaufproblemen".
Das Programm "[5640] Bogen.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.


Oder mach ich einfach alles falsch? :( :?:

24

30.11.2009, 19:27

In dem Vector ist hier ja noch gar nichts drinne:

C-/C++-Quelltext

1
2
3
4
if(pObjekt[dwChar] == '1')
            {
                App.Draw(SHeld.at(0));
            } 


es schadet also nicht, den Vector erst einmal zu füllen, bevor man auf seinen Inhalt zugreift ;)

25

30.11.2009, 19:36

Ah...

C-/C++-Quelltext

1
2
3
4
    SStein.push_back(Stein);
    SHeld.push_back(Held);
    SBaum.push_back(Baum);
    SMonster.push_back(Monster);

So?
Jetzt wenn ich das Programm in Visual öffne,
kommt nicht ganznormal spirit.png konnte nicht geladen
werden sondern es ist wie eine schleife, also es kommt
unendlich oft. Und wenn ich es im Release ordner öffne
wo natürlich die Spirits "Bilder" da sind öffnet sich nur
ein schwarzes Fenster... was hat das zu bedeuten.
Soweit ich weiß heißt das dass nicht gezeichnet wird, oder?
Wo liegt also jetzt das Problem?
Oder bin ich ganz verkehrt?

idontknow

unregistriert

26

30.11.2009, 19:39

Öhh. Das bild wird nicht geladen? O.O

27

30.11.2009, 19:42

Wie jetzt?
Ist doch normal, visual c++ kann (also bei F5 druck) nicht auf
die Daten zugreifen...
Wenn ich aber die Exe ganz normal vom Ordner
starte wird das Bild schon geladen.. sonst würde
in der Konsole doch stehen.
Bild so und so konnte nicht geladen werden...
Ps.:
Kannes deswegen liegen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
        CLoad Load;
        Load.LoadAllSprites();
        Load.LvlGenerator("010101");

        App.Clear(); 
        App.Display();
    }
    return EXIT_SUCCESS;
}

Also wegen App.Clear(); und wenn ich die funktion aufrufen
dann wird App.Draw for App.Clear () benutzt. Wird
dann vielleicht alles immer wieder gelöscht?

28

30.11.2009, 19:44

Zeig mal den ganzen / oder wenigstens ein bissle mehr zusammenhängenden Code.

29

30.11.2009, 19:57

Die main.cpp ist eigentlich noch recht leer bis auf den
standard SFML Quellcode.

Ansonsten

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef CLOAD_HPP
#define CLOAD_HPP
#include "SFML/Graphics.hpp"
#include "SFML/System.hpp"
#include "SFML/Window.hpp"

class CLoad
{
public:
    sf::RenderWindow App;
    sf::Image Held;
    sf::Image Stein;
    sf::Image Baum;
    sf::Image Monster;
    void LoadAllSprites();
    void LvlGenerator(char *pObjekt);
//...unrelevanter rest.

};
#endif

C-/C++-Quelltext

1
2
3
4
5
6
7
void CLoad::LoadAllSprites()
{
    if(!Stein.LoadFromFile("Data/Stein.png")){}
    if(!Baum.LoadFromFile("Data/Baum.png")){}
    if(!Monster.LoadFromFile("Data/Monster.png")) {}
    if(!Held.LoadFromFile("Data/Held.png")) {}
}

Mehr hat nicht mit der Funktion zu tun..

30

30.11.2009, 20:08

Ohman... ich bin blöd.. ich hab ja 1 und 2 defeniert und
nicht 0 und 1 wenn ich jetzt
wieder also hier:

C-/C++-Quelltext

1
Load.LvlGenerator("121212");

eingebe kommt in der Konsole:

Zitat

This Application has requestet the Runtime to terminate it an unusual way.
Please Contact the applications`s support team for more
information

Die Lvl Generator funktion sieht wie davor aus.
Nur halt das ich noch .pushback benutzt hab.
Außerdem kommt das wieder mit std::out_of_range
und in der vector Datei wird hier hin gewiesen:

C-/C++-Quelltext

1
2
3
4
5
6
    reference at(size_type _Pos)
        {   // subscript mutable sequence with checking

        if (size() <= _Pos)
            _Xran();
        return (*(begin() + _Pos));
        }

...ich glaub ich kann die funktion vergessen, oder... :?

Werbeanzeige