rafitufi
rafitufi

Reputation: 25

Can't draw rect in python pygame

I'm just getting started with PyGame. Here, I'm trying to draw a rectangle, but it's not rendering.

Here's the whole program.

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.x and self.y are currently 0 and 0. Note that this is not a finished program, all it should do is draw a red square on a green background that can be controled by the WASD keys.

Upvotes: 0

Views: 9253

Answers (3)

Haz
Haz

Reputation: 2679

Let's look at a portion of your 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))

Inside the Hero class's draw function, you are drawing the rect. In the main loop, you are calling hero.draw(), and then after handling your inputs, you are calling screen.fill(). This is drawing over the rect you just drew. Try this:

while True:

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

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

That will color the entire screen green, then draw your rect over the green screen.

Upvotes: 5

Warren Weckesser
Warren Weckesser

Reputation: 114781

This is more of an extended comment and question than an answer.

The following draws a red square. Does it work for you?

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

Upvotes: 2

Gianfranco Lemmo
Gianfranco Lemmo

Reputation: 451

Check these links:

http://www.pygame.org/docs/ref/draw.html#pygame.draw.rect

And here have a some examples:

http://nullege.com/codes/search?cq=pygame.draw.rect

pygame.draw.rect(screen, color, (x,y,width,height), thickness)

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

Upvotes: 0

Related Questions