Kleines logisches Problem in meinem Programm.



  • das sprite wird ohne fehler geladen, falls du das meinst. wenn ich nur eines von beiden zeichnen lasse funktioniert das ja prima.



  • schreib mal das

    std::cout << "Sprites.size()=" << sprites.size() << std::endl;

    als erste zeile in void Barkanoid::Application::run()
    (include <iostream> nicht vergessen

    wuerd mich interessieren ob da dann immer 0 steht

    da naechste checkpunkt waer dann in der loop
    if(sprites[i]->visible()){
    //kommt er jede loop daher?
    sprites[i]->draw();
    }

    und im sprite

    if(m_visible)
    {
    //macht er das jede loop fuer jede was gezeichnet werden soll?
    SDL_BlitSurface(m_bitmap,&m_src,m_screen,&m_position);
    }



  • Sorry dAhA, dass ich deine Vorschläge ignoriere, jedoch liegt der Fehler sicher woanders.

    Es ist langsam zum verzweifeln. Folgende Anwendungsfälle funktionieren wenn die Taste "Pfeiltaste nach oben" gedrückt wurde: [code jetzt leicht abgeändert]

    Anwendungsfall 1:

    while(SDL_PollEvent(&event))
    		{
    
    			switch(event.key.keysym.sym)
    			{
    			case SDLK_UP:
    
    				std::cout<<"lolol"; //Funktioniert!
    				break;
    
    			case SDLK_DOWN:
    
    				break;
    			case SDLK_ESCAPE:
    				return EXIT_PROGRAM;
    				break;
    			}
    
    			switch(event.type)
    			{
    			case SDL_QUIT:
    				return EXIT_PROGRAM;
    				break;
    			}
    		}
    

    AnwFall 2:

    //bissel gekürzt
    
    switch(event.key.keysym.sym)
    			{
    			case SDLK_UP:
    
    				return EXIT_PROGRAM; //funzt
    				break;
    
    			case SDLK_DOWN:
    
    				break;
    			case SDLK_ESCAPE:
    				return EXIT_PROGRAM;
    				break;
    			}
    

    Aber vollkommen unlogischerweise funktioniert folgendes nicht:

    switch(event.key.keysym.sym)
    			{
    			case SDLK_UP:
    
    				newGame->visibility(false);
    				break;
    
    			case SDLK_DOWN:
    
    				break;
    			case SDLK_ESCAPE:
    				return EXIT_PROGRAM;
    				break;
    			}
    

    wenn ich jedoch schlicht und einfach irgendwo anders an der stelle des codes die sichtbarkeit ausstelle, verschwindet das sprite wie es soll.

    langsam bin ich echt ratlos 😕 debugger gibt auch keine anderen werde als erwartet.


  • Mod

    TravisG schrieb:

    if(keys[SDLK_UP] || keys[SDLK_DOWN])
    			newGameIsSelected = !newGameIsSelected;
    

    ist das dauernde flippen absicht?



  • TravisG schrieb:

    Sorry dAhA, dass ich deine Vorschläge ignoriere, jedoch liegt der Fehler sicher woanders.

    naja, dann wuensch ich dir weiterhin viel spass beim fehler suchen

    edit:
    ich finds lustig

    TravisG schrieb:

    Es ist langsam zum verzweifeln.

    TravisG schrieb:

    langsam bin ich echt ratlos

    bei mir geht dein prog mittlerweile, gratulation, ist damit auf mehreren plattformen lauffaehig, einmal is neues spiel hell, einmal dunkel..



  • @TravisG: Lern einfach mal den Debugger benutzen. f'`8k

    Autocogito

    Gruß, TGGC (making great games since 1992)



  • daHa schrieb:

    TravisG schrieb:

    Sorry dAhA, dass ich deine Vorschläge ignoriere, jedoch liegt der Fehler sicher woanders.

    naja, dann wuensch ich dir weiterhin viel spass beim fehler suchen

    edit:
    ich finds lustig

    TravisG schrieb:

    Es ist langsam zum verzweifeln.

    TravisG schrieb:

    langsam bin ich echt ratlos

    bei mir geht dein prog mittlerweile, gratulation, ist damit auf mehreren plattformen lauffaehig, einmal is neues spiel hell, einmal dunkel..

    kein grund gleich sauer zu werden, jeder kann sich ja mal irren. ich glaub ich weiss jetzt worauf du hinaus wolltest, hab das wohl irgendwie überlesen. da du wohl hier kein bock mehr hast versuch ich jetzt rauszufinden wie ich den fehler mit sprite.size() = 0 behebe.

    edit:

    TravisG schrieb:

    jeder kann sich ja mal irren

    sorry, bis auf tggc natürlich.



  • bin und war nicht sauer

    vielleich hilft dir das zu einem erfolgerlebnis

    constructor
    destructor
    copyconstructor
    zuweisungsoperator
    haengt wie mit
    variable
    referenz
    pointer
    zusammen, insbesondere, bezug zu deinem problem, wenn mans an funktionen uebergibt

    funktionen die behauten etwas zurueckzugeben sollten das auch tun
    zuerst wild drauflos coden und sich um speicherfreigaben dann zu kuemmern ist ganz schlecht
    compiler warnings sollte man ernst nehemn



  • daHa schrieb:

    bin und war nicht sauer

    vielleich hilft dir das zu einem erfolgerlebnis

    constructor
    destructor
    copyconstructor
    zuweisungsoperator
    haengt wie mit
    variable
    referenz
    pointer
    zusammen, insbesondere, bezug zu deinem problem, wenn mans an funktionen uebergibt

    danke, im moment versteh ich noch nicht was du damit sagen willst, aber vielleicht find ich das noch raus 🙂



  • hm.. so wie es aussieht wird das Objekt der Klasse GS_Mainmenu irgendwo gelöscht / neu erstellt oder ich habe irgendwas anderes verpasst. nach deinem tip probierte ich mal das mit einem counter aus:

    int run (t Application)
    {
    //...
    ++counter;
    std::cout<<"counter: "<<counter<<std::endl;
    
    //..
    }
    

    und es wird tatsächlich immer 1 ausgegeben.

    jetzt muss ich noch rausfinden wo das speicherproblem entsteht, auf den ersten blick sehe ich hier nichts weiter.



  • Vielleicht jetzt einfach mal an den richtigen Stellen die Breakpoints setzen? f'`8k

    Autocogito

    Gruß, TGGC (making great games since 1992)



  • int run (t Application)

    was passiert da?

    constructor
    destructor
    copyconstructor
    zuweisungsoperator

    und warum?
    und wie koenntest da was beeinflussen?

    wennst das hast bist einen wirklichen schritt weiter gekommen, dann fehlt dir nur mehr sauberes aufraeumen, und aja, das mit den rueckgabewerten von funktionen

    so nutz man optimal einen regentag



  • ja, das problem ist endlich gelöst. jetzt wo ich es entdeckt habe erscheint es mir doch ziemlich doof, so etwas zu übersehen. danke für die hilfe


Anmelden zum Antworten