Comment avez les vieux jeux ne la détection de collision avec les murs, les planchers et les plafonds?

J'ai lu à propos de la détection de collision dans les jeux sur stackoverflow et d'autres sites. Beaucoup d'entre eux parler de Bsp, la délimitation de points de suspension, l'intégration, etc. Cependant, sur la NES, ils ont réussi à faire le plancher et le mur de la détection de collision dans les jeux et j'ai du mal à croire qu'ils l'ont fait de nombreux calculs pour détecter la paroi de collisions.

Je suppose que ma question est, étant donné un niveau constitué que de tuiles, comment ont-ils de détecter les collisions avec les murs et les planchers dans les jeux comme Mario et Megaman qui avait peu de puissance de traitement?

  • Ont-ils suivre la trajectoire de mouvement et de déterminer le plus proche de la connexion tuile? (un peu de recherche) (à priori)
  • Ont-ils déterminer une collision avec le sol et de déterminer la meilleure façon de régler le personnage? (a posteriori) C'est risqué avec la variable échéances, vous pouvez sauter à travers un carreau si vous avez été assez rapide. Bien que je suppose que jeux NES échéances ont été synchronisés avec la tv à la fréquence de rafraîchissement.
  • La gravité est toujours touchant de votre personnage lorsque vous êtes sur le terrain? Ou avez-vous juste 'désactiver' quand vous êtes déterminé à marcher sur une tuile? Quel sujet lorsque vous marcher sur un bord de la falaise? Vous auriez besoin d'une sorte de moyen de déterminer tuiles en-dessous de vous.
  • Si vous avez entré en collision avec une tuile, serait que tu viens de trouver le bord de la tuile et de déplacer votre personnage sur le côté de celui-ci (selon le sens de déplacement)?
  • qu'en pente tuiles comme dans super metroid et mario?
  • Ce sujet de "plates-formes", où vous pouvez sauter à travers le bas et de la terre sur le dessus. Comment voulez-vous gérer les collisions avec ces tuiles si vous le faisiez 'a posteriori'?

J'ai écrit certains de collision code qui est essentiellement 'a priori', comme il cherche la première tuile de vous frapper dans une certaine direction. Je me demandais simplement si il ya une meilleure façon. (juste après le fait de la détection de collision au lieu peut-être)

par exemple, le code de vérification pour les carreaux de collisions en mouvement à la baisse (je check vert puis un mouvement horizontal):

  def tile_search_down(self, char, level):
        y_off = char.vert_speed
        assert y_off > 0

        # t_ are tile coordintes
        # must be int.. since we're adding to it.
        t_upper_edge_y = int( math.ceil((char.y+char.h) /self.tile_height ) ) #lowest edge
        while (t_upper_edge_y*self.tile_height) < (char.y+char.h+y_off): # lowest edge + offset

            t_upper_edge_x = int( math.floor(char.x/self.tile_width) )
            while (t_upper_edge_x*self.tile_width) < (char.x+char.w):

                t_x = t_upper_edge_x
                t_y = t_upper_edge_y 
                if self.is_tile_top_solid(t_x, t_y, plane):
                    char.y = t_y*self.tile_height - char.h
                    char.vert_speed = 0.0
                    char.on_ground = True
                    return

                t_upper_edge_x += 1
            t_upper_edge_y += 1

        char.y += y_off