SDL Frame-time/ Probleme nach "lag´s" mit Kollisionen



  • Hallo...

    Nach einem kurzem "Lag", der meine Framerate durcheinander brachte, befanden sich alle Spielfiguren in ansonsten nicht betretbaren bereichen(quasi in Wänden).

    Das heißt:

    Die Reichweite, die diese Figuren theoretisch in der abgelaufen Zeit erreichen können, stimmte, doch durch die Frames die mir fehlten, gingen auch Kollisionsabfragen unter.

    Ist es nun nötig, die maximale Schrittlänge zusätzlich zu begrenzen?

    Eine Kollisionsabfrage mit der zu erreichenden Entfernung wäre imo Unsinn, da es dann möglich wäre, daß die Figur zwar "10 m" vor der Wand steht, das Ziel aber "11 m" entfernt ist und die Figur damit garnicht mehr läuft, obwohl sie noch "10 m" hätte. (Was in dem Fall allerdings besser wäre)

    // So in etwa sieht meine Kollisionsabfrage aus...
    //
    // Hier: Abfrage eines Quaders von unten, Figur oben
    
    bool CheckCollision(SDL_Rect rect,direction dir){
    
    	for (int i=0;i<MAP_H;i++){
    		for (int j=0;j<MAP_W;j++){
    			if (c_tilemap[i][j].collision_field==1){
    				if (dir==d_up){
    
    					if (rect.y<c_tilemap[i][j].m_rect.y+c_tilemap[i][j].m_rect.h&&
    						rect.y+rect.w>c_tilemap[i][j].m_rect.y&&
    						rect.x+rect.w>c_tilemap[i][j].m_rect.x&&
    						rect.x<c_tilemap[i][j].m_rect.x+TILE_W){
    
    						return 1;
    					}
    				}
                }
            }
        }
    }
    

    Wenn ich mir das so ansehe, bezweifle ich, daß es eine gute Lösung ist.
    Zumindest läuft es, bis auf das "Lag-Problem", problemfrei 😉

    /bin/verwirrt



  • Der vermeintliche "lag" war vermutlich ein am falschen Ort vergessener Timer-Reset...


Anmelden zum Antworten