2013-04-30 123 views
0

我剛剛開始使用PyGame。在這裏,我試圖繪製一個矩形,但它不是渲染。不能在Python pygame中繪製矩形

這是整個程序。

import pygame 
from pygame.locals import * 
import sys 
import random 

pygame.init() 

pygame.display.set_caption("Rafi's Game") 

clock = pygame.time.Clock() 

screen = pygame.display.set_mode((700, 500)) 




class Entity(): 

    def __init__(self, x, y): 
    self.x = x 
    self.y = y 


class Hero(Entity): 

    def __init__(self): 
     Entity.__init__ 
     self.x = 0 
     self.y = 0 

    def draw(self): 
     pygame.draw.rect(screen, (255, 0, 0), ((self.x, self.y), (50, 50)), 1) 



hero = Hero() 
#--------------Main Loop----------------- 

while True: 


    hero.draw() 

    keysPressed = pygame.key.get_pressed() 

    if keysPressed[K_a]: 
     hero.x = hero.x - 3 
    if keysPressed[K_d]: 
     hero.x = hero.x + 3 
    if keysPressed[K_w]: 
     hero.y = hero.y - 3 
    if keysPressed[K_s]: 
     hero.y = hero.y + 3 

    screen.fill((0, 255, 0)) 





    #Event Procesing 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 


    #Event Processing End 


    pygame.display.flip() 

    clock.tick(20) 

self.xself.y目前0和0 請注意,這不是一個完整的節目,都應該做的是畫上一個綠色的背景下,可以通過WASD鍵得以控制一個紅色正方形。

+2

如果在最後包含'width'參數,它會呈現嗎?例如。 'width = 1' – 2013-04-30 01:54:44

+0

不,它不會。我, – rafitufi 2013-04-30 02:07:01

+1

嘿,也不適合我。 :)原來'rect'不接受關鍵字參數,所以可選的最後一個參數必須沒有關鍵字。但無論如何,這不是你的問題。 – 2013-04-30 02:29:05

回答

2

讓我們來看看你的主循環的一部分:

while True: 


    hero.draw() 

    keysPressed = pygame.key.get_pressed() 

    if keysPressed[K_a]: 
     hero.x = hero.x - 3 
    if keysPressed[K_d]: 
     hero.x = hero.x + 3 
    if keysPressed[K_w]: 
     hero.y = hero.y - 3 
    if keysPressed[K_s]: 
     hero.y = hero.y + 3 

    screen.fill((0, 255, 0)) 

裏面的英雄類的抽獎功能,您繪製的矩形。在主循環中,您打電話hero.draw(),然後處理您的輸入後,您打電話screen.fill()。這是繪製你剛剛繪製的矩形。試試這個:

while True: 

    screen.fill((0, 255, 0)) 
    hero.draw() 

    keysPressed = pygame.key.get_pressed() 
    .... 

這將顏色在整個屏幕上綠色,然後提請您RECT在綠屏。

+0

非常感謝,我不敢相信我犯了這樣一個愚蠢的錯誤。 – rafitufi 2013-04-30 21:01:02

2

這更是一個擴展的意見和問題比答案。

以下繪製紅色正方形。對你起作用嗎?

import sys 
import pygame 

pygame.init() 

size = 320, 240 
black = 0, 0, 0 
red = 255, 0, 0 

screen = pygame.display.set_mode(size) 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 

    screen.fill(black) 
    # Either of the following works. Without the fourth argument, 
    # the rectangle is filled. 
    pygame.draw.rect(screen, red, (10,10,50,50)) 
    #pygame.draw.rect(screen, red, (10,10,50,50), 1) 
    pygame.display.flip() 
+0

是的,它工作。 – rafitufi 2013-04-30 02:26:50

+0

這聽起來像你可能沒有更新或翻轉顯示器,然後。 – Haz 2013-04-30 13:59:27

+0

如果它的工作,你應該可能接受他的回答 – Chachmu 2013-04-30 15:45:18