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

Alexander D.

Frischling

  • »Alexander D.« ist der Autor dieses Themas

Beiträge: 4

Wohnort: Gratkorn

Beruf: Elektriker

  • Private Nachricht senden

1

18.01.2016, 19:41

[C++/SFML] Meine Map stürzt ab

ich möchte ja nicht unhöflich klingen aber ich versuch mich jetzt seit einiger zeit an dem SFML und ich kapier gerade nicht warum das mit der Karte sprich der Main Map nicht funktioniert jedes mal wenn ich das Übungsbeispiele eingebe und auch wenn ich es 1 zu 1 Kopiere klappt es nicht es stürzt immer ab dabei wollte ich auf das umsteigen da einige Sachen leichter damit gehen und weniger text brauchen. Nur ohne die Grafiken wird das wohl nix. weiß einer von euch wo der Fehler liegt.


class TileMap : public sf:: Drawable, public sf::Transformable
{
public:

bool load(const std::string& tileset, sf::Vector2u tileSize, const int* tiles, unsigned int width, unsigned int height)
{
// load the tileset texture
if (!m_tileset.loadFromFile(tileset))
return false;

// resize the vertex array to fit the level size
m_vertices.setPrimitiveType(sf::Quads);
m_vertices.resize(width * height * 4);

// populate the vertex array, with one quad per tile
for (unsigned int i = 0; i < width; ++i)
for (unsigned int j = 0; j < height; ++j)
{
// get the current tile number
int tileNumber = tiles[i + j * width];

// find its position in the tileset texture
int tu = tileNumber % (m_tileset.getSize().x / tileSize.x);
int tv = tileNumber / (m_tileset.getSize().x / tileSize.x);

// get a pointer to the current tile's quad
sf::Vertex* quad = &m_vertices[(i + j * width) * 4];

// define its 4 corners
quad[0].position = sf::Vector2f(i * tileSize.x, j * tileSize.y);
quad[1].position = sf::Vector2f((i + 1) * tileSize.x, j * tileSize.y);
quad[2].position = sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y);
quad[3].position = sf::Vector2f(i * tileSize.x, (j + 1) * tileSize.y);

// define its 4 texture coordinates
quad[0].texCoords = sf::Vector2f(tu * tileSize.x, tv * tileSize.y);
quad[1].texCoords = sf::Vector2f((tu + 1) * tileSize.x, tv * tileSize.y);
quad[2].texCoords = sf::Vector2f((tu + 1) * tileSize.x, (tv + 1) * tileSize.y);
quad[3].texCoords = sf::Vector2f(tu * tileSize.x, (tv + 1) * tileSize.y);
}

return true;
}

private:

virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
// apply the transform
states.transform *= getTransform();

// apply the tileset texture
states.texture = &m_tileset;

// draw the vertex array
target.draw(m_vertices, states);
}

sf::VertexArray m_vertices;
sf::Texture m_tileset;
};

int main()
{
// create the window
sf::RenderWindow window(sf::VideoMode(512, 256), "Tilemap");

// define the level with an array of tile indices
const int level[] =
{
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,
1, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
0, 1, 0, 0, 2, 0, 3, 3, 3, 0, 1, 1, 1, 0, 0, 0,
0, 1, 1, 0, 3, 3, 3, 0, 0, 0, 1, 1, 1, 2, 0, 0,
0, 0, 1, 0, 3, 0, 2, 2, 0, 0, 1, 1, 1, 1, 2, 0,
2, 0, 1, 0, 3, 0, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1,
0, 0, 1, 0, 3, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1,
};

// create the tilemap from the level definition
TileMap map;
if (!map.load("tileset.png", sf::Vector2u(32, 32), level, 16, 8 ))
return -1;

// run the main loop
while (window.isOpen())
{
// handle events
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}

// draw the map
window.clear();
window.draw(map);
window.display();
}

return 0;
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (19.01.2016, 06:34)


xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

2

18.01.2016, 20:58

Das laesst sich so schlecht sagen. Ich wuerde empfehlen den Debugger zu benutzen, der wird dir helfen herauszufinden was da los ist. Der Debugger ist ein sehr wichtiges Werkzeug und es lohnt sich definitiv sich etwas Zeit zu nehmen um den Umgang damit zu lernen.

Dies sollte dabei helfen:
https://msdn.microsoft.com/en-us/library/k0k771bt.aspx

3

19.01.2016, 01:39

Wo genau stürzt das Programm denn ab und kannst uns eine Fehlerbeschreibung liefern?
Das würde uns helfen dir zu helfen :D
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige