Closed
Description
Environment:
You can get some of this info from the text that pops up in the console when you run a pygame program.
- Operating system (e.g. Windows, Linux(Debian), Linux(Ubuntu), Mac): Windows 10, 22H2
- Python version (e.g. 3.11.1, 3.8.5): 3.11.3
- SDL version (e.g. SDL 2.0.12): 2.26.5
- PyGame version (e.g. 2.0.0.dev10, 1.9.6): 2.3.2
- Relevant hardware (e.g. if reporting a bug about a controller, tell us the brand & name of it): N/A
Current behavior:
When pygame.sprite.spritecollide
, pygame.sprite.spritecollideany
or pygame.sprite.groupcollide
are called with the collided
argument set to pygame.sprite.collide_mask
, mypy is raising an argument type error (arg-type).
Expected behavior:
The three methods can be used with collide_mask
. This issue does not happen when setting the collided
argument to pygame.sprite.collide_circle
or pygame.sprite.collide_rect
.
Steps to reproduce:
- Create a sprite and a sprite group
- Use one of the three methods with the
collided
argument set topygame.sprite.collide_mask
- Run mypy and check output
Test code
import pygame
pygame.init()
class ExampleSprite(pygame.sprite.Sprite):
def __init__(self) -> None:
super().__init__()
self.image = pygame.surface.Surface((100, 100)).convert()
self.rect = self.image.get_rect()
sprite = ExampleSprite()
sprite_group = pygame.sprite.Group(ExampleSprite())
sprite_group_2 = pygame.sprite.Group(ExampleSprite())
pygame.sprite.spritecollideany(sprite, sprite_group, pygame.sprite.collide_rect) # Ok
pygame.sprite.spritecollideany(sprite, sprite_group, pygame.sprite.collide_circle) # Ok
pygame.sprite.spritecollideany(sprite, sprite_group, pygame.sprite.collide_mask) # Mypy error
pygame.sprite.spritecollide(sprite, sprite_group, False, pygame.sprite.collide_rect) # Ok
pygame.sprite.spritecollide(sprite, sprite_group, False, pygame.sprite.collide_circle) # Ok
pygame.sprite.spritecollide(sprite, sprite_group, False, pygame.sprite.collide_mask) # Mypy error
pygame.sprite.groupcollide(sprite_group, sprite_group_2, False, False, pygame.sprite.collide_rect) # Ok
pygame.sprite.groupcollide(sprite_group, sprite_group_2, False, False, pygame.sprite.collide_circle) # Ok
pygame.sprite.groupcollide(sprite_group, sprite_group_2, False, False, pygame.sprite.collide_mask) # Mypy error
Stack trace/error output/other error logs
example.py:18: error: Argument 3 to "spritecollideany" has incompatible type "Callable[[_HasImageAndRect | _HasMaskAndRect, _HasImageAndRect | _HasMaskAndRect], tuple[int, int] | None]"; expected "Callable[[_HasRect, ExampleSprite], bool] | None" [arg-type]
example.py:22: error: Argument 4 to "spritecollide" has incompatible type "Callable[[_HasImageAndRect | _HasMaskAndRect, _HasImageAndRect | _HasMaskAndRect], tuple[int, int] | None]"; expected "Callable[[_HasRect, ExampleSprite], bool] | None" [arg-type]
example.py:26: error: Argument 5 to "groupcollide" has incompatible type "Callable[[_HasImageAndRect | _HasMaskAndRect, _HasImageAndRect | _HasMaskAndRect], tuple[int, int] | None]"; expected "Callable[[ExampleSprite, ExampleSprite], bool] | None" [arg-type]
Found 3 errors in 1 file (checked 1 source file)