【发布时间】:2019-05-31 19:33:52
【问题描述】:
我正在用 pygame 制作游戏。我的主要问题是如何在一类中实现 pygame 碰撞。我的游戏中有很多碰撞检测,我可以在一类或类似的东西中少做些。还有一些群体冲突。
还做了很多游戏的碰撞效果优化(不是我说的3A游戏)。
def update(self):
self.all_sprites.update()
self.score += self.start_time
collision = pygame.sprite.spritecollide(self.player, self.platforms, False)
collideGroup = pygame.sprite.groupcollide(self.bullet_list, self.enemyRocket, True, True)
collideGroupPlat = pygame.sprite.groupcollide(self.bullet_list, self.platforms, True, False)
collide = pygame.sprite.spritecollide(self.player, self.enemyRocket, False)
collideWithEND = pygame.sprite.spritecollide(self.player, self.endLevel, False)
collideWithFuel = pygame.sprite.groupcollide(self.bullet_list, self.fuel, True, True)
if collision:
self.player_health -= 1
self.new()
if collide:
self.player_health -= 1
self.new()
if collideGroup:
self.score += 10
if collideWithEND:
self.level += 1
if collideWithFuel:
self.fuelBar += 10
我应该在 sprite 类中添加一些函数来检测碰撞,还是应该打开另一个类来检测碰撞。 这是我的怨恨课。
class Player(pygame.sprite.Sprite):
def __init__(self, img, pos_x, pos_y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(os.path.join('images', img)).convert()
self.image.convert_alpha()
self.image.set_colorkey(ALPHA)
self.rect = self.image.get_rect()
self.rect.center = (pos_x, pos_y)
self.vx = 0
self.vy = 0
def update(self):
self.vx = 0
self.vy = 0
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
self.vy = -5
if self.rect.y < 0:
self.rect.y += 5
if keys[pygame.K_DOWN]:
self.vy = 3
if keys[pygame.K_RIGHT]:
self.vx = 3
if self.rect.x > (WIDTH-58):
self.rect.x -= 5
if keys[pygame.K_LEFT]:
self.vx = -5
if self.rect.x < 0:
self.rect.x += 5
self.rect.x += self.vx
self.rect.y += self.vy
class Bullet(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((5, 3))
self.image.fill(YELLOW)
self.rect = self.image.get_rect()
self.vx = 0
def update(self):
keys = pygame.key.get_pressed()
self.rect.x += self.vx
if self.rect.x > WIDTH:
self.kill()
if keys[pygame.K_SPACE]:
self.vx = 2
self.rect.x += self.vx
【问题讨论】:
-
是的。这样做是有可能的。
-
可以用元组和
dicts 清理它,但这并不能使它更好地面向对象。如果你展示你的类(我们的玩家类和敌人火箭类将是最有用的)它会更容易帮助你。你的类对象应该有碰撞方法来处理它们的逻辑。 -
在这里我添加了我的精灵类
标签: python python-3.x pygame