我不能把同一物体多次击中

2024-09-27 09:23:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用python制作一个类似吉他英雄的游戏,我试图多次blit一个音符,但我似乎无法让它起作用(这个音符叫做Red)!在

#Sprite Class
class Sprite(pygame.sprite.Sprite):
    # What has to be passed when you create a sprite.
    #   image_file: The filename of the image.
    #   lacation: The initial location of where to draw the image.
    def __init__(self, image_file, location):                       
    pygame.sprite.Sprite.__init__(self) # Call Sprite initializer       
    self.image = pygame.image.load(image_file)                         
    self.rect = self.image.get_rect()                                  
    self.rect.left, self.rect.top = location
    self.xSpeed = 15 # The default xSpeed
    self.ySpeed = 15 # The default ySpeed
    self.name = "Not Assigned"
    self.speed = 10
    self.direction = 0

    def setSpeed(self, speed):
        self.speed = speed
        self.calcXYSpeeds()

    def setDirection(self, direction):
        self.direction = direction
        self.calcXYSpeeds()

    def calcXYSpeeds(self):
        angleRadians = math.radians(self.direction) # Convert the direction to radians.
        self.xSpeed= self.speed*math.cos(angleRadians)
        self.ySpeed = self.speed*math.sin(angleRadians)

    def move(self):
        self.rect = self.rect.move(self.xSpeed,self.ySpeed)

    def setDirectionTowards(self, (x,y)):
        self.direction = math.degrees(math.atan2((self.rect.x - x), (self.rect.y - y)))
        self.direction = 270 - self.direction
        self.calcXYSpeeds()

#Object Variables
Red = Sprite("Red.png", (100,25))
note1 = Sprite("note1.jpg", (50,650))
#add sprite to group
notes = pygame.sprite.Group()
notes.add(Red)
# Create an clock to keep track time
clock = pygame.time.Clock()
#Scoring Variables
font=pygame.font.Font(None,50)
score=0
score_text=font.render(str(score),1,(225,225,225))
#other Variables
Red1=0
ySpeed = 10
running = 1
while (running==1):
    # Sets the frame rate to 30 frames/second.
    clock.tick(30)

    # Gets any events like keyboard or mouse.
    event = pygame.event.poll()
    key=pygame.key.get_pressed()
    #object random spawn
    time = pygame.time.get_ticks()
    if (time==30*(random.randint(0,1000))):
        screen.blit(Red.image, Red.rect)
        pygame.display.update()

    #Object Movement
    Red.rect.y = Red.rect.y + ySpeed

    #Keys to complete notes
    if key[pygame.K_a]and Red1==0 and pygame.sprite.collide_rect(Red, note1) == True:
        font=pygame.font.Font(None,50)
        score = score+1
        score_text=font.render(str(score),1,(225,225,225))
        Red1=1
        #where i currently working to fix the problem
        notes.Group.clear(screen, background)
        notes.Group.update()
        notes.draw(screen)

    # Sets the exit flag if the X was clicked on the run window.
    if event.type == pygame.QUIT:
        running = 0

    # Color the whole screen with a solid color.
    screen.fill((0, 255, 255))
    #prints objects
    screen.blit(note1.image, note1.rect)
    screen.blit(Red.image, Red.rect)
    screen.blit(score_text,(500,50))

    # Update the window.
    pygame.display.update()

Tags: thetorectimageselfdefredscreen
1条回答
网友
1楼 · 发布于 2024-09-27 09:23:35

在同一个循环中,你要多次更新屏幕。在

在每个循环中清理屏幕是一种正确的方法,但是你只需要清洁一次,否则你就要抹掉你之前写的所有东西。在

此外,为了在周期之间保持注释,您需要将它们保存在一个集合中,就像notes一样,这样您就可以在每个周期中blit每个注释。在

请记住主循环中的以下顺序:

  1. 控制FPS(时钟滴答声())
  2. 检查事件
  3. 更新状态(即:添加/删除便笺集等)
  4. 清除屏幕
  5. 绘制当前状态(注释、静态元素等)
  6. 更新显示

另一个重要的是,不要在不同的位置使用相同的Sprite()或相同的矩形。如果要在新位置绘制同一图像的另一个副本,请复制矩形,然后创建一个新的Sprite()对象。在

相关问题 更多 >

    热门问题