Alguien que sepa sobre Python, y a ser posible sobre Pygame?

Pues bien, desde hace 2 dias me he puesto a aprender Python porque me parece un lenguaje simple con una sintaxis facil y que ademas consta de las librerias Pygame, algo que lo hace muy interesante, llevo 1 dia haciendo algunas pruebas de un Sprite que se mueve por la pantalla, pero resulta que no se porque, el sprite no se mueve, os dejo el codigo
'''
Created on 14/09/2009

@author: Kemical
'''
import pygame
from pygame.locals import *
from pygame.sprite import Sprite
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 315
class mario(Sprite):
    def __init__(self):
        self.image = pygame.image.load("Mario.gif")
        self.rect = self.image.get_rect()
        self.rect.move_ip(0,283)
    def update(self):
        teclas = pygame.key.get_pressed()
        if teclas[K_LEFT]:
            self.rect.x -= 0.25
        if teclas[K_RIGHT]:
            self.rect.x += 0.25

if __name__ == '__main__':
    pygame.init()
    salir = False

    screen = pygame.display.set_mode( (SCREEN_WIDTH,SCREEN_HEIGHT) )
    pygame.display.set_caption( "Pruebas" )
    background_image = pygame.image.load("back.jpg")
    mario = mario()
    while not salir:
            screen.blit(background_image, (0,0) )
            mario.update()           
            screen.blit(mario.image, mario.rect)
           
            pygame.display.flip()
            keyinput = pygame.key.get_pressed()
            keyinput = pygame.key.get_pressed()
            if keyinput[K_ESCAPE] or pygame.event.peek(QUIT):
                raise SystemExit

La verdad es que llevo 1 hora probando distintas cosas y no soy capaz de hacer que el dichoso sprite se mueva.
Me acabo de instalar el Pygame , así que no sé como van las funciones de la librería.
Sin embargo, haciendo un print en el método update he visto que el error es que mario.rect.x no se actualiza.

Mira este código, que si que se mueve, para que te hagas una idea (he simplificado los ifs para que lo veas)

import pygame
from pygame.locals import *
from pygame.sprite import Sprite
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 315
class mario(Sprite):
    def __init__(self):
        self.image = pygame.image.load("Mario.gif")
        "self.rect = self.image.get_rect()"
        "self.rect.move_ip(0,283)"
   self.x=0
    def update(self):
            self.x += 0.25
       print mario.x



if __name__ == '__main__':
    pygame.init()
    salir = False

    screen = pygame.display.set_mode( (SCREEN_WIDTH,SCREEN_HEIGHT) )
    pygame.display.set_caption( "Pruebas" )
    background_image = pygame.image.load("back.jpg")
    mario = mario()
    while not salir:
            screen.blit(background_image, (0,0) )
            mario.update()           
            "screen.blit(mario.image, (mario.rect.x,mario.rect.y))"
       screen.blit(mario.image, (mario.x,280))
           
            pygame.display.flip()
            keyinput = pygame.key.get_pressed()
            keyinput = pygame.key.get_pressed()
            if keyinput[K_ESCAPE] or pygame.event.peek(QUIT):
                raise SystemExit


Por cierto, va en Pc->software libre [oki]

EDITO:
import pygame
from pygame.locals import *
from pygame.sprite import Sprite
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 315
class mario(Sprite):
    def __init__(self):
        self.image = pygame.image.load("Mario.gif")
        "self.rect = self.image.get_rect()"
        "self.rect.move_ip(0,283)"
   self.x=0
   self.y=150
    def update(self):
        teclas = pygame.key.get_pressed()
        if teclas[K_LEFT]:
            self.x -= 0.25
        if teclas[K_RIGHT]:
            self.x += 0.25

if __name__ == '__main__':
    pygame.init()
    salir = False

    screen = pygame.display.set_mode( (SCREEN_WIDTH,SCREEN_HEIGHT) )
    pygame.display.set_caption( "Pruebas" )
    background_image = pygame.image.load("back.jpg")
    mario = mario()
    while not salir:
            screen.blit(background_image, (0,0) )
            mario.update()           
            screen.blit(mario.image, (mario.x,mario.y))
           
            pygame.display.flip()
            keyinput = pygame.key.get_pressed()
            keyinput = pygame.key.get_pressed()
            if keyinput[K_ESCAPE] or pygame.event.peek(QUIT):
                raise SystemExit

