今日はPygameの学習を始めましたが、いくつかの問題が衝突しています。船がほとんどの時間小惑星に当たると、何もしませんが、19回の衝突と多くの音響効果が一気に起こります。ここでPygameの衝突は一度に19回起こっています - Python 3.x
from pygame import *
import random as rand
from colors import *
import os
pygame.mixer.pre_init(44100, 16, 2, 4096) #frequency, size, channels, buffersize
pygame.init() #turn all of pygame on.
fps = 60
window_size = window_width, window_height = 800, 600
pygame.mixer.music.load('music.wav')
pygame.mixer.music.play(-1)
explode = pygame.mixer.Sound("explode.wav")
class Player(pygame.sprite.Sprite):
#sprite for player
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("plane.png")
self.rect = self.image.get_rect()
self.setprop()
self.xspeed = 0
def setprop(self):
self.rect = self.image.get_rect()
self.orgin_x = self.rect.centerx
self.orgin_y = self.rect.centery
def set_position(self, x, y):
self.rect.x = x - self.orgin_x
self.rect.y = y - self.orgin_y
def update(self):
self.xspeed = 0
keystate = pygame.key.get_pressed()
if keystate[pygame.K_LEFT]:
self.xspeed = -8
if keystate[pygame.K_RIGHT]:
self.xspeed = 8
self.rect.x += self.xspeed
if self.rect.right > window_width:
self.rect.right = window_width
if self.rect.left < 0:
self.rect.left = 0
class Mob(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("boulder.png")
#self.image.fill(red)
self.rect = self.image.get_rect()
self.rect.x = rand.randrange(window_width - self.rect.width)
self.rect.y = rand.randrange(-100, -40)
self.speed = rand.randrange(6, 8)
self.sound = pygame.mixer.Sound("swoosh.wav")
def play_sound(self):
self.sound.play()
def update(self):
self.rect.y += self.speed
if self.rect.top > window_height + 10:
self.rect.x = rand.randrange(window_width - self.rect.width)
self.rect.y = rand.randrange(-100, -40)
self.speed = rand.randrange(6, 8)
sprites = pygame.sprite.Group()
mobs = pygame.sprite.Group()
player = Player()
sprites.add(player)
for i in range(12):
m = Mob()
mobs.add(m)
player.set_position(window_width/2, window_height/2 +215)
pygame.init()
pygame.mixer.init()
window = pygame.display.set_mode(window_size, pygame.RESIZABLE)
pygame.display.set_caption('Dodge the Boulders!')
clock = pygame.time.Clock()
explode = pygame.mixer.Sound("explode.wav")
running = True
while (running):
for event in pygame.event.get():
if(event.type == pygame.QUIT):
running = False
if (pygame.sprite.collide_rect(m, player)):
explode.play()
print('collide')
clock.tick(fps)
window.fill(black)
sprites.update()
sprites.draw(window)
mobs.update()
mobs.draw(window)
pygame.display.update()
pygame.display.quit()
pygame.quit()
私は(私のゲームループで)衝突のために使用している部分である
if (pygame.sprite.collide_rect(m, player)):
explode.play()
print('collide')
I「は、私は他のファイルに衝突するこの方法を使用してきたし、働いているように見えました問題が何であるかわからない私が考えることができる唯一のことは、私はどこかでそれを更新していないが、私は何も見つけることができなかったということです。 >音を果たしている - 私はあなたのゲームループがが衝突を見
ゲームループで衝突が発生する - >サウンドが再生されます。ループは高速です。問題を理解する? – sudo
コードが多すぎます... –
@sudoどうすれば修正できますか? –