Python / Pygame将多个图像blitting到列表坐标

时间:2016-07-30 14:06:53

标签: python-3.x pygame

所以,我正在制作一个空间游戏,让你有一个开放的世界去探索(黑屏) 我想在宇宙周围(从列表中)创建行星(Blit图像到屏幕)。

这是我目前的代码

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

planets = random.randrange(100,500)  #<------#####NOT IMPORTANT#######
positions = [(300,50),(400,27),(900,55)] #<------
position = ()

位置有coorinates图像应该blitted 但是当我快乐的时候

    for position in positions:
        ikkuna.blit(star, position)

它会使第一个或任何一个点亮,并且不会崩溃 为什么呢?

################################################ -

这是完整的代码,如果它有帮助(那里有一些完成语言希望它不会打扰)
&#34; ikkuna = screen(leveys,korkeus)=(width,hight)toiminnassa = in action&#34;

import pygame
import random
import time
import sys
import math

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)]
position = ()

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)


    for position in positions:
        ikkuna.blit(star, position)
        print("hello")

2 个答案:

答案 0 :(得分:2)

您的代码存在一些问题:

  1. 您没有更新显示,这意味着您的所有更改都不会显示。在游戏循环结束时使用pygame.display.update()pygame.display.flip()来更新屏幕。
  2. 当你将英语和芬兰语混合在一起时,它变得非常不稳定且难以理解,特别是对于那些不会说芬兰语的人。尝试使用英语,即使你只是在练习。
  3. 您的完整示例只在列表中包含一个位置,因此它只在一个位置创建一个星号。
  4. 按下&#39; -key不会产生任何行星。您可能想要引入一个布尔变量,如下例所示。
  5. 我将您的代码更改为英语并进行了一些调整,以使其更加一致。

    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()
    

答案 1 :(得分:0)

将所有图像blitting到完全相同的位置: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