def __init__(self): self.camera.position = Vector(0., 0.) self.python_img = Sprite(PYTHON_IMAGE_PATH) self.box_img = Sprite(BOX_IMAGE_PATH) self.objects = [] self.random_collisions = False self.collision_spawning = False self.space = self.root.add_child(SpaceNode()) self.box = self.space.add_child(BodyNode( sprite=self.box_img, body_type=BodyNodeType.kinematic, angular_velocity_degrees=30., )) # create bounding collision box with segments self.box_seg1 = self.box.add_child(HitboxNode( shape=Segment(Vector(-143, -143), Vector(-143, 143)), )) self.box_seg2 = self.box.add_child(HitboxNode( shape=Segment(Vector(-143, 143), Vector(143, 143)), )) self.box_seg3 = self.box.add_child(HitboxNode( shape=Segment(Vector(143, 143), Vector(143, -143)), )) self.box_seg4 = self.box.add_child(HitboxNode( shape=Segment(Vector(143, -143), Vector(-143, -143)), )) for i in range(5): self.spawn_object() self.space.set_collision_handler( COLLISION_TRIGGER, COLLISION_TRIGGER, self.on_collision, phases_mask=(CollisionPhase.begin | CollisionPhase.separate), ) self.observed_ball = [ n for n in self.space.children if isinstance(n, FlyingBall) ][0]
def __init__(self): self.camera.position = Vector(0., 0.) self.python_img = Sprite(PYTHON_IMAGE_PATH) self.obj = self.root.add_child(Node( position=Vector(-50, 0), shape=Circle(10.), color=random_color(), )) self.obj.transitions_manager.set( 'movement', NodeTransition( Node.position, Vector(100, 30), 3., advance_method=AttributeTransitionMethod.add, loops=0, back_and_forth=True, ) )
from kaa.engine import Engine, Scene from kaa.geometry import Vector from kaa.sprites import Sprite import os # creating objects outside engine's 'with' context like this will cause your program crash: loose_sprite = Sprite(os.path.join('assets', 'gfx', 'arrow.png')) # everything else below is good! class MyScene(Scene): def update(self, dt): for event in self.input.events(): if event.system and event.system.quit: self.engine.quit() with Engine(virtual_resolution=Vector(800, 600)) as engine: my_scene = MyScene() engine.run(my_scene)
def __init__(self): self.camera.position = Vector(0., 0.) self.python_img = Sprite(PYTHON_IMAGE_PATH) self.transition = NodeTransitionsSequence([ NodePositionTransition( Vector(-100., -100.), 3., advance_method=AttributeTransitionMethod.add, loops=3, easing=Easing.elastic_in_out), NodePositionTransition( Vector(100., 0.), 3., advance_method=AttributeTransitionMethod.add, easing=Easing.back_in_out), NodeTransitionDelay(1.5), NodeTransitionCallback(lambda node: setattr(node, 'sprite', None)), NodeTransitionsParallel([ NodePositionTransition( Vector(-50., 100.), 3., advance_method=AttributeTransitionMethod.add), NodeRotationTransition(1., 5.), NodeScaleTransition(Vector(2., 2.), 3.), NodeColorTransition(Color(0., 1., 0., 0.5), 4.), ], back_and_forth=True), ]) self.custom_transition = NodeCustomTransition( prepare_func=lambda node: { 'positions': [ Vector(random.uniform(-100, 100), random.uniform( -100, 100)) for _ in range(10) ] }, evaluate_func=lambda state, node, t: setattr( node, 'position', state['positions'][min(int(t * 10), 9)], ), duration=10., loops=5, ) spritesheet_frames = split_spritesheet( Sprite(EXPLOSION_IMAGE_PATH), Vector(64, 64), ) self.sprite_transition = NodeSpriteTransition( spritesheet_frames, 1., loops=0, back_and_forth=True, easing=Easing.quartic_out, ) self.space = self.root.add_child(SpaceNode()) self.obj = self.space.add_child( Node( position=Vector(50., 50.), sprite=self.python_img, transition=self.transition, )) self.custom_obj = self.space.add_child( Node( color=Color(1., 0., 0.), sprite=self.python_img, transition=self.custom_transition, )) self.phys_obj = self.space.add_child( BodyNode( color=Color(0., 1., 1.), position=Vector(-50., 50.), sprite=self.python_img, velocity=Vector(0., 30.), transition=BodyNodeVelocityTransition(Vector(0., -30.), 10.), )) self.animated_obj = self.space.add_child( Node( position=Vector(-20., 10.), transition=self.sprite_transition, ))
def __init__(self): # Load images: self.background_img = Sprite( os.path.join('assets', 'gfx', 'background.png')) self.title_screen_background_img = Sprite( os.path.join('assets', 'gfx', 'title-screen.png')) self.player_img = Sprite(os.path.join('assets', 'gfx', 'player.png')) self.machine_gun_img = Sprite( os.path.join('assets', 'gfx', 'machine-gun.png')) self.force_gun_img = Sprite( os.path.join('assets', 'gfx', 'force-gun.png')) self.grenade_launcher_img = Sprite( os.path.join('assets', 'gfx', 'grenade-launcher.png')) self.machine_gun_bullet_img = Sprite( os.path.join('assets', 'gfx', 'machine-gun-bullet.png')) self.force_gun_bullet_img = Sprite( os.path.join('assets', 'gfx', 'force-gun-bullet.png')) self.grenade_launcher_bullet_img = Sprite( os.path.join('assets', 'gfx', 'grenade-launcher-bullet.png')) self.enemy_stagger_img = Sprite( os.path.join('assets', 'gfx', 'enemy-stagger.png')) # few variants of bloodstains, put them in the same list so we can pick them randomly later self.bloodstain_imgs = [ Sprite(os.path.join('assets', 'gfx', f'bloodstain{i}.png')) for i in range(1, 5) ] # Load spritesheets self.enemy_spritesheet = Sprite( os.path.join('assets', 'gfx', 'enemy.png')) self.blood_splatter_spritesheet = Sprite( os.path.join('assets', 'gfx', 'blood-splatter.png')) self.explosion_spritesheet = Sprite( os.path.join('assets', 'gfx', 'explosion.png')) # enemy-death.png has a few death animations, so make this a list self.enemy_death_spritesheet = Sprite( os.path.join('assets', 'gfx', 'enemy-death.png')) # use the spritesheets to create framesets self.enemy_frames = split_spritesheet(self.enemy_spritesheet, frame_dimensions=Vector(33, 74)) self.blood_splatter_frames = split_spritesheet( self.blood_splatter_spritesheet, frame_dimensions=Vector(50, 50)) self.explosion_frames = split_spritesheet(self.explosion_spritesheet, frame_dimensions=Vector( 100, 100), frames_count=75) self.enemy_death_frames = [ split_spritesheet(self.enemy_death_spritesheet.crop( Vector(0, i * 74), Vector(103 * 9, 74)), frame_dimensions=Vector(103, 74)) for i in range(0, 5) ] # Load all sounds self.mg_shot_sound = Sound(os.path.join('assets', 'sfx', 'mg-shot.wav')) self.force_gun_shot_sound = Sound( os.path.join('assets', 'sfx', 'force-gun-shot.wav')) self.grenade_launcher_shot_sound = Sound( os.path.join('assets', 'sfx', 'grenade-launcher-shot.wav')) self.explosion_sound = Sound( os.path.join('assets', 'sfx', 'explosion.wav')) # Load all music tracks self.music_track_1 = Music( os.path.join('assets', 'music', 'track_1.wav')) # Load all fonts self.font_1 = Font( os.path.join('assets', 'fonts', 'paladise-script.ttf')) self.font_2 = Font(os.path.join('assets', 'fonts', 'DejaVuSans.ttf'))
def __init__(self): self.root.add_child(Node(position=Vector(100, 100), sprite=Sprite(os.path.join('demos', 'assets', 'python_small.png'))))
def __init__(self): self.camera.position = Vector(0., 0.) self.python_img = Sprite(PYTHON_IMAGE_PATH) self.transition = NodeTransitionsSequence([ NodePositionTransition( Vector(-100., -100.), 3000., advance_method=AttributeTransitionMethod.add, loops=3), NodePositionTransition( Vector(100., 0.), 3000., advance_method=AttributeTransitionMethod.add), NodeTransitionDelay(1500.), NodeTransitionCallback(lambda node: setattr(node, 'sprite', None)), NodeTransitionsParallel([ NodePositionTransition( Vector(-50., 100.), 3000., advance_method=AttributeTransitionMethod.add), NodeRotationTransition(1., 5000.), NodeScaleTransition(Vector(2., 2.), 3000.), NodeColorTransition(Color(0., 1., 0., 0.5), 4000.), ], back_and_forth=True), ]) self.custom_transition = NodeCustomTransition( lambda node: { 'positions': [ Vector(random.uniform(-100, 100), random.uniform( -100, 100)) for _ in range(10) ] }, lambda state, node, t: setattr( node, 'position', state['positions'][min(int(t * 10), 9)], ), 10000., loops=5, ) self.space = self.root.add_child(SpaceNode()) self.obj = self.space.add_child( Node( position=Vector(50., 50.), sprite=self.python_img, transition=self.transition, )) self.custom_obj = self.space.add_child( Node( color=Color(1., 0., 0.), sprite=self.python_img, transition=self.custom_transition, )) self.phys_obj = self.space.add_child( BodyNode( color=Color(0., 1., 1.), position=Vector(-50., 50.), sprite=self.python_img, velocity=Vector(0., 30.), transition=BodyNodeVelocityTransition(Vector(0., -30.), 10000.), ))
LANE_HERO_SLOTS = [Vector(3 + (109 * i), 220) for i in range(-2, 3)] LANE_ENEMY_SLOTS = [Vector(3 + (109 * i), -500) for i in range(-2, 3)] class CollisionTrigger(enum.IntEnum): border = enum.auto() soap = enum.auto() runner_enemy = enum.auto() runner_pickup = enum.auto() ASSETS_DIRECTORY = Path(__file__).parent / 'assets' assert ASSETS_DIRECTORY.is_dir() SPRITE_WATER_BACK = Sprite(str(ASSETS_DIRECTORY / 'bg.png')) SPRITE_WATER_FRONT = Sprite(str(ASSETS_DIRECTORY / 'fasterbg.png')) SPRITE_HAND = Sprite(str(ASSETS_DIRECTORY / 'hand.png')) SPRITE_FRAMES_SOAP = split_spritesheet( Sprite(str(ASSETS_DIRECTORY / 'soapthis.png')), Vector(138, 364), ) SPRITE_SOAP_METER = Sprite(str(ASSETS_DIRECTORY / 'sopaometer.png')).crop( Vector(10, 0), Vector(285, 24)) SPRITE_FRAMES_VIRUS = split_spritesheet( Sprite(str(ASSETS_DIRECTORY / 'coronavirus.png')), Vector(90, 109), ) SPRITE_ANTIVIRUS = Sprite(str(ASSETS_DIRECTORY / 'antiv.png')) SPRITE_LIQUID_SOAP = Sprite(str(ASSETS_DIRECTORY / 'liquidsoap.png')) SPRITE_OIL = Sprite(str(ASSETS_DIRECTORY / 'oil.png'))