[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Sprite troubles



And what is "loads"?

I think you might be working from some out-of-date docs, Nathan.  I suggest that you use this (current) version of the pygame docs:
http://www.pygame.org/docs/ref/sprite.html

Here's a working (and almost minimal) pygame sprite-based program (tested with Python 3.1 and 2.6):


import sys, pygame
pygame.init()
screen = pygame.display.set_mode((200,50), 0)
arial = pygame.font.SysFont( 'arial,microsoftsansserif,courier', 16 )
sprite1 = pygame.sprite.Sprite()
sprite1.image = arial.render('Hello, world!', True, (50,50,50))
sprite1.rect = sprite1.image.get_rect()
sprite1.rect.topleft = (20,10)
sprite_group = pygame.sprite.OrderedUpdates()
sprite_group.add(sprite1)
while True:
    event = pygame.event.wait()
    if (event.type == pygame.constants.QUIT):
        pygame.quit()
        sys.exit()
    screen.fill((240,240,240))
    sprite_group.draw(screen)
    pygame.display.update()


Here's almost the same program, but with an event loop that doesn't wait forever for an event; the changes are in red:


import sys, pygame
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((200,50), 0)
arial = pygame.font.SysFont( 'arial,microsoftsansserif,courier', 16 )
sprite1 = pygame.sprite.Sprite()
sprite1.image = arial.render('Hello, world!', True, (50,50,50))
sprite1.rect = sprite1.image.get_rect()
sprite1.rect.topleft = (20,10)
sprite_group = pygame.sprite.OrderedUpdates()
sprite_group.add(sprite1)
while True:
    for event in pygame.event.get():
        if (event.type == pygame.constants.QUIT):
            pygame.quit()
            sys.exit()
    screen.fill((240,240,240))
    sprite_group.draw(screen)
    pygame.display.update()
    clock.tick(60)


This is the same as the first version, except with a resizable window:


import sys, pygame
pygame.init()
scrsize = (200,50)
screen = pygame.display.set_mode(scrsize, pygame.constants.RESIZABLE)
arial = pygame.font.SysFont( 'arial,microsoftsansserif,courier', 16 )
sprite1 = pygame.sprite.Sprite()
sprite1.image = arial.render('This window is resizable', True, (50,50,50))
sprite1.rect = sprite1.image.get_rect()
sprite1.rect.topleft = (20,10)
sprite_group = pygame.sprite.OrderedUpdates()
sprite_group.add(sprite1)
while True:
    event = pygame.event.wait()
    if (event.type == pygame.constants.QUIT):
        pygame.quit()
        sys.exit()
    elif event.type == pygame.constants.VIDEORESIZE:
        # this program is in a resizable main window; this event happens when it's resized
        scrsize = event.size  # or (event.w, event.h)
        screen = pygame.display.set_mode(scrsize, pygame.constants.RESIZABLE)
    screen.fill((240,240,240))
    sprite_group.draw(screen)
    pygame.display.update()


Dave




On Sat, Apr 30, 2011 at 8:52 PM, David Burton <ncdave4life@xxxxxxxxx> wrote:
RenderPlain?  What's that?  It's not mentioned here:  http://www.pygame.org/docs/ref/sprite.html
I found it mentioned in some 2002 documentation.  I think it might be obsolete.   Not sure.

I've been using pygame.sprite.OrderedUpdates.

Dave


On Sat, Apr 30, 2011 at 3:53 PM, Nathan BIAGINI <nathan.open@xxxxxxxxx> wrote:
Hi everyone,

it sounds like a stupid question but i have written a really simple program where i just want to add a sprite to a sprite group and then draw the containing of this group.

Here is the main code :


import pygame
from sprites import Node

pygame.init()

screen = pygame.display.set_mode((640, 480))
node_group = pygame.sprite.RenderPlain()

node = Node((156, 234), 0)
node_group.add(node)

while 1:
        node_group.update()
        node_group.draw(screen)

        pygame.display.flip()

And here is my sprite class :

import pygame
from pygame.locals import *
from loads import loadImage

class Node(pygame.sprite.Sprite):
        '''
        Node class represent the sprite of each node of the
        map. So, one instance of Node is created for each
        node.
        '''

        def __init__(self, pos, node_type):
                pygame.sprite.Sprite.__init__(self)

                self.pos = pos
                self.node_type = node_type

                if self.node_type == 0:
                        self.image, self.rect = loadImage('ground.bmp', -1)

                elif self.node_type == 1:
                        self.image, self.rect = loadImage('wall.bmp', -1)

                elif self.node_type == 2:
                        self.image, self.rect = loadImage('hole.bmp', -1)

                self.rect.topleft = pos

        def update(self):
                pass

I maybe a bit tired but i can't see what i m doing wrong...

Thanks for your help.