python - sprites - pygame tutorial español pdf
cómo hacer que un sprite rebote de los bordes de la ventana en pygame (2)
aquí hay un pájaro / bola en movimiento que rebota en las paredes, antes que nada necesitas solo un tipo de clase para sprites, simplemente crea diferentes instancias con diferentes imágenes. Espero eso ayude
import sys, pygame, random
SIZE = width, height = 640, 480
SPEED = [2, 2]
black = 0, 0, 0
class mySprite(pygame.sprite.Sprite):
def __init__(self, image="ball.bmp", speed=[2,2]):
pygame.sprite.Sprite.__init__(self)
self.speed = speed
self.image = pygame.image.load(image)
self.rect = self.image.get_rect()
def update(self):
global SIZE
#i used 110 px because it''s the size of the image, but it''s better to use the rect property of the pygame
if (self.rect.x <0) or (self.rect.x > 640-110):
self.speed[0] *= -1
if (self.rect.y<0) or (self.rect.y > 480-110):
self.speed[1] *= -1
self.rect.x =self.rect.x + self.speed[0]
self.rect.y =self.rect.y + self.speed[1]
#OR: self.rect = self.rect.move(self.speed)
def draw(self, screen):
screen.blit(self.image, self.rect)
#
pygame.init()
screen = pygame.display.set_mode(SIZE)
iaka = mySprite()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
screen.fill(black)
iaka.draw(screen)
iaka.update()
pygame.display.flip()
Hasta ahora tengo mi programa rebotando de izquierda a derecha, pero ahora quiero rebotar en las paredes. ¿Cómo puedo llegar a eso?
delta = 5
u = 1 # x coordinate
u += delta
if u >= 440: #480 is the window size, I have it stopping at 440
delta = -5 #Go back by 5
elif u < 0:
delta = 5 #Go up by 5
Más grande Córtalo de código, tiene la solución, pero el sprite se sale de la pantalla. Para ejecutar el código, asegúrese de tener una imagen llamada "bird.png" o cambie la imagen:
import pygame
import random
class mySprite(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("bird.png")
self.rect = self.image.get_rect()
## slef.rect(50,50,self.image.get_width(), self.image.get_height())
def update(self,x,y):
self.rect.x = x
self.rect.y = y
class newSprite(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("ball.png")
self.rect = self.image.get_rect()
def update(self,x,y):
self.rect.x = x
self.rect.y = y
class otherSprite(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("bird.png")
self.rect = self.image.get_rect()
def update(self,x,y):
self.rect.x = x
self.rect.y = y
def main():
""" Set up the game and run the main game loop """
pygame.init() # prepare the pygame module for use
surfaceSz = 480 # Desired physical surface size, in pixels.
# Create surface of (width, height), and its window.
main_surface = pygame.display.set_mode((surfaceSz, surfaceSz))
small_rect = (300, 200, 150, 90)
some_color = (255,0,0)
main_surface.fill((0,200,255))
s = mySprite()
all_sprites = pygame.sprite.Group()
s.add(all_sprites)
delta_x = 5
delta_y = 5
u = 1 # x coord
v = 1 # y coord
clock = pygame.time.Clock()
while True:
ev = pygame.event.poll() # look for any event
if ev.type == pygame.QUIT: # window close button clicked?
break # ... leave game loop
main_surface.fill((0,200,255))
#u += delta
#if u >= 440:
# delta = -5
#elif u < 0:
# delta = 5
u += delta_x
v += delta_y
if (v >=440): #assuming your y axis is 440 pixels
delta_y = -5
elif v<=0 :
delta_y = 5
if u >= 440: #440 pixels u have
delta = -5
elif u < 0:
delta = 5 #Go up by 5
all_sprites.update(u,50)
pos =(random.randint(0, surfaceSz), random.randint(0, surfaceSz))
all_sprites.draw(main_surface)
# Now the surface is ready, tell pygame to display it!
pygame.display.flip()
clock.tick(60)
pygame.quit() # once we leave the loop, close the window.
main()
hacer una coordinacion ay tambien
delta_y = 5
delta_x = 5
u = 1 # the x coordinate
v = 1 # the y coordinate
u +=delta_x
v +=delta_y
if (v >=300): #assuming your y axis is 300 pixels
delta_y = -5
elif v<=0 :
delta_y = 5
if u >= 440: #440 pixels u have
delta_x = -5
elif u < 0:
delta_x = 5 #Go up by 5