[英]the collision function is not working properly
有一个“玩家”(精灵)和一组墙(other_group),也是精灵。 创建具有不同 x/y 坐标的墙时, sprite.spritecollide 方法无法正常工作。 水平方向一切正常,垂直方向玩家只是掉到墙上。 全码
class Tile(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__(other_group)
self.image = wall_images
self.rect = self.image.get_rect().move(x, y)
# player
class Player(pygame.sprite.Sprite):
def __init__(self, speed, x, y):
super().__init__(player_group)
self.speed = speed
self.frames = []
self.cur_frame = 0
self.image = animation_down[0]
self.rect = self.image.get_rect().move(x, y)
self.rect.x = x
self.rect.y = y
def possibility_of_movement(self, directory_of_movement):
if directory_of_movement == 'right':
tester = Player(self.speed, self.rect.x + self.speed, self.rect.y)
elif directory_of_movement == 'left':
tester = Player(self.speed, self.rect.x - self.speed, self.rect.y)
elif directory_of_movement == 'up':
tester = Player(self.speed, self.rect.y - self.speed, self.rect.x)
else:
tester = Player(self.speed, self.rect.y + self.speed, self.rect.x)
if pygame.sprite.spritecollide(tester, other_group, dokill=False, collided=pygame.sprite.collide_rect_ratio(0.7)):
tester.kill()
return False
else:
return True
tile2 = Tile(264, 264)
tile3 = Tile(264+64, 264)
tile4 = Tile(446, 446)
tile4 = Tile(382, 382)
while running:
if keys[pygame.K_LEFT] and pos_x > 5 and player.possibility_of_movement('left'):
pos_x -= player.speed
left = True
right = False
down = False
up = False
我无法测试它,但我认为所有问题都是因为您在创建tester
时以错误的顺序设置了值 - 它会检查与错误位置(没有任何墙壁的位置)的碰撞并且它不会停止。
对于up
(和类似的down
)你设置y-speed,x
但你必须设置x, y-speed
Player()
中值的正确顺序
elif directory_of_movement == 'up':
tester = Player(self.speed, self.rect.x, self.rect.y - self.speed)
else:
tester = Player(self.speed, self.rect.x, self.rect.y + self.speed)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.