2016-07-30 3 views
0

私は、オープンワールドを探索するためのオープンワールドを持っています(黒いスクリーン) と私は、宇宙(リスト)。Python/Pygame複数の画像をリスト座標にblittingする

この私のコードで、現在

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

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

位置は、画像が をブリットする必要がありますが、私はそれら

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

をブリットするとき、それは最初の1かゼロかのブリットと 理由をクラッシュしないcoorinatesを持っています?

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

ここに完全なコードがあります(邪魔にならないことを願って、そこに仕上げ言語のビットがあります)
"ikkuna = screen(leveys、korkeus)=(width、hight)toiminnassa = in action 「

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") 
+0

_it最初の1つまたは何もない:したがって、複数回実行すると、時々、最初の座標に惑星がレンダリングされ、それ以外では惑星はレンダリングされません。ところで、なぜあなたは 'position =()'を定義していますか?問題を解決できない場合もありますが、削除することはできます。 –

+0

はい何度か最初の座標に惑星をレンダリング – cmdtvt

答えて

0

あなたは正確に同じ位置にすべてのあなたのイメージをブリッティング:positions = [(300, 50)]ので、最後の画像は、他のすべての画像をアップカバーしています。また、あなたはこれを知らないかもしれないが、あなたが描画を終了した後pygame.display.flip()またはpygame.display.update()を呼び出すためにどちらかの必要がありpygameには何も表示します。星が表示さアップする必要がありますので、私は、あなたのコードにいくつかの修正を行わ:

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

1

あなたのコードのいくつかの問題があります:

  1. あなたは、表示を更新していないが、これは、すべての変更が表示されないことを意味します。画面を更新するために、ゲームループの最後でpygame.display.update()またはpygame.display.flip()を使用してください。
  2. あなたは英語とフィンランド語を混合しているとき、それは特にフィンランド語を話せない人のために、従うことが非常に矛盾して硬くなります。ちょうど練習しているときでも、英語を使ってみてください。
  3. あなたの完全な例だけので、それが唯一の位置に1つ星を作成しています、リスト内の1つの位置が含まれています。すべての惑星を生成しません「g 'のキーを押す
  4. 。下の例のようなブール変数を導入したいかもしれません。

コードを英語に変更して調整して、より一貫性があるようにしました。

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

これは完璧に動作します!私は将来、私のコードと一貫しています。そして、ブール可変の音の良い見方を使ってそのアイデアを考えてみましょう。 – cmdtvt

関連する問題