

PLC escribió:Necesito una rutina que me permita con un personaje empujar un objeto?????????![]()
PLC escribió:Lo que quiero hacer es que por ejemplo yo tengo una imagen que es un bloque, y tengo otra que es el personaje como tal, entonces que el personaje pueda empujar ese bloque , es decir mientras camina se mueve el bloque, no que lo empuje y el se queda parado, sino que lo empuje a medida que va caminando es decir se van moviendo los dos al mismo tiempo.
# -*- encoding: utf-8 -*-
import pygame
from pygame.sprite import Sprite
import random
class Caja(Sprite):
def __init__(self, x, y):
Sprite.__init__(self)
self.crear_imagen_representacion()
self.rect.center = x, y
def crear_imagen_representacion(self):
size = random.randint(10, 40)
self.image = pygame.surface.Surface((size, size))
self.image.fill((100, 100, 255))
self.rect = self.image.get_rect()
def draw(self, screen):
screen.blit(self.image, self.rect)
class Personaje(Sprite):
"Personaje rectangular que puede caminar y saltar."
def __init__(self):
Sprite.__init__(self)
self.crear_imagen_representacion()
def crear_imagen_representacion(self):
self.image = pygame.surface.Surface((20, 20))
self.image.fill((100, 255, 100))
self.rect = self.image.get_rect()
self.rect.center = 160, 120
def update(self, cajas):
"Actualiza la posición del personaje en base al estado del teclado."
teclas = pygame.key.get_pressed()
if teclas[pygame.K_LEFT]:
self.move(-1, 0, cajas)
elif teclas[pygame.K_RIGHT]:
self.move(1, 0, cajas)
if teclas[pygame.K_UP]:
self.move(0, -1, cajas)
elif teclas[pygame.K_DOWN]:
self.move(0, 1, cajas)
def draw(self, screen):
"Muestra al personaje en pantalla."
screen.blit(self.image, self.rect)
def move(self, x, y, cajas):
speed = 4
self.rect.move_ip(x * speed, y * speed)
for caja in cajas:
if self.rect.colliderect(caja.rect):
caja.rect.move_ip(x * speed, y * speed)
# Programa principal
if __name__ == '__main__':
salir = False
screen = pygame.display.set_mode((320, 240))
personaje = Personaje()
cajas = [Caja(50, 50), Caja(200, 200), Caja(100, 40)]
while not salir:
for evento in pygame.event.get():
if evento.type == pygame.QUIT:
salir = True
elif evento.type == pygame.KEYDOWN:
if evento.key == pygame.K_q:
salir = True
personaje.update(cajas)
screen.fill((100, 100, 100))
for caja in cajas:
caja.draw(screen)
personaje.draw(screen)
pygame.display.flip()
pygame.time.delay(10)
def moverse(self, dx, dy, muros,comedoras,frutas):
"""Intenta mover al personaje pero sin cruzar muros."""
rect_collision = self.rect.move(dx, dy)
rect_collision.width =24
rect_collision.height = 27
rect_collision.x += 5
rect_collision.y += 9
for muro in muros:
if muro.colisiona_con(rect_collision):
self.choque = 1
return
for comedora in comedoras:
if comedora.colisiona_con(rect_collision):
self.choque = 1
return
#En fruta estan los sprite que quiero mover
for fruta in frutas:
if self.rect.colliderect(fruta.rect):
fruta.rect.move_ip(dx , dy)
# si se puede realizar el movimiento
self.rect.move_ip(dx, dy)
self.choque = 0 [code][/code]
PLC escribió:tengo un problema, cuando empujo una imagen con el personaje y entonces ya no quiero seguir empujando, y me muevo en otra direccion la imagen que empujaba entonces se sigue moviendo con el personaje.
for fruta in frutas:
if self.rect.colliderect(fruta.rect):
fruta.rect.move_ip(dx * 4 , dy * 4)
def moverse(self, dx, dy, muros,comedoras,frutas):
"""Intenta mover al personaje pero sin cruzar muros."""
rect_collision = self.rect.move(dx, dy)
rect_collision.width =24
rect_collision.height = 27
rect_collision.x += 5
rect_collision.y += 9
for muro in muros:
if muro.colisiona_con(rect_collision):
self.choque = 1
return
for comedora in comedoras:
if comedora.colisiona_con(rect_collision):
self.choque = 1
return
for fruta in frutas:
if self.rect.colliderect(fruta.rect):
fruta.rect.move_ip(dx * 4 , dy * 4)
# si se puede realizar el movimiento
self.rect.move_ip(dx, dy)
self.choque = 0
Volver a Artículos, traducciones y documentación
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado