es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Colisión con el enemigo en Ursina

Estoy haciendo un juego en Ursina y quiero imprimir “true” o “false” (como un booleano). Esto se debe a que el juego que estoy haciendo necesita detección de colisiones para las entidades. He buscado una solución pero no pude encontrar nada. ¿Cómo puedo detectar colisiones en Ursina?

from ursina import *
import random

# variables
speed = 0.05
number_of_pokemon = 10

app = Ursina()

# texturas
player_texture = load_texture('pokemon orange assets/player.png')
pokemon_texture1 = load_texture('pokemon orange assets/pokemon.png')
pokemon_texture2 = load_texture('pokemon orange assets/pokemon2.png')
pokemon_texture3 = load_texture('pokemon orange assets/pokemon3.png')
grass_texture = load_texture('pokemon orange assets/grass.png')
textbox_texture = load_texture('pokemon orange assets/textbox.png')
missingno_texture = load_texture('pokemon orange assets/missingno.png')

pokemontextures = [pokemon_texture1, pokemon_texture2, pokemon_texture3]

# entidades: pokemon(s), jugador, cuadro de texto, batallas
player = Entity(model='cube', texture=player_texture, scale=(1,1,0), position=(0,0,-0.1))

# Genera pokemon
number = random.uniform(0,100)
if number == 100:
    for i in range(100):
        pokemon = Entity(model='cube', texture=missingno_texture, scale=(1,2,0), position=(random.uniform(-10,10),random.uniform(-10,10),random.uniform(-10,10)))
else:
    for i in range(number_of_pokemon):
        pokemon = Entity(model='cube', texture=random.choice(pokemontextures), scale=(1.5,1.5,0), position=(random.uniform(-5,5),random.uniform(-4,4),-0.1))

# genera pasto
for y in range(20):
    for x in range(20):
        grass = Entity(model='cube', texture=grass_texture, scale=(1,1,0), position=(x - 10,y - 10,0))

# movimiento
def update():
    player.x += held_keys['d'] * speed
    player.x -= held_keys['a'] * speed
    player.y += held_keys['w'] * speed
    player.y -= held_keys['s'] * speed

app.run()
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para detectar colisiones en Ursina, puedes utilizar el componente integrado “collision”. Primero, agrega un componente de colisión tanto al jugador como a la entidad con la que deseas colisionar, de la siguiente manera:

    player = Entity(model='cube', texture=player_texture, scale=(1,1,0), position=(0,0,-0.1), collider='box')
    pokemon = Entity(model='cube', texture=random.choice(pokemontextures), scale=(1.5,1.5,0), position=(random.uniform(-5,5),random.uniform(-4,4),-0.1), collider='box')
    

    Luego, en la función “update”, comprueba si el jugador está colisionando con la entidad del pokémon:

    def update():
        player.x += held_keys['d'] * speed 
        player.x -= held_keys['a'] * speed 
        player.y += held_keys['w'] * speed 
        player.y -= held_keys['s'] * speed 
    
        if player.intersects(pokemon):
            print('true')
        else:
            print('false')
    

    Este código verifica si la entidad del jugador se intersecta con la entidad del pokémon en cada cuadro. Si hay una colisión, imprimirá “true”, de lo contrario imprimirá “false”. Puedes reemplazar las declaraciones de impresión con tu propia lógica de detección de colisiones para tu juego.

Comments are closed.