Python 3.x Python/Pygame将多个图像布点到列表坐标

Python 3.x Python/Pygame将多个图像布点到列表坐标,python-3.x,pygame,Python 3.x,Pygame,所以我正在制作一个太空游戏,在那里你可以探索一个开放的世界(一个黑屏) 我想创建环绕宇宙的行星(从列表中) 这是我目前的代码 star = pygame.image.load("star.png") planets = random.randrange(100,500) #<------#####NOT IMPORTANT####### positions = [(300,50),(400,27),(900,55)] #<------ position = () 它会闪动第一个

所以我正在制作一个太空游戏,在那里你可以探索一个开放的世界(一个黑屏) 我想创建环绕宇宙的行星(从列表中)

这是我目前的代码

star = pygame.image.load("star.png")

planets = random.randrange(100,500)  #<------#####NOT IMPORTANT#######
positions = [(300,50),(400,27),(900,55)] #<------
position = ()
它会闪动第一个或什么都没有,并且不会崩溃 为什么?

################################################- 如果有帮助的话,下面是完整的代码(这里有一些finish语言,希望不要麻烦)
“ikkuna=屏幕(左、右)=(宽、高)Toiminassa=正在运行”


您将所有图像快速移动到完全相同的位置:
positions=[(300,50)]
,因此最后一张图像将覆盖所有其他图像。另外,您可能不知道这一点,但要在
pygame
中显示任何内容,您必须在完成绘制后调用
pygame.display.flip()
pygame.display.update()
。我对你的代码做了一些修改,所以星星应该会出现:

import pygame
import random
import time
import sys
import math

def main():
    pygame.init()
    White = (255,255,255)
    red = (255,0,0)

    kello = pygame.time.Clock()
    star = pygame.image.load("star.png")

    planets = random.randrange(100,500)
    positions = [(300,50), (310, 60), (320, 80), (607, 451), (345, 231)]

    tausta_vari = (255,255,255)
    (leveys, korkeus) = (1000, 1000)
    ikkuna = pygame.display.set_mode((leveys, korkeus))
    pygame.display.set_caption("SpaceGenerationTest")
    ######################################################################
    toiminnassa = True
    while toiminnassa:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                toiminnassa = False

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_g:
                    print("Generating World....")
                    print(planets)

        ikkuna.fill((0, 0, 0)) # fill the screen with black
        for position in positions:
            ikkuna.blit(star, position)
            print("Hello")

        pygame.display.flip() # updating the screen

if  __name__ == '__main__': # are we running this .py file as the main program?          
    try:
        main()
    finally:
        pg.quit()
        quit()

~Mr.Python

您将所有图像快速移动到完全相同的位置:
位置=[(300,50)]
,因此最后一张图像覆盖了所有其他图像。另外,您可能不知道这一点,但要在
pygame
中显示任何内容,您必须在完成绘制后调用
pygame.display.flip()
pygame.display.update()
。我对你的代码做了一些修改,所以星星应该会出现:

import pygame
import random
import time
import sys
import math

def main():
    pygame.init()
    White = (255,255,255)
    red = (255,0,0)

    kello = pygame.time.Clock()
    star = pygame.image.load("star.png")

    planets = random.randrange(100,500)
    positions = [(300,50), (310, 60), (320, 80), (607, 451), (345, 231)]

    tausta_vari = (255,255,255)
    (leveys, korkeus) = (1000, 1000)
    ikkuna = pygame.display.set_mode((leveys, korkeus))
    pygame.display.set_caption("SpaceGenerationTest")
    ######################################################################
    toiminnassa = True
    while toiminnassa:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                toiminnassa = False

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_g:
                    print("Generating World....")
                    print(planets)

        ikkuna.fill((0, 0, 0)) # fill the screen with black
        for position in positions:
            ikkuna.blit(star, position)
            print("Hello")

        pygame.display.flip() # updating the screen

if  __name__ == '__main__': # are we running this .py file as the main program?          
    try:
        main()
    finally:
        pg.quit()
        quit()

~Mr.Python

