2 Funktionen mit derselben Variable aber doch nicht...



  • Na dann ist die Lösung doch einfach: Der Zeiger bombe in der CPlayer-Instanz zeigt auf ein anderes Objekt als der Zeiger bombe in der CGame-Instanz.



  • Hmm und wie mach ich nun das es derselbe zeiger is? irgendwie raff ich das nicht...

    Und wozu hat eine Bombe eine Liste mit Bomben?

    hmm? die liste is ein eigenes Objekt...



  • Flutscherino schrieb:

    hmm? die liste is ein eigenes Objekt...

    Die Liste ist ein nicht statischer Member der Klasse CBomb. Also bekommt jede Instanz dieser Klasse eine solche Liste. Also hat jede deiner Bomben eine Liste mit Bomben. Wozu? Scheint mir nicht so sinnvoll.



  • Eigentlich wollte ich eine Liste für Bomben, nicht das jede Bombe eine liste mit bomben hat, sondern das ganze Programm hat eine liste mit bomben..



  • Das wäre auch sinnvoll, im Gegensatz zu der jetzigen Situation. Warum machst du es nicht so? Findest du keinen Platz? 😃



  • Naja ich bin bisschen am probieren, grad im moment muss ich auf die liste überhaupt zugreifen können bevor ich sie irgendwo fest hinblätter, ein problem nach dem anderen 😉

    irgendwie hab ichs eben immernoch nich raus wie ich die Variable so deklarier das es geht, ohne das ich da gross was an parameter übergeben muss... ich weis schon das ich sie einfach im spiel selber deklariren könnte und parameter schieben, aber genau das will ich nicht, von daher muss ne bessere lösung her 😉

    hättest du ne idee? irgend n tipp? 😕



  • LordJaxom schrieb:

    Na dann ist die Lösung doch einfach: Der Zeiger bombe in der CPlayer-Instanz zeigt auf ein anderes Objekt als der Zeiger bombe in der CGame-Instanz.

    Ich krieg das einfach nicht hin, wie mach ich das beider der Zeiger auf das selbe Objekt zeigen aber von verschiedenen Quellen kommen?



  • Ok, noch ein weiterer versuch, ich hab bis dato alles schön umgeschrieben sodas ich keine Parameter in den Funktionen mehr habe.. aber eben, wie schon vorher geschrieben, dasselbe problem nochmals....
    Irgendwie krieg ich es codlich einfach nicht hin das er den Pointer ausliest den ich gerne hätte... oh mein gott wie mach ich das bloss?

    void CGame::Init()
    {
    
    	gWindow.create(sf::VideoMode(400, 400, 32), "Boom");
    
    	bombmap.Init();
    
    	Run();
    
    }
    
    void CGame::Run()
    {
    
    		bombmap.Draw();
    
    }
    
    void CBombMap::Init()
    {
    
    	game = new CGame;
    
    }
    
    void CBombMap::Draw()
    {
    
    	bWindow = game->getWindow();
    
    // Dashier will einfach nicht dasselbe Window wiedergeben wie ich schon offenhabe... und ich weis einfach nicht wie ich das codlich darstelle damit es klappt :/
    
    }
    
    sf::RenderWindow *CGame::getWindow()
    {
    	return &gWindow;
    }
    
    #pragma once
    #include <SFML\Graphics.hpp>
    #include <SFML\System.hpp>
    
    #include "BombMap.hpp"
    
    class CGame
    {
    
    public:
    	CGame();
    	~CGame();
    	void Init();
    	sf::RenderWindow *getWindow();
    
    private:
    	void Run();
    
    	CBombMap bombmap;
    
    	sf::RenderWindow gWindow;
    
    };
    
    #pragma once
    #include <SFML\Graphics.hpp>
    #include <SFML\System.hpp>
    
    class CGame;
    
    class CBombMap
    {
    
    public:
    	CBombMap();
    	void Init();
    	void Draw();
    	void Load();
    
    private:
    
    	char map[100][100];
    
    	sf::RenderWindow *bWindow;
    
    	CGame *game;
    
    	sf::Sprite SWall, SGround;
    	sf::Texture TWall, TGround;
    
    };
    


  • Über 400 views aber keiner will mir helfen? Ich steck irgendwir seit tagen an dem selben problem und ka wo der wurm drin ist... Kann sich keiner kurz zeit nehnen für mein problemchen? 😞


  • Mod

    Flutscherino schrieb:

    Über 400 views aber keiner will mir helfen? Ich steck irgendwir seit tagen an dem selben problem und ka wo der wurm drin ist... Kann sich keiner kurz zeit nehnen für mein problemchen? 😞

    Na, etwas mehr Geduld am Samstagabend. 🙂

    Ein Problem dürfte hier sein, dass deine letzte Frage ziemlich unklar ist. Du sagst, du bekommst es nicht so hin, wie du es haben willst. Na toll! 🙄 Wenn man dir nun helfen wollte, dann müsste man den ganzen Thread aufmerksam durchforsten, wo wohl steht, was du willst, wenn du es überhaupt schon einmal beschrieben hast. Im ersten Beitrag steht es jedenfalls nicht. So hat der Leser schon zwei ziemlich lange Beiträge gelesen (den ersten und den letzten) und hat immer noch keinen Plan, was gefragt ist. Da werden die meisten Leser, die nicht sowieso schon den ganzen Thread verfolgt haben, einfach abbrechen.

    Daher etwas leserfreundlicher posten wenn man schnell Antworten haben möchte. Präzise Fragestellungen auf den Punkt gebracht, nicht lange schwafeln, Beiträge nicht mit unnötigem Code zumüllen (aber auch nicht zu wenig Code! Siehe dritten Link in meiner Signatur für Tipps). Und auf keinen Fall mitten im Thread das Thema wechseln!



  • Warum zur Hölle speicherst du einen Zeiger auf dein Game in der BombMap? Das ist doch ein schwerer Design-Fehler. Mach dir eine Klasse Game , welcher du ein Element oder besser einen unique_ptr vom Typ BombMap spendierst. BombMap hält ein Feld(kannst dir ja einen Wrapper um ein zweidimensionales Feld machen) aus Bomben. So in etwa:

    class Bomb
    {
        unsigned damage;
    
        public:
    
            explicit Bomb(unsigned d) : damage(d) {}
    };
    
    class BombMap
    {
        typedef vector<vector<unique_ptr<Bomb> > > Tda;
        Tda bombs;
    
        public:
    
            explicit BombMap(Tda const&); //was auch immer du da machen willst
    };
    
    class Game
    {
        unique_ptr<BombMap> map;
    
        public:
    
            explicit Game();
    
            void RenderGame()//Spiel rendern, entweder holst du dir die
                             //map als ganzes oder renderst jedes feld einzeln
                             //hab selbst noch nie mit sfml gearbeitet
    };
    

    Am allerbesten ist es natürlich, wenn du die Fensterhandles/-zeiger getrennt vom Spiel verwaltest und das in irgendeiner Art verbindest. Auf jeden Fall ist dein Design komplett falsch, wenn deine BombMap einen Zeiger auf sowohl das gesamte Spiel, als auch auf das Fenster hält. Der Sinn der OOP ist, dass jede Klasse ihre individuelle Aufgabe erfüllt und alle Aufgaben, die nicht die ihren sind weiter delegiert. Mein Code soll nur eine Art Pseudocode sein, bevor sich hier alles streitet, ob man einen unique_ptr in einem vector speichern soll^^



  • Vielen dank für die antworten, ich dachte eigentlich das meine frage klar ist lol.. Was ich haben wollte ist ein zeiger in der CPlayer klasse die auf das Window in der CGame klasse zeigt zum zeichnen des spielers.. Ich weis shon das ich es auch anders lösen kann, aber mir ging es halt darum es genau so hinzubringen 😉



  • Flutscherino schrieb:

    class CGame
    {
    public:
    //...
    private:
      CBombMap bombmap;
    //...
    };
    
    class CBombMap
    {
    public:
    //...
    private:
      CGame *game;
    //...
    };
    
    void CGame::Init()
    {
      gWindow.create(sf::VideoMode(400, 400, 32), "Boom");
      bombmap.Init();
      Run();
    }
    
    void CBombMap::Init(){
      game = new CGame;
    }
    

    Also: ich sehe das richtig und das ist auch so gewollt:

    • CGame hat ein bombmap member, das wiederum einen Zeiger auf CGame hat.
    • CGame::Init ruft Bombmap::init auf, dass diesen Zeiger auf ein neu erstelltes CGame Objekt umbiegt.

    Das scheint suspekt. Ausserdem riecht es nach Speicherleck und wie die C'tors aussehen würde mich noch interessieren.



  • Naja, ja.. Ich will halt bloss in der CPlayer klasse das fenster abrufen können wo ich in der CGame klasse erstelle.. Nicht mehr ujd nicht weniger 😉



  • Okay und wofür genau brauchst Du das?

    Ich meine, den Spieler sollte doch eigentlich das Fenster gar nicht interessieren, oder? Oder hat das Fenster Renderaufgaben, sodass der Spieler sich dort rendern lassen kann?



  • Flutscherino schrieb:

    Naja, ja.. Ich will halt bloss in der CPlayer klasse das fenster abrufen können wo ich in der CGame klasse erstelle.. Nicht mehr ujd nicht weniger 😉

    Wann weis die CPlayer Klasse wann sie den SPieler zeichnen soll?
    Wenn CGame eine Methode in CPlayer dafür aufruft, dann kann doch CGame einfach das entsprechende Fenster mit übergeben.



  • firefly schrieb:

    Flutscherino schrieb:

    Naja, ja.. Ich will halt bloss in der CPlayer klasse das fenster abrufen können wo ich in der CGame klasse erstelle.. Nicht mehr ujd nicht weniger 😉

    Wann weis die CPlayer Klasse wann sie den SPieler zeichnen soll?
    Wenn CGame eine Methode in CPlayer dafür aufruft, dann kann doch CGame einfach das entsprechende Fenster mit übergeben.

    Es stimmt schon das ich es einfach übergeben könnte, so hab ich das vorher auch gehabt, nur will ich wegkommen von "Ach, ich übergebs doch einfach..." Mentalität 😉

    weil eben vorhin war meine aufrufe immer so ewigs lang ^^



  • Das ist meist nicht so schlimm, aber wenig Abhängigkeiten zu haben ist Gold wert, wenn Du Dein Programm später änderst und/oder erweiterst.



  • Naja ich weis ja eh noch nicht genau WAS ich mache, ich will nur wissen WIE ich es mache 🙂



  • Doof nur, dass Du vor dem WIE das WAS wissen musst 😉


Anmelden zum Antworten