 
  
 
  
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 = 0Volver a Artículos, traducciones y documentación
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados