簡體   English   中英

Pygame:畫線

[英]Pygame: Drawing Lines

在上一個問題“ Python中的循環函數”中 ,我在放置包含為contained子手游戲畫線的命令的函數時遇到了麻煩。 它沒有完全划清界限,我首先懷疑這是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都相同),它在shell中打印hi和yay,但不保留該行。 無論如何要解決這個問題?

調用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)

這樣,您在每一幀都重新繪制了ing子手,因此他總是被顯示

編輯添加了一個正在運行的示例

#!/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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM