Keep up-to-date with the latest changes to the Arcade library by the release notes.
The arcade gui should now respect the current viewport
Fixed an issue with UILabel allocating large amounts of textures over time consuming a lot of memory
Fixed an issue with the initial viewport sometimes being 1 pixel too small causing some artifacts
Fixed a race condition in
Sound.stop()sometimes causing a crash
Fixed an issue in requirements causing issues for poetry
Fixed an error reporting issue when reaching maximum texture size
Arcade should now work out of the box on replit.com. We detect when arcade runs in replit tweaking various settings. One important setting we disable is antialiasing since this doesn’t work well with software rendering.
Alternative Garbage Collection of OpenGL Resources
arcade.gl.Context now supports an alternative garbage collection mode more
compatible with threaded applications and garbage collection of OpenGL resources.
OpenGL resources can only be accessed or destroyed from the same thread the
window was created. In threaded applications the python garbage collector
can in some cases try to destroy OpenGL objects possibly causing a hard crash.
This can be configured when creating the
arcade.Window passing in a new
gc_mode parameter. By default his parameter is
the default garbage collection we have in python.
"context_gc" on the other hand will move all “dead” OpenGL
Context.objects. These can be garbage collected manually
Context.gc() in a more controlled way in the the right thread.
Version 2.5.6 was released 2021-03-28
Fix issue with PyInstaller and Pymunk not allowing Arcade to work with bundling
Update some example code. Highlight PyInstaller instructions
Version 2.5.5 was released 2021-02-23
Version 2.5.4 was released 2021-02-19
Add fishy game on example page
Fix but around framebuffer creation not properly restoring active frame buffer
Fix for but where TextureRenderTarget creates FBO twice
Updated pinned version numbers for dependent libraries
Minor improvements around SpriteList list operations
Version 2.5.3 was released 2021-01-27
Fix/improve tetris example
Fix for camera2d.scroll_x
Version 2.5.2 was released 2020-12-27
Improve schedule/unschedule docstrings
Raise error if there are multiple instances of a streaming source
Fix background music example to match new sound API
Update main landing page for docs
Split sprite platformer tutorial into multiple pages
Add ‘related projects’ page
Add ‘adventure’ sample game link
Add resources for top-down tank images
Add turn-and-move example
Fix name of sandCorner_left.png
Update tilemap to error out instead of continuing if we can’t find a tile
Improve view tutorial
Generate error rather than warning if we can’t find image or sound file
Specify timer resolution in Windows
Version 2.5.1 was released 2020-12-14
Version 2.5 was released 2020-12-09
(Note, libraries Arcade depends on do not work yet with Python 3.9 on Mac. Mac users will need to use Python 3.6, 3.7 or 3.8.)
SpriteList.draw now supports a blend_function parameter. This opens up for drawing sprites with different blend modes.
Bugfix: Sprite hit box didn’t properly update when changing width or height
GUI improvements (eruvanos needs to elaborate)
Several examples was improved
Improvements to the pyinstaller tutorial
Better pin versions of depended libraries
Fix issues with simple and platformer physics engines.
Added support for tessellation shaders
arcade.Windownow takes a
gl_versionparameter so users can request a higher OpenGL version than the default
(3, 3)version. This only be used to advanced users.
Bugfix: Geometry’s internal vertex count was incorrect when using an index buffer
We now support 8, 16 and 32 bit index buffers
Optimized several draw methods by omitting
tobytes()letting the buffer protocol do the work
More advanced examples was added to
Version 2.4.3 was released 2020-09-30
Added PyInstalled hook and tutorial
ShapeLists should no longer share position between instances
GUI improvements: new UIImageToggle
Low level rendering api (arcade.gl):
ArcadeContext now has a load_texture method for creating opengl textures using Pillow.
Bug: Fixed an issue related to drawing indexed geometry with offset
Bug: Scissor box not updating when using framebuffer
Bug: Fixed an issue with pack/unpack alignment for textures
Bug: Transforming geometry into a target buffer should now work with byte offset
Bug: Duplicate sprites in ‘check_for_collision_with_list’ Issue #763
Improved docstrings in arcade.gl
Version 2.4.2 was released 2020-09-08
draw_hit_boxesnew method in
draw_pointsnow significantly faster
Added UIToggle, on/off switch
Add example showing how to do GPU transformations with the mouse
Create buttons with default size/position so size can be set after creation.
Allow checking if a sound is done playing Issue 728
Add an early camera mock-up
New example arcade.experimental.examples.3d_cube (experimental)
New example arcade.examples.camera_example
Improved UIManager.unregister_handlers(), improves multi view setup
SpriteListto actually pre-load textures
GUI code clean-up Issue 723
Update downloadable .zip for for platformer example code to match current code in documentation.
draw_pointcalculates wrong point size
Fixed draw_points calculates wrong point size
Fixed create_line_loop for thickness !=
Fixed pixel scale for offscreen framebuffers and read()
Fixed SpriteList iterator is stateful
Fix for pixel scale in offscreen framebuffers
Fix for UI tests
Fix issues with FBO binding
Cleanup Remove old examples and code
Arcade 2.4.1 was released 2020-07-13.
Arcade version 2.4 is a major enhancement release to Arcade.
Version 2.4 Major Features¶
Support for defining your own frame buffers, shaders, and more advanced OpenGL programming. New API in arcade.gl package.
New support for style-able GUI elements. New API in arcade.gui package.
PyMunk engine for platformers. See tutorial: Pymunk Platformer.
AStar algorithm for finding paths. See
For an example of using the A-Star algorithm, see A-Star Path Finding.
Version 2.4 Minor Features¶
Added get_display_size() to get resolution of the monitor
Added Window.center_window() to center the window on the monitor.
Added has_line_of_sight() to calculate if there is line-of-sight between two points.
Added SpriteSolidColor class that makes a solid-color rectangular sprite.
Added SpriteCircle class that makes a circular sprite, either solid or with a fading gradient.
get_distancefunction to get the distance between two points.
Support for logging. See Logging.
Support volume and pan arguments in play_sound
Add ability to directly assign items in a sprite list. This is particularly useful when re-ordering sprites for drawing.
Support left/right/rotated sprites in tmx maps generated by the Tiled Map Editor.
Support getting tmx layer by path, making it less likely reading in a tmx file will have directory confusion issues.
Add in font searching code if we can’t find default font when drawing text.
arcade.Sprite.draw_hit_boxmethod to draw a hit box outline.
hit_box_detailparameters for hit box calculation.
Version 2.4 Under-the-hood improvements¶
Simple Physics engine is less likely to ‘glitch’ out.
Anti-aliasing should now work on windows if
antialiasing=Trueis passed in the window constructor.
Major speed improvements to drawing of shape primitives, such as lines, squares, and circles by moving more of the work to the graphics processor.
Speed improvements for sprites including gpu-based sprite culling (don’t draw sprites outside the screen).
Speed improvements due to shader caching. This should be especially noticeable on Mac OS.
Speed improvements due to more efficient ways of setting rendering states such as projection.
Speed improvements due to less memory copying in the lower level rendering API.
A brand new low level rendering API wrapping OpenGL 3.3 core was added in this release. It’s loosely based on the ModernGL API, so ModernGL users should be able to pick it up fast. This API is used by arcade for all the higher level drawing functionality, but can also be used by end users to really take advantage of their GPU. More guides and tutorials around this is likely to appear in the future.
A simplified list of features in the new API:
arcade.ArcadeContextobject was introduced and can be found through the
window.ctxproperty. This object offers methods to create opengl resources such as textures, programs/shaders, framebuffers, buffers and queries. It also has shortcuts for changing various context states. When working with OpenGL in arcade you are encouraged to use
pyglet.gl. This is important as the context is doing quite a bit of bookkeeping to make our life easier.
Textureclass supporting a wide variety of formats such as 8/16/32 bit integer, unsigned integer and float values. New convenient methods and properties was also added to change filtering, repeat mode, read and write data, building mipmaps etc.
Bufferclass with methods for manipulating data such as simple reading/writing and copying data from other buffers. This buffer can also now be bound as a uniform buffer object.
Framebufferwrapper class making us able to render any content into one more more textures. This opens up for a lot of possibilities.
Programhas been expanded to support geometry shaders and transform feedback (rendering to a buffer instead of a screen). It also exposes a lot of new properties due to much more details introspection during creation. We also able to assign binding locations for uniform blocks.
A simple glsl wrapper/parser was introduced to sanity check the glsl code, inject preprocessor values and auto detect out attributes (used in transforms).
A higher level type
Geometrywas introduced to make working with shaders/programs a lot easier. It supports using a subset of attributes defined in your buffer description by inspecting the the program’s attributes generating and caching compatible variants internally.
Queryclass was added for easy access to low level measuring of opengl rendering calls. We can get the number samples written, number of primitives processed and time elapsed in nanoseconds.
Added support for the buffer protocol. When
arcade.glrequires byte data we can also pass objects like numpy array of pythons
array.arraydirectly not having to convert this data to bytes.
Version 2.4 New Documentation¶
New Tutorial: Pymunk Platformer
New Tutorial: Using Views for Start/End Screens
New Tutorial: Solitaire
New Tutorial: GPU Particle Burst
Several new and updated examples on How-To Example Code
A lot of improvements to https://learn.arcade.academy
Version 2.4 ‘Experimental’¶
There is now an
arcade.experimental module that holds code still under
development. Any code in this module might still have API changes.
Release Date: Apr-14-2020
Release Date: Apr-9-2020
Bug Fix: Another attempt at fixing sprites with different dimensions added to same SpriteList didn’t display correctly Issue 630
Add lots of unit tests around Sprites and texture loading.
Release Date: Apr-8-2020
Bug Fix: Sprites with different dimensions added to same SpriteList didn’t display correctly Issue 630
Release Date: Apr-8-2020
Enhancement: Support more textures in a SpriteList Issue 332
Release Date: Apr-5-2020
Bug Fix: Fix procedural_caves_bsp.py
Bug Fix: Improve Windows install docs Issue 623
Release Date: Mar-31-2020
Bug Fix: Remove unused AudioStream and PlaysoundException from __init__
Remove attempts to load ffmpeg library
Add background music example
Bug Fix: Improve Windows install docs Issue 619
Add tutorial on edge artifacts Issue 418
Bug Fix: Can’t remove sprite from multiple lists Issue 621
Several documentation updates
Release Date: Mar-25-2020
Bug Fix: Fix for calling SpriteList.remove Issue 613
Bug Fix: get_image not working correctly on hi-res macs Issue 594
Bug Fix: Fix for “shiver” in simple physics engine Issue 614
Bug Fix: Fix for create_line_strip Issue 616
Bug Fix: Fix for volume control Issue 610
Bug Fix: Fix for loading SoLoud under Win64 Issue 615
Fix jumping/falling texture in platformer example
Add tests for gui.theme Issue 605
Fix bad link to arcade.color docs
Release Date: Mar-09-2020
Major enhancement to sound. Uses SoLoud cross-platform library. New features include support for sound volume, sound stop, and pan left/right.
Release Date: Feb-27-2020
Release Date: Feb-17-2020
Release Date: Feb-12-2020
Bug Fix: Calling sprite.draw wasn’t drawing the sprite if scale was 1 Issue 575
Add unit test for Issue 575
Bug Fix: Changing sprite scale didn’t cause sprite to redraw in new scale Issue 588
Add unit test for Issue 588
Enhancement: Simplify using built-in resources Issue 576
Fix for failure on on_resize(), which pyglet was quietly ignoring
rotate_pointfunction to make it more obvious it takes degrees
Release Date: Feb-08-2020
Bug Fix: set_scale checks height rather than scale Issue 578
Bug Fix: Window flickers for drawing when not derived from Window class Issue 579
Enhancement: Allow joystick selection in dual-stick shooter Issue 571
Test coverage reporting now working correctly with TravisCI
Improved test coverage
Improved documentation and typing with Texture class
Improve minimal View example
Release Date: Feb-01-2020
Remove scale as a parameter to load_textures because it is not unused
Add example for acceleration/friction
Release Date: Jan-30-2020
Don’t auto-update sprite hit box with animated sprite
Fix issues with sprite.draw
Improve error message given when trying to do a collision check and there’s no hit box set on the sprite.
Release Date: Jan-30-2020
Backwards Incompatability: arcade.Texture no longer has a scale property. This property made things confusing as Sprites had their own scale attribute. This seemingly small change required a lot of rework around sprites, sprite lists, hit boxes, and drawing of textured rectangles.
Include all the things that were part of 2.2.8, but hopefully working now.
Bug Fix: Error when calling Sprite.draw() Issue 570
Enhancement: Added Sprite.draw_hit_box to visually draw the hit box. (Kind of slow, but useful for debugging.)
Release Date: Jan-28-2020
Roll back to 2.2.7 because bug fixes in 2.2.8 messed up scaling
Release Date: Jan-27-2020
Version number now contained in one file, rather than three.
Enhancement: Move several GitHub-listed enhancements to the .rst enhancement list
Bug Fix: Texture scale not accounted for when getting height Issue 516
Bug Fix: Issue with text cut off if it goes below baseline Issue 515
Enhancement: Allow non-cached texture creation, fixing issue with resizing Issue 506
Enhancement: Physics engine supports rotation
Bug Fix: Need to better resolve collisions so sprite doesn’t get hyper-spaces to new weird spot Issue 569
Bug Fix: Hit box not getting properly created when working with multi-texture player sprite. Issue 568
Bug Fix: Issue with text_sprite and anchor y of top Issue 567
Bug Fix: Issues with documentation
Release Date: Jan-25-2020
Enhancement: Have draw_text return a sprite Issue 565
Enhancement: Improve speed when changing alpha of text Issue 563
Enhancement: Add dual-stick shooter example Issue 301
Bug Fix: Fix for Pyglet 2.0dev incompatability Issue 560
Bug Fix: Fix broken particle_systems.py example Issue 558
Enhancement: Added mypy check to TravisCI build Issue 557
Enhancement: Fix typing issues Issue 537
Enhancement: Optimize load font in draw_text Issue 525
Enhancement: Reorganize examples
Bug Fix: get_pixel not working on MacOS Issue 539
Release Date: Jan-20-2020
Bug Fix: particle_fireworks example is not running with 2.2.5 Issue 555
Bug Fix: Sprite.pop isn’t reliable Issue 531
Enhancement: Raise error if default font not found on system Issue 432
Enhancement: Add space invaders clone to example list Issue 526
Enhancement: Add sitemap to website
Enhancement: Improve performance, error handling around setting a sprite’s color
Enhancement: Implement optional filtering parameter to SpriteList.draw Issue 405
Enhancement: Return list of items hit during physics engine update Issue 401
Enhancement: Update resources documentation Issue 549
Enhancement: Add on_update to sprites, which includes delta_time Issue 266
Enhancement: Close enhancement-related github issues and reference them in the new Enhancement List.
Release Date: Jan-17-2020
Release Date: Jan-15-2020
Enhancement: Moving sprites now 20% more efficient.
Release Date: Jan-12-2020
Bug fix: Hit boxes not getting updated with rotation and scaling. Issue 548 This update depricates Sprite.points and instead uses Sprint.hit_box and Sprint.get_adjusted_hit_box
Major internal change around not having
import *but specifically name everything. Issue 537 This rearranded a lot of files and also reworked the quickindex in documentation.
Release Date: Jan-09-2020
Bug fix: Arcade assumes tiles in tileset are same sized Issue 550
Release Date: Dec-22-2019
Bug fix: Resource folder not included in distribution Issue 541
Release Date: Dec-19-2019*
Major Enhancement: Add built-in resources support Issue 209 This also required many changes to the code samples, but they can be run now without downloading separate images.
Major Enhancement: Auto-calculate hit box points by trimming out the transparency
Major Enhancement: Sprite sheet support for the tiled map editor works now
load_spritesheetfor loading images from a sprite sheet
Enhancement: Updates to physics engine to better handle non-rectangular sprites
Enhancement: Add SpriteSolidColor class, for creating a single-color rectangular sprite
Enhancement: Add font_color to gui.TextButton init Issue 521
Enhancement: Improve error messages around loading tilemaps
Bug fix: Turn on vsync as it sometimes was limiting FPS to 30.
Bug fix: get_tile_by_gid() incorrectly assumes tile GID cannot exceed tileset length Issue 527
Bug fix: Tiles in object layers not placed properly Issue 536
Bug fix: Typo when loading font Issue 518
Add robots.txt to documentation
Please also update pyglet, pyglet_ffmpeg2, and pytiled_parser libraries.
Special tanks to Jon Fincher, Mr. Gallo, SirGnip, lubie0kasztanki, and EvgeniyKrysanoc for their contributions to this release.
Fix: Default font sometimes not pulling on mac Issue 488
Documentation updates, particularly around examples for animated characters on platformers
Fix to Sprite class to better support character animation around ladders
Fix: Error when importing arcade on Raspberry Pi 4 Issue 485
Fix: Transparency not working in draw functions Issue 489
Fix: Order of parameters in draw_ellipse documentation Issue 490
Raise better error on data classes missing
Lots of code cleanup from SirGnip Issue 484
New code for buttons and dialog boxes from wamiqurrehman093 Issue 476
Added pytiled-parser as a dependency in setup.py
New file reader for tmx files http://arcade.academy/arcade.html#module-arcade.tilemap
Add new view switching framework http://arcade.academy/examples/index.html#view-management
Fix and Re-enable TravisCI builds https://travis-ci.org/pvcraven/arcade/builds
New: Collision methods to Sprite Issue 434
Fix: make_circle_texture Issue 431
Fix: Points drawn as triangles rather than rects Issue 429
Fix: Fix screen update rate issue Issue 424
Fix: Typo Issue 422
Put in exampel Kayzee game
Fix: Add links to PyCon video Issue 414
Fix: Docstring Issue 409
Fix: Typo Issue 403
Thanks to SirGnip, Mr. Gallow, and Christian Clauss for their contributions.
Fix: Unable to specify path to .tsx file for tiled spritesheet Issue 360
Fix: TypeError: __init__() takes from 3 to 11 positional arguments but 12 were given in text.py Issue 373
Fix: Test create_line_strip Issue 379
Fix: TypeError: draw_rectangle_filled() got an unexpected keyword argument ‘border_width’ Issue 385
Fix: See about creating a localization/internationalization example Issue 391
Fix: Glitch when you die in the lava in 09_endgame.py Issue 392
Fix: No default font found on ArchLinux and no error message (includes patch) Issue 402
Fix: Update docs around batch drawing and array_backed_grid.py example Issue 403
Add example code from lixingque
Fix: Drawing primitives example broke in prior release Issue 365
Update: Improve automated testing of all code examples Issue 326
Update: raspberry pi instructions, although it still doesn’t work yet
Fix: Some buffered draw commands not working Issue 368
Remove yml files for build environments that don’t work because of OpenGL
Update requirement.txt files
Fix mountain examples
Better error handling when playing sounds
Remove a few unused example code files
Version 2.0.2 was compiled off the wrong branch, so it had a bunch of untested code. 2.0.3 is what 2.0.2 was supposed to be.
Lots of improvements in 2.0.0. Too many to list, but the two main improvements:
Using shaders for sprites, making drawing sprites incredibly fast.
Using ffmpeg for sound.
Bux fix for spatial hashing
Implement commands for getting a pixel, and image from screen
Bug fixes for spatial hashing and sound.
Issue 159: Fix array backed grid buffer example
Issue 177: Kind of fix issue with gi sound library
Issue 180: Fix up API docs with sound
Issue 198: Add start of isometric tile support
Issue 210: Fix bug in MacOS sound handling
Issue 213: Update code with gi streamer
Issue 214: Fix issue with missing images in animated sprites
Issue 216: Fix bug with venv
Issue 222: Fix get_window when using a Window class
Issue 184: For sound, wav, mp3, and ogg should work on Linux and Windows. wav and mp3 should work on Mac.
Add happy face drawing example
Link the class methods in the quick index to class method documentation
Add mountain midpoint displacement example
Add “Two Worlds” example game
Update quick-links on homepage of http://arcade.academy
Update Sprite class documentation
Update copyright date to 2018
Update PyMunk example code to use keyboard constants rather than hard-coded values
New sample code showing how to avoid placing coins on walls when randomly placing them
Improve listing/organization of sample code
Work at improving sample code, specifically try to avoid using
Add PyMunk platformer sample code
Unsuccessful work at getting TravisCI builds to work
Add new sample for using shape lists
Create sample code showing difference in speed when using ShapeLists.
Issue 182: Use explicit imports in sample PyMunk code
Improve sample code for using a graphic background
Improve collect coins example
New sample code for creating caves using cellular automata
New sample code for creating caves using Binary Space Partitioning
New sample code for explosions
Issue 84: Allow quick running via -m
Issue 149: Need better error message with check_for_collision
Issue 151: Need example showing how to go between rooms
Issue 152: Standardize name of main class in examples
Issue 154: Improve GitHub compatibility
Issue 155: Improve readme documentation
Issue 156: Clean up root folder
Issue 162: Add documentation with performance tips
Issue 164: Create option for a static sprite list where we don’t check to see if things moved.
Issue 165: Improve error message with physics engine
Issue 147: Fix bug building documentation where two image files where specified incorrectly
Issue 146: Add release notes to documentation
Issue 144: Add code to get window and viewport dimensions
Issue 139: Add documentation on what
Issue 131: Add example code on how to do full-screen games
Issue 113: Add example code showing enemy turning around when hitting a wall
Issue 67: Improved support and documentation for joystick/game controllers