试图在 pygame 中创建一个 "solid" 块
Trying to make a "solid" block in pygame
所以我希望我的玩家无法穿过方块,但它会传送到另一边,知道为什么吗?这是我的代码:
def update(self, collidable):
self.rect.x += self.hspeed
collision_list = pygame.sprite.spritecollide(self, collidable, False)
for collided_object in collision_list:
if (self.hspeed > 0):
# right direction
self.rect.right = collided_object.rect.left
elif (self.hspeed < 0):
# left direction
self.rect.left = collided_object.rect.right
self.rect.y += self.vspeed
collision_list = pygame.sprite.spritecollide(self, collidable, False)
for collided_object in collision_list:
if (self.vspeed > 0):
# down direction
self.rect.bottom = collided_object.rect.up
elif (self.vspeed < 0):
# up direction
self.rect.top = collided_object.rect.bottom
提前致谢!
对最后的回答感到抱歉。这是应该修复您的代码的一个。
新代码是:
def update(self, collidable):
self.rect.x += self.hspeed
collision_list = pygame.sprite.spritecollide(self, collidable, False)
for collided_object in collision_list:
if (self.hspeed > 0):
# right direction
self.rect.left = collided_object.rect.right # rect.right and rect.left swapped
elif (self.hspeed < 0):
# left direction
self.rect.right = collided_object.rect.left # rect.right and rect.left swapped
self.rect.y += self.vspeed
collision_list = pygame.sprite.spritecollide(self, collidable, False)
for collided_object in collision_list:
if (self.vspeed > 0):
# down direction
self.rect.bottom = collided_object.rect.up
elif (self.vspeed < 0):
# up direction
self.rect.top = collided_object.rect.bottom
我更改的行在 self.hspeed 碰撞中。当你击中一侧时,你不是坚持到那一侧,而是锁定到立方体的另一侧。简而言之,我交换了 rect.left 和 rect.right,但您可以交换 > 0 和 < 0,但我想将其保持在正确的位置,这样看起来更好...
所以我希望我的玩家无法穿过方块,但它会传送到另一边,知道为什么吗?这是我的代码:
def update(self, collidable):
self.rect.x += self.hspeed
collision_list = pygame.sprite.spritecollide(self, collidable, False)
for collided_object in collision_list:
if (self.hspeed > 0):
# right direction
self.rect.right = collided_object.rect.left
elif (self.hspeed < 0):
# left direction
self.rect.left = collided_object.rect.right
self.rect.y += self.vspeed
collision_list = pygame.sprite.spritecollide(self, collidable, False)
for collided_object in collision_list:
if (self.vspeed > 0):
# down direction
self.rect.bottom = collided_object.rect.up
elif (self.vspeed < 0):
# up direction
self.rect.top = collided_object.rect.bottom
提前致谢!
对最后的回答感到抱歉。这是应该修复您的代码的一个。 新代码是:
def update(self, collidable):
self.rect.x += self.hspeed
collision_list = pygame.sprite.spritecollide(self, collidable, False)
for collided_object in collision_list:
if (self.hspeed > 0):
# right direction
self.rect.left = collided_object.rect.right # rect.right and rect.left swapped
elif (self.hspeed < 0):
# left direction
self.rect.right = collided_object.rect.left # rect.right and rect.left swapped
self.rect.y += self.vspeed
collision_list = pygame.sprite.spritecollide(self, collidable, False)
for collided_object in collision_list:
if (self.vspeed > 0):
# down direction
self.rect.bottom = collided_object.rect.up
elif (self.vspeed < 0):
# up direction
self.rect.top = collided_object.rect.bottom
我更改的行在 self.hspeed 碰撞中。当你击中一侧时,你不是坚持到那一侧,而是锁定到立方体的另一侧。简而言之,我交换了 rect.left 和 rect.right,但您可以交换 > 0 和 < 0,但我想将其保持在正确的位置,这样看起来更好...