您的代码有一些问题:

  • 您没有更新显示,这意味着您的所有更改都将不可见。使用游戏循环结束时的
    pygame.display.update()
    pygame.display.flip()
    更新屏幕
  • 当你把英语和芬兰语混合在一起时,会变得非常不一致,很难理解,特别是对于不说芬兰语的人来说。试着用英语,即使你只是在练习
  • 您的完整示例在列表中只包含一个位置,因此它只在一个位置创建一颗星
  • 按“g”键不会生成任何行星。您可能希望引入一个布尔变量,如下面的示例所示
  • 我把你的代码改成了英文,并做了一些调整,使它更加一致

    import pygame
    import random
    
    pygame.init()
    
    WHITE = (255, 255, 255)
    RED = (255, 0, 0)
    
    # I changed the background color to black, because I understood it as that is what you want.
    BACKGROUND_COLOR = (0, 0, 0)  # tausta_vari
    
    clock = pygame.time.Clock()  # kello
    star = pygame.Surface((32, 32))
    star.fill((255, 255, 255))
    
    planets = random.randrange(100, 500)
    positions = [(300, 50), (400, 27), (900, 55)]
    
    WIDTH, HEIGHT = (1000, 1000)  # (leveys, korkeus)
    screen = pygame.display.set_mode((WIDTH, HEIGHT))  # ikkuna
    pygame.display.set_caption("SpaceGenerationTest")
    
    display_stars = False
    running = True  # toiminnassa
    while running:
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
    
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_g:
                    print("Generating World....")
                    print(planets)
                    display_stars = True
    
        screen.fill(BACKGROUND_COLOR)
    
        if display_stars:
            for position in positions:
                # This will create 3 stars because there're 3 elements in the list positions.
                # To create more stars you'll need to add more in the list positions.
                screen.blit(star, position)
    
        pygame.display.update()
    

    您的代码存在一些问题:

  • 您没有更新显示,这意味着您的所有更改都将不可见。使用游戏循环结束时的
    pygame.display.update()
    pygame.display.flip()
    更新屏幕
  • 当你把英语和芬兰语混合在一起时,会变得非常不一致,很难理解,特别是对于不说芬兰语的人来说。试着用英语,即使你只是在练习
  • 您的完整示例在列表中只包含一个位置,因此它只在一个位置创建一颗星
  • 按“g”键不会生成任何行星。您可能希望引入一个布尔变量,如下面的示例所示
  • 我把你的代码改成了英文,并做了一些调整,使它更加一致

    import pygame
    import random
    
    pygame.init()
    
    WHITE = (255, 255, 255)
    RED = (255, 0, 0)
    
    # I changed the background color to black, because I understood it as that is what you want.
    BACKGROUND_COLOR = (0, 0, 0)  # tausta_vari
    
    clock = pygame.time.Clock()  # kello
    star = pygame.Surface((32, 32))
    star.fill((255, 255, 255))
    
    planets = random.randrange(100, 500)
    positions = [(300, 50), (400, 27), (900, 55)]
    
    WIDTH, HEIGHT = (1000, 1000)  # (leveys, korkeus)
    screen = pygame.display.set_mode((WIDTH, HEIGHT))  # ikkuna
    pygame.display.set_caption("SpaceGenerationTest")
    
    display_stars = False
    running = True  # toiminnassa
    while running:
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
    
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_g:
                    print("Generating World....")
                    print(planets)
                    display_stars = True
    
        screen.fill(BACKGROUND_COLOR)
    
        if display_stars:
            for position in positions:
                # This will create 3 stars because there're 3 elements in the list positions.
                # To create more stars you'll need to add more in the list positions.
                screen.blit(star, position)
    
        pygame.display.update()
    

    它只显示第一个坐标,或者什么都不显示:所以当你多次运行它时,有时它会在第一个坐标上渲染一个行星,而有时它不会?顺便问一下,为什么要定义
    位置=()
    ?它可能无法解决问题,但您可以删除它。是的,有几次它会将行星渲染到第一个坐标它只会渲染第一个坐标或什么也不渲染:因此,当您多次运行它时,有时它会在第一个坐标渲染行星,而其他时候它不会?顺便问一下,为什么要定义
    位置=()
    ?它可能无法解决问题,但您可以删除它。是的,它多次将行星渲染到第一个坐标系,这非常有效!以后我会尽量与我的代码更加一致。使用布尔变量声音的想法很好,我会研究一下。好的,这很好用!以后我会尽量与我的代码更加一致。使用布尔变量声音的想法很好,我会研究一下。