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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

61

15.10.2015, 15:36

Das gibt *noch immer* eine sf::Texture by value zurück. Genau das sollst Du doch eben nicht machen. Erstens nicht als value und zweitens nicht sf::Texture, sondern die neue Spezialklasse, die non-copyable ist.
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]

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

62

15.10.2015, 15:44

Erstens nicht als value
Oh, also dann so:

C-/C++-Quelltext

1
2
3
    case Textures::ASTEROID:
        return m_rTexture;
        break;


zweitens nicht sf::Texture, sondern die neue Spezialklasse, die non-copyable ist.
Aber die Kalsse erbt doch von sf::NonCopyable.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

63

15.10.2015, 15:46

Nein, sf::Texture erbt eben nicht von sf::NonCopyable. Und nein, Du gibst da noch immer einen Value zurück, denn der Rückgabewert einer Methode wird nicht dadurch bestimmt, was in der return-Zeile steht. Davon mal abgesehen ist ein break nach einem return ziemlich überflüssig, es kann ja niemals ausgeführt werden.
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]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

64

15.10.2015, 15:49

Wegen dem break sollte der Compiler eigentlich eine Warnung wegen unerreichbarem Code ausspucken. Noch mal der Hinweis dich noch mal mit Referenzen auseinander zu setzen, was das ist, warum man sowas braucht und wie man damit arbeitet. Das was du hier machst wirkt für mich eher nach raten. Guck dir das einfach noch mal an und wenn der Groschen dann nicht direkt fällt kannst du vermutlich genauer nachfragen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

65

15.10.2015, 16:26

Müsste ich anstatt

C-/C++-Quelltext

1
sf::Texture RessourcenManager::getTexture(Textures textureName)
,

C-/C++-Quelltext

1
sf::Texture RessourcenManager::getTexture(Textures &textureName)

schreiben?

66

15.10.2015, 16:43

Ist das jetzt dein ernst?

Deine Texture Klasse sähe wie folgt aus.

C-/C++-Quelltext

1
2
3
4
class Texture : public sf::Texture, sf::NonCopyable
{
// hier die entsprechenden constructor einfügen
};


Und in deinem Manager nutzt du es wie folgt:

C-/C++-Quelltext

1
Texture& RessourcenManager::getTexture(Textures textureName)

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

67

15.10.2015, 16:45

Ist das jetzt dein ernst?

Deine Texture Klasse sähe wie folgt aus.

C-/C++-Quelltext

1
2
3
4
class Texture : public sf::Texture, sf::NonCopyable
{
// hier die entsprechenden constructor einfügen
};


Und in deinem Manager nutzt du es wie folgt:

C-/C++-Quelltext

1
Texture& RessourcenManager::getTexture(Textures textureName)

Nein, so sieht die Klasse aus:

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
#pragma once

#include "core\include\Game.hpp"

#include <string>

class RessourcenManager : public sf::NonCopyable
{
public:
    RessourcenManager();

    // Die ganzen Texturen
    enum Textures
    {
        ASTEROID = 0,
        PLAYER = 1

    };

    sf::Texture getTexture(Textures &textureName);

private:
    void loadAsteroidTextur();

private:
    sf::Texture mAsteroidTexture;

    // Referenz auf die Textur
    sf::Texture &m_rTexture = mAsteroidTexture;

};


Und so die .cpp:

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
#include "include\RessourcenManger.hpp"

RessourcenManager::RessourcenManager()
{
    loadAsteroidTextur();
}


void RessourcenManager::loadAsteroidTextur()
{
    if (!m_rTexture.loadFromFile("assets/textures/player/Raumschiff.png"))
        throw std::runtime_error("Konnte die Textur nicht laden - AsteroidManger.cpp");

}


sf::Texture RessourcenManager::getTexture(Textures &textureName)
{
    switch (textureName)
    {
    case Textures::ASTEROID:
        return m_rTexture;

    case Textures::PLAYER:
        break;

    default:
        throw std::runtime_error("Konnte die Textur nicht laden - RessourcenManager.cpp");

    }

}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »cojo2015« (15.10.2015, 16:56)


Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

68

15.10.2015, 16:55

Bitte lies ein Buch. Die Tatsache, dass dieser Thread hier inzwischen 7 Seiten bei einem so lächerlichen Problem erreicht hat, zeigt, dass du die Grundlagen bei weitem noch nicht gut genug beherrschst, um in die 2D Programmierung einzusteigen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

69

15.10.2015, 17:49

Ich würde jetzt einfach mal sagen solide be­ra­tungs­re­sis­tent!

Es kann doch nicht so schwer sein, bei Google zu recherchieren, was eine Referenz ist und wie man diese Zurück gibt.
Mal davon abgesehen, dass das eigentlich Basics sind.

Gefühlt werden hier nacheinander deine ganzen Probleme abgearbeitet, die immer dann auftreten wenn du eine neue Klasse erstellt hast (Das gilt auch Thread übergreifend).

Nimm dir bitte die Ratschläge der anderen zu herzen!
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

70

15.10.2015, 17:58

Ich würde jetzt einfach mal sagen solide be­ra­tungs­re­sis­tent!

Es kann doch nicht so schwer sein, bei Google zu recherchieren, was eine Referenz ist und wie man diese Zurück gibt.
Mal davon abgesehen, dass das eigentlich Basics sind.

Gefühlt werden hier nacheinander deine ganzen Probleme abgearbeitet, die immer dann auftreten wenn du eine neue Klasse erstellt hast (Das gilt auch Thread übergreifend).

Nimm dir bitte die Ratschläge der anderen zu herzen!

Genau das habe ich schon gemacht. Ich habe in meinem Grundlagenbuch gelsen, aber dort wird nicht besprochen, wie man Referenzen zurückgibt. Google tue ich natürlich. Di Ratschläge (versuche) ich natürlich zu Herzen zu nehmen, aber ich bin anscheinend nicht zu doof, sonder zu unfähig...

EDIT: Habe etwas gefunden. Meint ihr so etwas in der Richtung:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class Test {

public:
   const std::string &getValue() const { return _value; }

private:
   std::string _value;

};

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »cojo2015« (15.10.2015, 18:09)


Werbeanzeige