Esto es tu código adaptado a lo que digo, funciona sin problema
Muchisimas gracias, pfff estaba ya desesperado jajaja, lo he probado y e visto que funciona a si que ahora me pondre a mirar los cambios que les has hecho.
Perdona si lo he puesto en mal lugar pero estube buscando el sitio apropiado y me parecio que aqui era el mejor sitio, para la proxima vez lo tendre en cuenta ;)
elcanuto escribió:Muchisimas gracias, pfff estaba ya desesperado jajaja, lo he probado y e visto que funciona a si que ahora me pondre a mirar los cambios que les has hecho.
Perdona si lo he puesto en mal lugar pero estube buscando el sitio apropiado y me parecio que aqui era el mejor sitio, para la proxima vez lo tendre en cuenta ;)

El único cambio destacable que he hecho ha sido crear manualmente los atributos x e y de mario.
Tú los has creado con una función de pygame y no sé porque, dichos atributos parecen constantes, ya que he estado probando y no se incrementaban.
Pero al no conocer Pygame, no te puedo decir mucho más.
Suerte.
Ya, de hecho lo que yo puse era exactamente lo que ponia en un tutorial, asi que no se porque no funciona... pero bueno, hecho asi ya funciona asi que me da igual como sea...
Pense que hablabas sobre el Python de metal gear solid xD
Jajajaja no hombre, Python es un lenguaje de programacion, no solo esta Python el de MGS jaja
EDIT:
Joder, pues ahora vuelvo a tener problemas con el dichoso juego xD, resulta que tengo en una clase un sprite que genera una nave enemiga y en la funcion update tengo puesto como debe moverse etc etc, pues resulta que no se como hacer para que se generen varias naves, se supone que con poner
            enemies.add(enemigo)
            sprites.add(enemigo)
deberia valer pero no se me generan mas que 1 nave, no lo entiendo, os dejo el codigo entero, perdonar si esta un poco desestructurado
#Importacion de librerias
import pygame
import random
from pygame.locals import *
from pygame.sprite import Sprite

#Variables de tamagno
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

#Funcion para subir fotos
def load_image(fullname, colorkey=False):
    try:
        image = pygame.image.load(fullname)
    except pygame.error, message:
        print 'No se puede cargar la imagen: ', fullname
        raise SystemExit, message

    image = image.convert()

    if colorkey:
        colorkey = image.get_at((0, 0))
        image.set_colorkey(colorkey, RLEACCEL)

    return (image, image.get_rect())

#Clase de la nave
class nave(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        (self.image, self.rect) = load_image('datos/nave.png', True)
        self.rect = self.image.get_rect()
        self.rect.x = 368
        self.rect.y = 536
    def update(self):
        teclas = pygame.key.get_pressed()
        #Movimiento
        if teclas[K_LEFT]:
            self.rect.x -= 1
        if teclas[K_RIGHT]:
            self.rect.x += 1
        if teclas[K_UP]:
            self.rect.y -= 1
        if teclas[K_DOWN]:
            self.rect.y += 1
        #Limites
        if self.rect.x < -26:
            self.rect.x = 826
        if self.rect.x > 826:
            self.rect.x = -26
        if self.rect.y <= 0:
            self.rect.y = 0
        if self.rect.y >= 536:
            self.rect.y = 536
           
#Naves enemigas
class enemigo(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        (self.image, self.rect) = load_image('datos/enemigo.png', True)
        self.set_initial_position()
        self.load_image()
    def set_initial_position(self):
        self.rect.centerx = random.randint(100, 700)
        self.rect.y = 0
        self.x_velocity = 1
        self.y_velocity = 2
    def load_image(self):
        (self.image, self.rect) = load_image('datos/enemigo.png', True)   
    def update(self):
       #Mover el sprite en 20
        self.rect.move_ip((self.x_velocity, self.y_velocity))
        if self.rect.left <= -64:
            self.rect.x = SCREEN_WIDTH + 64
        elif self.rect.left >= SCREEN_WIDTH +64:
            self.rect.left = -64
        if self.rect.y >= SCREEN_HEIGHT:
            self.rect.y = 0
           
#Programa principal
if __name__ == '__main__':
    pygame.init()
    salir = False
    screen = pygame.display.set_mode( (SCREEN_WIDTH,SCREEN_HEIGHT) )
    pygame.display.set_caption( "Pruebas" )
    (background_image, _) = load_image('back.jpg')
    screen.blit(background_image, (0, 0))
    sprites = pygame.sprite.RenderClear()
    nave = nave()
    enemigo = enemigo()
    sprites.add(nave)
    enemies = pygame.sprite.RenderClear()
    enemy_counter = 0
    while not salir:
            screen.blit(background_image, (0,0) )           
            keyinput = pygame.key.get_pressed()
            keyinput = pygame.key.get_pressed()
            sprites.update()
            enemies.add(enemigo)
            sprites.add(enemigo)
            sprites.draw(screen)
            pygame.display.flip()
            if keyinput[K_ESCAPE] or pygame.event.peek(QUIT):
                raise SystemExit
6 respuestas