2013-04-30 86 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