def __init__(self): super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE) # Set the working directory (where we expect to find files) to the same # directory this .py file is in. You can leave this out of your own # code, but it is needed to easily run the examples using "python -m" # as mentioned at the top of this program. file_path = os.path.dirname(os.path.abspath(__file__)) os.chdir(file_path) arcade.set_background_color(arcade.color.BLACK) self.emitters = [] self.frametime_plotter = FrametimePlotter() self.launch_firework(0) arcade.schedule(self.launch_spinner, 4.0) stars = arcade.Emitter( center_xy=(0.0, 0.0), emit_controller=arcade.EmitMaintainCount(20), particle_factory=lambda emitter: AnimatedAlphaParticle( filename_or_texture=random.choice(STAR_TEXTURES), change_xy=(0.0, 0.0), start_alpha=0, duration1=random.uniform(2.0, 6.0), mid_alpha=128, duration2=random.uniform(2.0, 6.0), end_alpha=0, center_xy=arcade.rand_in_rect((0.0, 0.0), SCREEN_WIDTH, SCREEN_HEIGHT) ) ) self.emitters.append(stars) self.cloud = arcade.Emitter( center_xy=(50, 500), change_xy=(0.15, 0), emit_controller=arcade.EmitMaintainCount(60), particle_factory=lambda emitter: AnimatedAlphaParticle( filename_or_texture=random.choice(CLOUD_TEXTURES), change_xy=(_Vec2(arcade.rand_in_circle((0.0, 0.0), 0.04)) + _Vec2(0.1, 0)).as_tuple(), start_alpha=0, duration1=random.uniform(5.0, 10.0), mid_alpha=255, duration2=random.uniform(5.0, 10.0), end_alpha=0, center_xy=arcade.rand_in_circle((0.0, 0.0), 50) ) ) self.emitters.append(self.cloud)
def emitter_27(): """Maintain a steady count of particles""" e = arcade.Emitter( pos=CENTER_POS, emit_controller=arcade.EmitMaintainCount(3), particle_factory=lambda emitter: arcade.LifetimeParticle( filename_or_texture=TEXTURE, vel=arcade.rand_on_circle(Vec2d.zero(), 2.0), lifetime=random.uniform(1.0, 3.0), )) return emitter_27.__doc__, e
def __init__(self): self.w = 600 self.h = 600 arcade.Window.__init__(self, self.w, self.h, "Particles!") arcade.set_background_color(arcade.color.EERIE_BLACK) # Sprite for particle from image (try changing to other item numbers! 17 is hearts!) self.text_blue = arcade.load_texture( "Sprites/PNG/Items/platformPack_item001.png") # Sprite for particle pregenerated self.text_red = arcade.make_soft_circle_texture(20, arcade.color.RED) self.text_green = arcade.make_soft_square_texture( 50, arcade.color.GREEN, 200, 150) # Timer for cosine/sine purposes later self.timer = 0 # Empty list to store our emitters for easy drawing and updating self.emitters = [] # Make the center, moving emitter self.fountain = arcade.Emitter( center_xy=(self.w / 2, self.h / 2), # Position emit_controller=arcade.EmitInterval( 0.01), # When to make more particles particle_factory=lambda emitter: arcade. FadeParticle( # Type of particle filename_or_texture=self.text_blue, # Particle texture change_xy=arcade.rand_in_circle( (0, 0), 4.5), # Particle velocity lifetime=1.0, # Particle lifetime scale=0.5, # Particle scaling ), ) self.cursor = arcade.Emitter( center_xy=(self.w / 2, self.h / 2), emit_controller=arcade.EmitMaintainCount( 30), # Alway keep 30 on screen particle_factory=lambda emitter: arcade. LifetimeParticle( # Stay bright till end filename_or_texture=self.text_red, change_xy=(random.uniform(-1, 1), random.uniform(-1, 1)), lifetime=random.random( ), # die out at random times, or else this looked weird scale=1, ), ) # Add our current, always-on emitters to the list self.emitters.extend([self.fountain, self.cursor])
def createParticleEmitter(x0, y0, partNB, partSize, partScale, partSpeed, color, startAlpha, endAlpha): e = arcade.Emitter( center_xy=(x0, y0), emit_controller=arcade.EmitMaintainCount(partNB), particle_factory=lambda emitter: arcade.FadeParticle( filename_or_texture=arcade.make_circle_texture(partSize, color), change_xy=arcade.rand_in_circle((0.0, 0.0), partSpeed), lifetime=uniform(0.01, 0.4), scale=partScale, start_alpha=startAlpha, end_alpha=endAlpha, ), ) return e
def generate_smoke(self): """ Particle generator to create smoking wreck """ offset = random.randint(-10, 10) smoke = arcade.Emitter( center_xy=(self.center_x + offset, self.center_y + offset), emit_controller=arcade.EmitMaintainCount(50), particle_factory=lambda emitter: arcade.FadeParticle( filename_or_texture=self.texture_smoke, change_xy=arcade.rand_vec_spread_deg(90, 20, 2), lifetime=random.random() * 2, ), ) self.emitter = smoke return smoke
def create_emitter(self): self.emitter = arcade.Emitter( center_xy=(500, 500), change_xy=(0.15, 0), emit_controller=arcade.EmitMaintainCount(60), particle_factory=lambda emitter: AnimatedAlphaParticle( filename_or_texture=random.choice(CLOUD_TEXTURES), change_xy=(_Vec2(arcade.rand_in_circle((0.0, 0.0), 0.04)) + _Vec2(0.1, 0)).as_tuple(), start_alpha=0, duration1=random.uniform(5.0, 10.0), mid_alpha=255, duration2=random.uniform(5.0, 10.0), end_alpha=0, center_xy=arcade.rand_in_circle((0.0, 0.0), 50) ) )