Python - Python o pygame movimiento de Objetos

 
Vista:
Imágen de perfil de Gabriel

Python o pygame movimiento de Objetos

Publicado por Gabriel (5 intervenciones) el 11/07/2021 21:26:39
Hola!

Soy Gabriel y me encuentro desarrollando un juego como práctica, tengo conocimientos intermedios con Python y la biblioteca pygame, la cuál estoy usando. Ahora mi problema es que no he podido y no encontrado una solución para hacer un objeto follower que persiga a mi jugador.

Si me podrían ayudar, muchas Gracias !
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Python o pygame movimiento de Objetos

Publicado por tincopasan (1082 intervenciones) el 12/07/2021 00:41:46
si claro, pone un código mínimo y funcional, aunque sea de cuadrados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Gabriel

Python o pygame movimiento de Objetos

Publicado por Gabriel (5 intervenciones) el 12/07/2021 14:51:18
Listo, lo puse como respuesta :).

Pero de verdad que si necesito ayuda Jajaj.

Gracias por la Atencion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Gabriel

Python o pygame movimiento de Objetos

Publicado por Gabriel (5 intervenciones) el 12/07/2021 14:50:26
Aca esta el codigo minimo, son varias clases y el controlador principal es el archivo "game.py":

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import pygame,sys
from .confi import *
from .player import Player, Enemy
from .objec import Object
 
class Game(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        pygame.init()
        self.surface = pygame.display.set_mode((WIDHT,HEIGT))
 
    def start(self):
        self.elements()
        self.runnin()
    def runnin(self): #Bucle principal
        while 1:
            pygame.time.get_ticks()
            self.event()
            self.update()
            self.draw()
    def event(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        self.move()
        if self.player1.rect.left >= self.object.rect.right or self.player2.rect.colliderect(self.object.rect): #evento cuado el enemigo deberia seguir al jugador
            self.enemy.playerFollower()
    def move(self):
        pressed = pygame.key.get_pressed()
        #Movimientos player 1
 
        if pressed[pygame.K_w]:
            self.player1.rect.top -= 1
        if pressed[pygame.K_s]:
            self.player1.rect.bottom += 1
        if pressed[pygame.K_a]:
            self.player1.rect.left -= 1
        if pressed[pygame.K_d]:
            self.player1.rect.right += 1
 
        #Movimientos player 2
        """
        if pressed[pygame.K_UP]:
            self.player2.rect.top -= 1
        if pressed[pygame.K_DOWN]:
            self.player2.rect.bottom +=1
        if pressed[pygame.K_LEFT]:
            self.player2.rect.left -=1
        if pressed[pygame.K_RIGHT]:
            self.player2.rect.right +=1
        """
    def elements(self): #Elementos a imprimir
        self.player1 = Player()
        self.player2 = Player()
        self.object = Object()
        self.enemy = Enemy()
 
        self.sprites = pygame.sprite.Group()
        self.sprites.add(self.object)
        self.sprites.add(self.player1)
       # self.sprites.add(self.player2)
        self.sprites.add(self.enemy)
 
    def draw(self):
        self.surface.fill(BLACK)
        self.sprites.draw(self.surface)
    def update(self):
        pygame.display.update()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Python o pygame movimiento de Objetos

Publicado por tincopasan (1082 intervenciones) el 12/07/2021 20:44:35
ok ya lo voy a mirar así implemento algo, pero definime bien que esperás que haga el que sigue, o sea ¿si 1 se mueve a la derecha el 2 también? ¿o más bien como un path? ¿se aproxima o mantiene la distancia? tratá de ser lo más específico posible en que querés que hagan ambos objetos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Gabriel

Python o pygame movimiento de Objetos

Publicado por Gabriel (5 intervenciones) el 13/07/2021 06:36:10
Lo que quiero, es que cuando pase el evento "Sobre pasar la barrera" que es la linea de la mitad, el objeto enemy, persiga al jugador sus coordenadas, hasta alcanzarlo, lo de las colisiones ya lo se, solo no encuentro la lógica para que el "enemy" siga las coordenadas sin teletransportarse.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Python o pygame movimiento de Objetos

Publicado por tincopasan (1082 intervenciones) el 13/07/2021 13:14:03
No te ofendas, pero me causa gracia el criterio de mínimo para vos. Bueno lo estuve mirando, y como no comparto tu lógica de programación y además es muy extenso para corregir cada módulo de tu ejemplo hago uno funcional para que veas la metodología que se aplica, hay cosas incompletascomo las colisiones, pero como ya las sabés las obvie: probálo y espero te ayude:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#-*- coding:utf-8 -*-
import pygame
import sys
import math
 
ANCHO, ALTO = 1200,720
BLANCO = (255, 255, 255)
NEGRO = (0, 0, 0)
ROJO = (255, 0, 0)
FPS =30
 
def cerca(a,b,distancia):
    if (math.sqrt(((b.x - a.x)**2) + ((b.y - a.y)**2))) < distancia:return True
    else: return False
 
class Jugador():
    def __init__(self,color,posx,posy):
        self.color=color
        self.posx=posx
        self.posy=posy
        self.cuadro= pygame.Rect(self.posx,self.posy,60,60)
 
    def dibujar(self,pantalla):
        pygame.draw.rect(pantalla,self.color,self.cuadro)
 
def main():
    pygame.init()
    pantalla = pygame.display.set_mode((ANCHO,ALTO))
    pygame.display.set_caption("Persigue")
    reloj = pygame.time.Clock()
    jugador1=Jugador(BLANCO,100,100)
    jugador2 = Jugador(ROJO,1000,300)
    jugar = True
    while jugar:
        reloj.tick(FPS)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                jugar = False
        pulsada = pygame.key.get_pressed()
        if pulsada[pygame.K_w]:
            jugador1.cuadro.top -= 10
        if pulsada[pygame.K_s]:
            jugador1.cuadro.bottom += 10
        if pulsada[pygame.K_a]:
            jugador1.cuadro.left -= 10
        if pulsada[pygame.K_d]:
            jugador1.cuadro.right += 10
 
        if jugador1.cuadro.x > ANCHO - jugador1.cuadro.width: jugador1.cuadro.x = ANCHO - jugador1.cuadro.width
        if jugador1.cuadro.x < 0: jugador1.cuadro.x = 0
        if jugador1.cuadro.y > ALTO - jugador1.cuadro.height: jugador1.cuadro.y = ALTO - jugador1.cuadro.height
        if jugador1.cuadro.y < 0: jugador1.cuadro.y = 0
 
        if jugador2.cuadro.x > ANCHO - jugador2.cuadro.width: jugador2.cuadro.x = ANCHO - jugador2.cuadro.width
        if jugador2.cuadro.x < 0: jugador2.cuadro.x = 0
        if jugador2.cuadro.y > ALTO - jugador2.cuadro.height: jugador2.cuadro.y = ALTO - jugador2.cuadro.height
        if jugador2.cuadro.y < 0: jugador2.cuadro.y = 0
 
        pantalla.fill(NEGRO)
        pygame.draw.line(pantalla,BLANCO,(ANCHO/2,0),(ANCHO / 2 ,ALTO),3)
        jugador1.dibujar(pantalla)
        jugador2.dibujar(pantalla)
 
        if cerca(jugador1.cuadro,jugador2.cuadro,480):
            if jugador1.cuadro.x < jugador2.cuadro.x:
                jugador2.cuadro.right -= 5
            elif jugador1.cuadro.x > jugador2.cuadro.x:
                jugador2.cuadro.right += 5
            if jugador1.cuadro.y < jugador2.cuadro.y:
                jugador2.cuadro.top -= 5
            elif jugador1.cuadro.y > jugador2.cuadro.y:
                jugador2.cuadro.top += 5
        pygame.display.flip()
 
if __name__ == "__main__":
    main()
    pygame.quit()
    sys.exit()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Gabriel

Python o pygame movimiento de Objetos

Publicado por Gabriel (5 intervenciones) el 13/07/2021 21:39:30
Jajaj No me ofendo, pero no entiendo muy bien a lo que te refieres. El código me sirvió mucho Gracias! solo que no me va tan fluido como el tuyo.
Si tienes consejos, o recomendaciones, enserio estoy abierto a escuchar todo, yo quiero es aprender
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar