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

30.08.2010, 18:00

collision SFML

hallo

hab schon einige themen hier durchgelesen aber nichts gefunden.
ich will einfach nur prüfen, ob sich 2 sprites in meinem programm überschneiden. mit
PixelPerfectTest etc. habe ich es bereits probiert, da kommen seltsame fehler, ich würde zu viele klammern setzen usw.. komische sache.
jedenfalls war mein erster gedanke ja sowieso, die abfrage wie bei der SDL einfach selbst zu schreiben. allerdings kann ich nirgends die funktionen oder parameter finden, die die x-, y- koordinaten beschreiben und auch nicht die größe (w und h).

und wenn ich hier schonmal en themaöffne, kann ich auch gleich noch fragen, ob jemand hierzu ne lösung hat?

Zitat

Failed to load Image "Data/player.bmp" . Reason: Unable to open File
Das kommt immer, wenn ich ein sprite mit einem bild füllen will.

C-/C++-Quelltext

1
2
3
4
sf::Sprite player1;
sf::Image bild;
    bild.LoadFromFile("Data/player1.bmp");
    player1.SetImage(bild);


Habs schon mit sämtlichen Dateitypen probiert, auch schon ohne den Data-Ordner (also einfach in den Projektordner gestopft).
Schließlich bin ich dann einfach auf die rechteckigen sprites, die man mit der sfml erzeugen kann, umgestiegen (kam in meinem beispiel aufs gleiche raus^^).

danke schonmal

2

30.08.2010, 18:11

Bild:
Das sollte eigentlich funktionieren. Bist Du dir wirklich sicher, dass die Datei genau gleich heißt und wirklich im relativen Pfad ist? Der Projektordner ist eventuell nicht der richtige Platz. Visual Studio erstellt meist einen Projektordner (z.B. SFML-Spiel) - der ist dann für die Projektmappe gedacht. In diesem Ordner ist dann noch ein Ordner mit dem eigentlichen Projekt - dort muss das Bild dann rein.

Kollision:
Du kannst das, wie erwähnt, einfach mit der gleichen Funktionsweise wie mit der SDL machen. Die Werte, die Du brauchst, bekommst Du durch…
sf:: Sprite.GetPosition(); -> Du bekommst einen Vektor mit den x und y Koordinaten zurück
und
sf:: Sprite.GetImage().GetWidth()
sf:: Sprite.GetImage().GetHeight()
Sprich vom Bild (sf::Image) direkt.

Das wäre eigentlich alles, was Du brauchst.

3

30.08.2010, 18:11

EDIT: Kam irgendwie ein Fehler mit der Datenbank und dann war der Beitrag zweimal da...

4

30.08.2010, 18:23

Hallo bewa,

die sf:: Sprite Klasse hat eine Funktion GetPosition(), die ein Objekt der Klasse Vector2f zurückgibt. Die Klasse hält die beiden Membervariablen x und y. Die die Koordinaten deines Sprites darstellen.
Genauso gibt es für die Größe deines Sprites eine Funktion GetSize(), die ebenso ein Objekt der Vector2f Klasse zurückgibt mit gleichnamigen Membervariablen. Nur das diese nun als Breite und Höhe zu interpretieren sind.

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
sf::Sprite MeinSprite;

// SetImage() etc.

// Position
std::cout << "Mein Sprite befindet sich an folgender Position: x = " << MeinSprite.GetPosition().x << " und y = " << MeinSprite.GetPosition().y << std::endl;

// Größe (alternative: mehrere Funktionsaufrufe verhindern und Vector2f Objekt einmal zwischenspeichern)
sf::Vector2f SpriteGroesse = MeinSprite.GetSize();
std::cout << "Mein Sprite hat folgende Abmessungen: Breite = " << SpriteGroesse.x << " und Hoehe = " << SpriteGroesse.y << std::endl;



Zu deinem zweiten Problem:

Hast du bedacht, dass dein Programm immer im Projektverzeichnis selbst ausgeführt wird? Nicht im Unterordner, in dem die .exe liegt?

EDIT: Huch, zu langsam... Luinechor war schneller. Aber den Weg über GetImage() kannst du dir sparen, geht auch mit GetSize() direkt. ;)

Gruß
SaRu_

5

30.08.2010, 18:24

beides gelöst, danke ;)

6

30.08.2010, 21:11

beim text habe ich im grunde das selbe problem:

Zitat

failed to load font "arial.ttf" <cannot open resource>
wobei ich auch sagen muss, dass ich garkeine arial.ttf habe :D
wo kriege ich die legal und kostenlos her?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

7

30.08.2010, 21:12

C:\Windows\Fonts und dann einfach rüber ziehen ;)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

8

30.08.2010, 21:15

danke
nächste frage.. : wie mache ich in visual 2008 einen ordner, wo alles nötige drin ist, und eine exe aus dem code? :D

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

9

30.08.2010, 21:23

danke
nächste frage.. : wie mache ich in visual 2008 einen ordner, wo alles nötige drin ist

Neues Projekt erstellen vielleicht?

und eine exe aus dem code? :D

Compilieren mit einen geeigneten Compiler? Oder versteh' ich deine Frage falsch?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

10

30.08.2010, 21:31

ich glaube total.. ich wollte grad nem freund schicken was ich bisher gecodet habe, das ging aber nicht.. ihm fehlte irgendeine .dll. ich habe aber auch nur den debug ordner geschickt, weil das andre schon so relativ groß wäre..
außerdem brächte ich auch noch eine funktion, um ein float in den string zu schreiben. ich glaub ich hol grad alles nach, wa ich tutorial nicht beschrieben wurde.. ^^

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »bewa« (30.08.2010, 21:38)


Werbeanzeige

Ähnliche Themen