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

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

1

19.11.2012, 23:32

SFML sprites weiss

N'abend,

In einem meiner "Spiele" kommt es derzeit zu einem, wie ich finde interessantem Fehler.

Hier erstelle und Update ich den Player:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Player::Player(sf::VideoMode &vMode)
{
    PlayerShipTexture.loadFromFile("PlayerTest.png");
    PlayerShipSprite.setTexture(PlayerShipTexture);
    PlayerShipSprite.setPosition(sf::Vector2f(vMode.width /2,vMode.height -50));    //Texture,Sprite und Position festlegen
[...]
}

void Player::Update(sf::RenderWindow &window,float &deltaTime, float &speed)
{
[...]
    PlayerShipSprite.setPosition(PlayerPosition);   //Update PlayerPosition and Draw Player
    window.draw(this->PlayerShipSprite);
}


Das funktioniert einwandfrei, Spieler wird immer mit Textur gezeichnet.

Hier erstelle ich einen neuen Asteroid und füge ihn der Liste hinzu und Update ihn.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Asteroid::Asteroid(sf::Vector2f &scale, int &position)
{
    AsteroidTexture.loadFromFile("Asteroid.png");
    AsteroidSprite.setTexture(AsteroidTexture);
    AsteroidSprite.setScale(scale);
[...]
}

void Asteroid::Update(sf::Vector2f &position, sf::Vector2f &velocity, float &deltaTime, sf::RenderWindow &window)
{
    position += deltaTime * velocity;
    this->AsteroidSprite.setPosition(this->Position);
    //this->AsteroidSprite.setTexture(this->AsteroidTexture);
    window.draw(this->AsteroidSprite);

}


Lasse ich die unten auskommentierte Zeile so,werden zwar alle Asteroiden gezeichnet, ABER ohne Textur, d.h. es wird einfach ein weisses Viereck gezeichnet, welches die korrekte Grösse und Position hat.
Füge ich die Zeile wieder normal ein, werden zwar alle Sachen richtig gezeichnet, aber ich möchte auf keinen Fall für jedes Frame die Textur neu festlgegen, dass mag ja bei diesem kleinem Projekt klappen, aber man will ja auch mal hoch hinaus ;).

Sehe ich einfach nur den Wald vor lauter Bäumen nicht?!?!, braucht ihr mehr Infos oder könnt mir helfen?

([...] bedeutet unwichtige Zeilen wurden ausgelassen)

MFG,
ERROR

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

2

20.11.2012, 01:19

Also können wir annhemen, dass die Texturen Member Variabeln sind?

Weisse Rechtecke/keine Texturen kommen immer dann vor, wenn die Texture Objekte nicht mehr existieren.
Die Texture Objekte müssen so lange am'Leben' bleiben, wie sie auch gebraucht werden.

Wenn nun also deine Texturen Member Variabeln sind, sollte das gehen.

Ein weiteres Problem kann aber auftretten, wenn die Objekte umher kopiert werden oder sonst fragliche Dinge damit angestellt werden. Leider hat man von deinen kurzen ausschnitten nicht genug Informationen um etwas konkreter zu werden.
Am Besten wäre ein minimaler und kompletter Code, welcher das Problem auch hat. ;)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

20.11.2012, 07:01

Ich tippe auf Copy-Konstrukoren, wer wettet mit? :D
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

4

20.11.2012, 11:35

Ich tippe auf Copy-Konstrukoren, wer wettet mit? :D
Bin dabei! ;)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

5

20.11.2012, 14:13

So, hier dann nochmal der einzige andere Zugriff auf die Liste der Asteroiden.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
    std::list<Asteroid> Asteroids;
    std::list<Asteroid>::iterator asteroidListIt;
[...]
        for(asteroidListIt = Asteroids.begin(); asteroidListIt != Asteroids.end(); asteroidListIt++)
        {
            asteroidListIt->Update(asteroidListIt->Position, asteroidListIt->Velocity, deltaTime, Window);
            Window.draw(asteroidListIt->AsteroidSprite);
        }


Also Liste wird erstellt und in der for() wird geupdatet.


Das sind jetzt insgesamt alle Zeilen, in denen die Liste und die Klasse benutzt wird.
Bitte helfen, irgendwie seh ich wirklich den Wald vor lauter Bäumen nicht.

6

20.11.2012, 15:37

Schau dir mal diesen Thread an: SFML 2.0 keine Textur? ;)

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

7

20.11.2012, 21:45

Danke Leute, habe mich grade nochmal dran gesetzt und hat mit eurer Hilfe geklappt!
Die Sektkorken knallen schon ;)

Vielen Dank nochmal,
ERROR

Werbeanzeige

Ähnliche Themen