Während ich an einem neuen Platformer arbeitete, stieß ich auf ein Kollisionsproblem, das auf einem schrägen Platform Sprite in meinem Spiel auftrat. Ich habe versucht, eine Kollisionsmaske auf das schräge Sprite zu implementieren, um diesem umständlichen Fehler hoffentlich entgegenzuwirken. Aber wenn ich das Programm ausführe, tritt dieser Jitter-Fehler auf, wo das Spieler-Sprite auf der geneigten Plattform auf und ab hüpft, und wenn ich versuche, dieses schräge Plattform-Sprite wie jede andere Plattform zu implementieren, wird der Spieler wie ein Rechteck über das Sprite laufen , wenn es wirklich ein dreieckiger Sprite ist. Ich hoffe, dass der obige Text seit, wenn es nicht gemacht wurde, werde ich mehr als glücklich sein, mehr zu erarbeiten, und irgendwelche Vorschläge werden geschätzt :)Pygame Collision Fehlfunktion mit schräger Plattform Sprite
Ich glaube, der Fehler ist in einem der folgenden Codesegmente. Wenn Sie mehr Code sehen möchten, wäre ich mehr als glücklich, mehr zu bieten.
class Platform(pygame.sprite.Sprite):
def __init__(self, id, x, y):
pygame.sprite.Sprite.__init__(self)
self.tile_images = []
self.get_images()
self.id = int(id)
self.image = self.tile_images[self.id]
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
if self.id == 5 or self.id == 4: #4 and 5 are the slanted platform sprites
self.mask = pygame.mask.from_surface(self.image)
Update Abschnitt meiner Spielklasse.
def update(self):
self.player_sprite.update()
if self.player.rect.x <= 0:
self.player.direction = "R"
self.player.rect.x = 0
if self.player.vel.y > 0:
hits = pygame.sprite.spritecollide(self.player, self.platform_list, False)
if hits:
lowest = hits[0]
for hit in hits:
if hit.rect.bottom > lowest.rect.bottom:
lowest = hit
if self.player.rect.y < lowest.rect.centery:
self.player.pos.y = lowest.rect.top + 1
self.player.vel.y = 0
self.player.jumped = False
Player Update Abschnitt, vielleicht ein Schwerkraftfehler?
def update(self):
self.animate()
self.acc.x += self.vel.x * PLAYER_FRICTION
self.vel += self.acc
if abs(self.vel.x) < 0.1:
self.vel.x = 0
self.pos += self.vel + 0.5 * self.acc
self.rect.midbottom = self.pos
self.acc = vec(0, PLAYER_GRAV)