3

以前の質問For Loop Functions in Pythonで、ハングマン ゲームの線を描くコマンドを含む関数を配置するのに苦労しました。正確に線を引いたわけではなく、最初は for ループまたは関数に問題があるのではないかと疑っていました。今、Pygameに多少の不具合があることに気付きました。

私は国カナダでこのコードを使用して問題を解決しようとしました:

b2 = font.render(str(letters[1]), True, (red))
screen.blit(b2, (bPosition))
if hangman1x == -500 and hangman1y == -500:
    hangman1x = (775, 250)
    hangman1y = (775, 50)
    pygame.draw.line(screen, black, (hangman1x), (hangman1y), (5))
    pygame.display.flip()
    time.sleep(0.5)
    bPosition = -500, -500
    b1.x, b1.y = -500, -500
if hangman1x == (775, 250) and hangman1y == (775, 50):
    print 'hi'
    width = 6
    pygame.draw.line(screen, black, (hangman1x), (hangman1y), (5))
    print 'yay'
    pygame.display.flip()

ここに奇妙なことがあります。

画面にブリットされた B を押すと、意図したとおりに赤くなり、線が完全にきれいに描画されますが、B が消えると消えます。その理由は理解できます。その後、if コードを追加しました。(両方pygame.draw.lineの (s) が同じであることに注意してください)、シェルに hi と yay を出力しますが、行は保持しません。とにかくこれを解決するには?

4

1 に答える 1

1

pygame.draw.line() を呼び出した後、画面を完全に白く再描画している可能性があります。これにより、線の上に描画されて非表示になります。あなたのように線を引く代わりに、それから絞首刑執行人のクラスの描画を作成します

class Hangman():
  def __init__(self):
    self.lines = 0 #Number of lines to be drawn

  def draw(self,screen):
    #TODO draw to screen based on self.lines

#More code setting up pygame

drawlist = []
myMan = Hangman()
drawlist.append(myMan)
#mainloop
while 1:
  screen.fill('#000000')
  for item in drawlist:
    item.draw(screen)

このようにして、フレームごとに絞首刑執行人を再描画しているため、彼は常に表示されています

編集実行例を追加

#!/usr/bin/python
import pygame
pygame.init()

class Hangman():
  def __init__(self):
    self.lines = 0 #Number of lines to be drawn

  def hang(self):
    self.lines += 1

  def draw(self,screen):
    for x in range(self.lines):
      coord1 = (x*10,20)
      coord2 = (x*10,50)
      pygame.draw.line(screen,(0,0,0),coord1,coord2)

size = screenWidth,screenHeight = 200,70
screen = pygame.display.set_mode(size)
pygame.display.flip()

myman = Hangman()

drawlist = []
drawlist.append(myman)
#mainloop
running = True
while running:
  #EVENT HANDLING#
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      running = False
    if event.type == pygame.KEYDOWN:
      if event.key == 32: #Spacebar
        myman.hang()

  #DRAWING#
  screen.fill((255,255,255))
  for item in drawlist:
    item.draw(screen)
  pygame.display.flip()
于 2013-08-13T14:10:21.757 に答える