03-24-2020, 02:22 AM
Estaba mirando el ejemplo de naves de c para saber como realizar un disparo y la verdad es que no he entendido nada del codigo.Lo he hecho a mi manera pero no he conseguido nada,simplemente aparece el disparo al pulsar un boton pero este no se mueve y solo se crea el numero que hay puesto en el create.
Te voy a poner el codigo para que me digas que estoy haciendo mal.
Por cierto,hay alguna manera de colocar los frames por segundo que yo quiera,parece que tilengine va a 60 fps y yo suelo usar en otros engine 30 fps para ganar rendimiento.
Te voy a poner el codigo para que me digas que estoy haciendo mal.
Code:
import tilengine
import random
#inicio-------------------------------------------------------------
engine = tilengine.Engine.create(640,480,2,64,4)
ventana = tilengine.Window.create()
ventana.disable_crt_effect()
engine.set_background_color(tilengine.Color(120,215,242))
#jugador------------------------------------------------------------
class Jugador(object):
def __init__(self):
self.x = 320
self.y = 420
self.velocidad = 5
#obtener el sprite para poder crear muchos sprites
self.sprite_id = engine.get_available_sprite()
self.imagen = tilengine.Spriteset.fromfile("hero")
engine.sprites[self.sprite_id].setup(self.imagen)
engine.sprites[self.sprite_id].set_position(self.x,self.y)
engine.sprites[self.sprite_id].set_scaling(2,2)
engine.sprites[self.sprite_id].enable_collision(True)
self.disparo_jugador = DisparoJugador(self.x,self.y)
def update(self):
self.mover()
self.colision()
self.disparar()
def mover(self):
if(ventana.get_input(tilengine.Input.LEFT) and self.x > 0):
engine.sprites[self.sprite_id].set_position(self.x,self.y)
engine.sprites[self.sprite_id].set_flags(tilengine.Flags.FLIPX)
self.x -= self.velocidad
elif(ventana.get_input(tilengine.Input.RIGHT) and self.x < 608):
engine.sprites[self.sprite_id].set_position(self.x,self.y)
engine.sprites[self.sprite_id].set_flags(0)
self.x += self.velocidad
if(ventana.get_input(tilengine.Input.UP) and self.y > 16):
engine.sprites[self.sprite_id].set_position(self.x,self.y)
self.y -= self.velocidad
elif(ventana.get_input(tilengine.Input.DOWN) and self.y < 430):
engine.sprites[self.sprite_id].set_position(self.x,self.y)
self.y += self.velocidad
def colision(self):
if(engine.sprites[enemigo.sprite_id].check_collision()):
engine.sprites[self.sprite_id].set_scaling(1,1)
else:
engine.sprites[self.sprite_id].set_scaling(2,2)
def disparar(self):
if(ventana.get_input(tilengine.Input.A)):
self.disparo_jugador = DisparoJugador(self.x,self.y)
self.disparo_jugador.update()
#enemigo------------------------------------------------------------
class Enemigo(object):
def __init__(self):
random.seed()
self.x = random.randint(32,608)
self.y = random.randrange(32,129)
#obtener el sprite para poder crear muchos sprites
self.sprite_id = engine.get_available_sprite()
self.imagen = tilengine.Spriteset.fromfile("hero2")
engine.sprites[self.sprite_id].setup(self.imagen)
engine.sprites[self.sprite_id].set_position(self.x,self.y)
engine.sprites[self.sprite_id].set_scaling(2,2)
engine.sprites[self.sprite_id].enable_collision(True)
def update(self):
pass
#disparo jugador-----------------------------------------------------
class DisparoJugador(object):
def __init__(self,x,y):
self.x = x
self.y = y
self.velocidad = 2
#obtener el sprite para poder crear muchos sprites
self.sprite_id = engine.get_available_sprite()
self.imagen = tilengine.Spriteset.fromfile("hero2")
engine.sprites[self.sprite_id].setup(self.imagen)
engine.sprites[self.sprite_id].set_picture(25)
engine.sprites[self.sprite_id].set_position(self.x,self.y)
engine.sprites[self.sprite_id].set_scaling(1,1)
engine.sprites[self.sprite_id].enable_collision(True)
def update(self):
self.mover()
self.eliminar()
def mover(self):
engine.sprites[self.sprite_id].set_position(self.x,self.y)
self.y -= self.velocidad
def eliminar(self):
if(self.y < 32):
engine.sprites[self.sprite_id].disable()
#instanciar objetos--------------------------------------------------
jugador = Jugador()
enemigo = Enemigo()
#bucle---------------------------------------------------------------
while(ventana.process()):
jugador.update()
ventana.draw_frame()
Por cierto,hay alguna manera de colocar los frames por segundo que yo quiera,parece que tilengine va a 60 fps y yo suelo usar en otros engine 30 fps para ganar rendimiento.