Nueva Duda. ACTOR. ¿Como hacer que tenga balas y aumente?PREGUNTA AL FINAL

Necesito lograr que colisionen la munición aceituna con la nave y realizar que se elimine la nave, que el contador suba +1 y que aparezca una nueva nave con mas velocidad de movimiento de izquierda a derecha.

EL CÓDIGO HASTA AHORA:

mono.eliminar()
shaolin = pilas.actores.Shaolin(y=-200)
nave = pilas.actores.NaveRoja(y= 200, x= -350)
aceituna = pilas.actores.Aceituna()
shaolin.aprender(‘disparar’, municion = ‘aceituna’, angulo_salida_disparo = 90, frecuencia_de_disparo = 5)
pasos = 490
nave.hacer(‘Avanzar’, pasos)
nave.rotacion = [180]
nave.hacer(‘Avanzar’, pasos)
puntaje = pilas.actores.Puntaje(-280, -200, color=pilas.colores.rojo)
nave.aprender(pilas.habilidades.LimitadoABordesDePantalla)
shaolin.aprender(pilas.habilidades.LimitadoABordesDePantalla)

Buenas, @Juan-Tutoriales !

Todo eso que necesitas ya está explicado en los ejemplos y en el manual, y en varios posts de este foro. Si tan sólo quisieras investigar un poco de seguida los vas a encontrar! :slight_smile:

Respecto a tu código, veo que lo único que has hecho de momento es inicializar unos pocos actores y darle un comportamiento a tu nave,… [quote=“Juan-Tutoriales, post:1, topic:823”]
mono.eliminar()
[/quote]

En esta primera linea estás eliminando un actor que no ha sido creado, y por tanto te va a dar error. Supongo que es por que estás trabajando directamente en el editor de Pilas, que al abrirse inicializa automaticamente un actor mono. Creo que seria mejor que te hagas un script propio, guardado en una carpeeta en tu escritorio para tenerlo bien a mano y localizado, y abrirlo desde el editor (el de Pilas, o otro editor que sea de tu agrado…).

Te recomiendo que antes que nada crees una Escena, que contenga los actores. En la def iniciar() de la escena escribes la colision. Fuera del def iniciar() creas la def que se ejecutará al producirse esa colision. En esa def puedes incluir el eliminar al actor nave y sumar 1 al actor puntaje, además de llamar a la función crear nave (que deberias crear tambien).

Esta linea la puedes substituir por esta otra, más sencilla:

nave.aprender('limitadoabordesdepantalla')

Disculpa lo parquedad de la respuesta, pero creo que necesitas investigar más e intentar por ti mismo crear un mínimo de código funcional para poder guiarte y decirte donde vas bien y donde no…

Si una vez revisados los ejemplos y el manual, y recorrido el foro por temas similares, aún tienes dudas con mucho gusto intentaré orientarte.

Un abrazo.

Se como hacer la colisión, pero el problema es que no me reconoce el disparo de la aceituna

Buenas, @Juan-Tutoriales

He probado tu codigo, y compruebo que el actor shaolin dispara aceitunas correctamente.

Por tanto, no comprendo tu “problema”.

Tambien compruebo que, además del shaolin y la nave, hay una aceituna creada, pero no sé si realmente la querias crear o no.

Disculpa si no sé entenderte, pero ahora mismo no tengo claro si lo que quieres es que la aceituna dispare shaolins o que el shaolin disparte aceitunas, o que la aceituna dispare aceitunas…

Te agradeceria una pregunta concreta y clara sobre una duda específica y, a poder ser, adjuntando el código que no funciona, para poder darte una respuesta adecuada…

Si me permites, tambien te recomendaria revisar los ejemplos que trae Pilas, concretamente “disparo a monos” y “invasores”, ya que en ellos podrias encontrar muchas respuestas a tus dudas.

Gracias.

No puedo realizar una colisión de la aceituna disparada por el shaolin y la nave

Hola @Juan-Tutoriales, ¿te estará faltando esta linea al final del archivo?:

def al_colisionar(aceituna, nave):
    aceituna.eliminar()
    nave.eliminar()

pilas.colisiones.agregar('aceituna', 'NaveRoja', al_colisionar)

Lo que utilicé para describir la colisión son las etiquetas de los actores, fijate que en el manual hay un ejemplo de colisiones muy parecido a lo que usé acá: Etiquetas - pilas-engine

muchas gracias me funciono, buena comunidad

Me surgió una nueva duda, ¿Como puedo hacer que la nave se mueva constantemente de derecha a izquierda?

SEGUIMOS HABLANDO DEL MISMO PROYECTO

No es la forma más “elegante” de hacerlo, pero funciona. :slight_smile:

# -*- encoding: utf-8 -*- 
import pilasengine
pilas=pilasengine.iniciar()

class Mi_Nave(pilasengine.actores.Actor):
	
	def iniciar(self):
		self.a_derecha = True

		self.imagen = ('data/nave_roja/nave.png')
		self.x = -200
		self.y = 200
		self.velocidad = 5
				 
	def actualizar(self):
		if self.x < 300:
			if self.a_derecha:
				self.x += self.velocidad
		else:
			self.a_derecha = False	

		if self.x > -300:
			if not self.a_derecha:
				self.x -= self.velocidad	
		else:
			self.a_derecha = True		
		
pilas.actores.vincular(Mi_Nave)		

mi_nave	= pilas.actores.Mi_Nave()


pilas.ejecutar()

Muchas gracias por tu ayuda, sigue asi

Como puedo hacer para que el actor shaolin de mi proyecto tenga una cierta cantidad de balas y cuando elimine a una nave se le aumente una bala mas?

SEGUIMOS HABLANDO DEL MISMO PROYECTO @hugoruscitti @jordinur

Por Favor lo necesito para mañana @hugoruscitti @jordinur

Hace una funcion, que cuando detecte un actor eliminado, aumente la cantidad de balas.

Salu2

Si fuera tan fácil, ya lo hubiera echo… Déjalos a ellos @hugoruscitti @jordinur

balas = 10

def al_colisionar(aceituna, nave):
    global balas
    aceituna.eliminar()
    nave.eliminar()
    balas +=1

pilas.colisiones.agregar('aceituna', 'NaveRoja', al_colisionar)

Se agradeceria que no se fuera cambiando la pregunta y que se crearan nuevos temas para cada duda particular. El respeto a los que intentan ayudar tampoco deberia andar escaso.

Saludos.