0
지금 그룹에서 스프라이트를 삭제하는 두 가지 작업을 수행하려고합니다. 두 가지를 수행하고 싶습니다.그룹에서 단수 스프라이트를 제거하는 데 문제가 있음
- 먼저 총알과 파워 업이 있습니다. 내 총알이 내 파워 업과 충돌하면, 나는 그 특정 탄환과 파워 업을 제거하기를 원해.
- 둘째, 내 파워 업이 일정 시간이 지나도 안타를 맞지 않으면 제거해야합니다.
목표 1의 문제 : 탄이 충돌하여 전원이 켜지면 내 모든 글 머리 기호가 멈 춥니 다.
목표 2의 문제점 : 한 번에 하나의 파워 업이 아닌 모든 파워 업이 제거됩니다. 여기
class GameScreen(SceneBase):
def __init__(self):
SceneBase.__init__(self)
self.my_font = pygame.font.SysFont("Arial", 50)
self.bullets_group = pygame.sprite.Group()
self.powerup_group = pygame.sprite.Group()
self.player_paddle = classes.PlayerPaddle(screen_size, 20, 100, "naruto.png", self.bullets_group)
self.ai_paddle = classes.AIPaddle(screen_size, 20, 100, "naruto.png")
self.pong = classes.Pong(screen_size, 20, 20, "pokeball.png")
self.now1 = pygame.time.get_ticks()
self.now2 = pygame.time.get_ticks()
def ProcessInput(self, events, pressed_keys):
for event in events:
self.player_paddle.handle_event(event)
def Update(self):
self.player_paddle.update()
self.ai_paddle.update(self.pong, self.player_paddle)
self.pong.update(self.player_paddle, self.ai_paddle)
for powerup in self.powerup_group:
self.bullets_group.update(powerup)
self.powerup_group.update()
# if someone reaches a score of 2, then exit the game
if self.player_paddle.score == 2 or self.ai_paddle.score == 2:
SceneBase.is_game_over = True
self.SwitchToScene(GameOverScreen())
time_difference1 = pygame.time.get_ticks() - self.now1
time_difference2 = pygame.time.get_ticks() - self.now2
if time_difference1 >= 2000:
self.powerup_group.add(classes.PowerUp(screen_size, 40, 40, "ramen.png"))
self.now1 = pygame.time.get_ticks()
for powerup in self.powerup_group:
if time_difference2 >= 5000:
self.powerup_group.remove(powerup)
경우, 내 PlayerPaddle 클래스의 경우 : 여기
class Bullet(Image):
def __init__(self, screen_size, width, height, filename, color = (255, 0, 0)):
super().__init__(screen_size, width, height, filename, color = (255, 0, 0))
def checkCollision(self, powerup):
return pygame.sprite.collide_mask(self, powerup)
def removeBullet(self, powerup):
if self.checkCollision(powerup):
self.kill()
def update(self, powerup):
self.rect.centerx += 3
self.removeBullet(powerup)
내 파워 업 클래스
class PowerUp(Image):
def __init__(self, screen_size, width, height, filename, color = (255, 0, 0)):
super().__init__(screen_size, width, height, filename, color = (255, 0 , 0))
_centerx = random.randint(20, 1100) # <-- local variable _centerx (don't need it in other methods)
_centery = random.randint(20, 700) # <-- local variable _centery (don't need it in other methods)
self.radius = 10
self.rect = pygame.Rect(_centerx-self.radius,
_centery-self.radius,
self.radius*2, self.radius*2)
def update(self):
pass
입니다 그리고 여기 내가 모든 것을 실행하는 경우 열쇠를 클릭하면 총알이 발사됩니다. 그러나 총알은 오른쪽으로 이동하지 않습니다 (Bullet의 업데이트 기능에서 수행하도록 요청한 것처럼).
def handle_event(self, event):
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.direction = -1
elif event.key == pygame.K_DOWN:
self.direction = 1
elif event.key == pygame.K_LEFT:
self.turnLeft()
elif event.key == pygame.K_RIGHT:
self.turnRight()
elif event.key == pygame.K_u:
bullet = Bullet(screen_size, 25, 25, "naruto.png", color = (255, 0 , 0))
bullet.rect.centerx = self.rect.centerx
bullet.rect.centery = self.rect.centery
self.bullet_group.add(bullet)
모든 타이머는 자신의 타이머가 있어야합니다. 이제'if time_difference2> = 5000 :'은 모든 파워 업에 대해 같은 타이머를 검사하므로 동시에 모든 파워 업을 제거합니다. – furas
클래스'글 머리 기호'를 볼 수 있지만'bullet' 또는'bullets_group'을 사용하는 코드가 보이지 않으므로 Goal1에 문제가 보이지 않습니다. – furas
나는 항상 특정 글 머리 기호와 파워 업 사이의 충돌을 확인하려고합니다. . 충돌을 감지하기 위해 collide_mask를 사용했지만 지금은 총알이 움직이지 않습니다. – turtlefish12