Nave no dispara en Pygame

Consulte acerca de programas, técnicas, algoritmos etc.

Nave no dispara en Pygame

Notapor SirArDheL » Mié Mar 16, 2011 1:41 am

Bueno después de tanto buscar ejemplos y tutoriales por todos lados, no he podido encontrar una solución al problema que tengo. No consigo hacer que mi nave dispare. Este es el código:
# Modulos
import pygame
from pygame.locals import*
import sys

# Constantes
WIDTH = 640
HEIGHT = 480

# Clases
# ---------------------------------------------------------------------
class Bala:
def __init__(self, xBala, yBala):
self.xBala = xBala
self.yBala = yBala

def disparar(self):
self.yBala -= 1
return self.yBala

# ---------------------------------------------------------------------

# Funciones
# ---------------------------------------------------------------------

def cargarImagen(nombreArchivo, transparente=False):
try: imagen = pygame.image.load(nombreArchivo)
except pygame.error, message:
raise SystemExit, message
imagen = imagen.convert()
if transparente:
color = imagen.get_at((0,0))
imagen.set_colorkey(color, RLEACCEL)
return imagen

# ---------------------------------------------------------------------

def main():
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Aviones")

miBala = Bala(0, 0)

imagenFondo = cargarImagen('imagenes/fondo.jpg')
naveSprite = cargarImagen('imagenes/nave.bmp', True)
naveRect = naveSprite.get_rect()
yNave = 400
xNave = 320
balaSprite = cargarImagen('imagenes/bala.bmp', True)

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

teclaPres = pygame.key.get_pressed()

if teclaPres[K_UP]:
yNave -= 1

if teclaPres[K_DOWN]:
yNave += 1

if teclaPres[K_LEFT]:
xNave -= 1

if teclaPres[K_RIGHT]:
xNave += 1

if teclaPres[K_SPACE]:
miBala.xBala = xNave+70
miBala.yBala = yNave+70
while miBala.yBala > 0:
screen.blit(balaSprite, (miBala.xBala, miBala.disparar()))



screen.blit(imagenFondo, (0, 0))
screen.blit(naveSprite, (xNave, yNave))
pygame.display.flip()
return 0

if __name__ == '__main__':
pygame.init()
main()


El problema que tengo está en esta parte:
if teclaPres[K_SPACE]:
miBala.xBala = xNave+70
miBala.yBala = yNave+70
while miBala.yBala > 0:
screen.blit(balaSprite, (miBala.xBala, miBala.disparar()))

He probado distintas formas de implementarlo, de hecho tengo varias versiones del mismo código, pero no consigo hacer que funcione. Si alguien pudiese darme una mano estaría muy agradecido. Saludos.
SirArDheL
 
Mensajes: 1
Registrado: Mié Mar 16, 2011 1:31 am

Re: Nave no dispara en Pygame

Notapor shackra » Jue Mar 17, 2011 9:48 pm

podrías dejar un fichero comprimido (en el formato que mas te venga en gana, menos en rar please!) para poder correr el juego y mirar que sucede? yo soy mas de probar y luego de leer código que solo de leer... aunque ya te digo que la bala no ira a ningún lado si solo le sumas la posición X y Y de la nave mas 70 px una sola vez :-/, deberías de encerrarlo en un bucle while y hasta que alcance cierta distancia o tiempo (como mas desees) haga desaparecer la bala o deje de moverla.

al menos eso es lo que me viene a la cabeza sin poder correr el juego (me hace falta las imágenes del mismo).

saludos
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Re: Nave no dispara en Pygame

Notapor Juanxo » Jue Mar 17, 2011 10:39 pm

tienes montado algo bastante raro en mi opinión:

cuando pulsas espacio, posicionas la bala( que por cierto, siempre es la misma) y luego haces un while hasta que salga de la pantalla. Pero ten en cuenta que hasta que no salga de la pantalla, va a quedarse estancado ahí, haciendo el blit (pero no el pygame.display.flip() que hace que se redibuje la pantalla) . Unicamente saldrá de ese bucle cuando la bala haya salido de la pantalla, por eso seguramente no la ves.

En la sección de ejemplos de la web hay un space invaders que hice con ayuda de hugo, y creo que rafa tenía otro juego similar en algún post del foro
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron