Releases: pygame/pygame
2.0.2.dev2
Pygame 2.0.2.dev2 - Drumroll release
💐💐😉😊💐💐
☕ Cheer Up! 🍵
🍂 ✨ )) ✨ 🍂
🍂┃ (( * ┣┓ 🍂 we have a python3 -m pip install pygame==2.0.2.dev2
🍂┃*💗 ┣┛ 🍂
🍂┗━━┛ 🍂
🎂 For YOU 🍰
💐💐😌😊💐💐
Hello internet strangers. We’re back with a new release, packed with tons of mundane bug fixes and unexciting improvements! It’s been a while since the last release, but in that time pygame development has been moving ahead. This release, 36 contributors (25 new ones!) contributed over 75 pull requests. Since 2.0.1, over 200 files were edited, with more than 16,000 lines added, and more than 7,000 lines deleted.
This is a development pre-release, so we can test out new release machinery. Probably we will do a couple more dev pre-releases, but we hope to have a full 2.0.2 release soon. There's a bunch of PRs still open that we want to help resolve and merge in before that.
So grab a beverage,
and doom scroll our release notes,
we prepared just for you,
(&& those other interweb weirdos)Bug Fixes 🐛
Artisanal source code like ours has the best intentions, but there's nothing like computers to bamboozle our best efforts.
It used to be actual bugs climbing inside the pipe organs programmed to play and the looms programmed to weave, but these days that excuse doesn't really work. Our bad.
Bugs in this 1910 Jacquard loom would be actual bugs
New contributor @mhollands fixed an issue where arcs wouldn’t fully draw in #2480
(See more the video at https://www.youtube.com/watch?v=1PBd3VJrfDw if you're interested)
@ankith26 fixed
- the init systems to prevent bugs from init-quit-init (#2428)
- an error handling bug in pixelarray in #2444
- the pygame default font would break when packaged with PyInstaller (#2604)
@Starbuck5 fixed:
- 20 second load times for SysFont on Mac, and also gave Windows SysFont some love (#2594, #2640).
- A bug where
freetypewould think coordinates of -1 represented an error was fixed in #2576. - A rare segfault in
mixer.pre_init()on Mac, in #2494 - Where window size couldn't be reduced after leaving
SCALEDmode on Windows (#2587) - Exiting fullscreen would put your window at (0, 0) in #2460
- A failure in
display.set_gamma()in #2524 - The pygame.scrap module building properly on Mac and Windows (#2499, #2495).
@MightyJosip fixed duplicate entries in display.list_modes() in #2470
@robertpfeiffer fixed
- IME placement in
SCALEDmode in #2451 - A rare bug where
Color.hsvawould return invalid values in #2467
Sysfont fixes
One module in particular has come a long way in this release — sysfont. Thanks to @Starbuck5
As well as working better on windows and mac... Before, if you requested "Cambria," pygame would silently give out Cambria bold.
(Of course you can still request bold from SysFont and it will hook you up, at least for Cambria)
New Features ✨
@dr0id added
- vector projection to the
Vector2andVector3classes in #2510 - a “touch” attribute to all mouse events in #2514
projected = v3.project(v3) This is useful for collision detection in finding the components in a certain direction (e.g. in direction of the wall). For a more detailed explanation see Wikipedia <https://en.wikipedia.org/wiki/Vector_projection>_.
The .touch attribute is for events that were generated by a touch input device, and not a real mouse. You might want to ignore such events, if your application already handles finger events.
@robertpfeiffer added an exclude argument to pygame.event.get(), allowing inverse filtering, in #2512, with a test in #2546.
@MyreMylar worked on
- changing
mixer.set_reserved()to return the number of channels actually reserved in #2490 - adding an actual implementation to the
forceparameter ofmixer.find_channel()in #2491 Before it simply wasn't implemented, only documented.
@Starbuck5 added
- a namehint argument to
mixer.music.load()for easier loading of music from file-like objects. (#2497) - Vector2 support to the
transform,display, andMaskmodules, as well as keyword argument support to thetransformandMaskmodules (#2536, #2557, #2581)
Internal / Portability
New contributor @Muxelmann fixed the path to homebrew in #2636, fixing some pygame issues on M1 Mac!
New contributor @odidev and @illume added aarch64 wheel build support, along with a docker file, and github actions tests for it in #2610 and #2675
New contributor @fniephaus made a compatibility fix for GraalPython in #2580
@MyreMylar updated the sse2neon header to make it build alpha blitter on arm in #2425
@ankith26 and @illume added github actions, disabled travis builds except arm64 in #2507 and #2600. This was crucial to keep pygame development functional after the shutdown of travis-ci.org.
@Pierre-Sassoulas used their pylint expertise to keep pygame’s code base clean and functional in #2509, #2579, and #2634.
@Starbuck5 added Python 3.10 support in #2586, updated functions to return bools rather than ints in #2534, and moved to SDL 2.0.16 on Windows in #2670.
@illume moved to SDL 2.0.16 on Linux, as well as many other dependency updates, in #2676
Docs
_________________________
=(__ ___ __ __)=
| |
| |
| python -m pygame.docs |
| |
| A large number |
| documentation fixes |
| were made in this |
| release. |
| |
|__ ___ __ _____|
=(_________________________)=@llindstrom, @Pierre-Sassoulas, and @Starbuck5 corrected incorrection information in: #2485, #2582, #2654. @robertpfeiffer added to the TEXTINPUT documentation in #2456.
New contributors @SplatRT, @bambalamm, @Deek80, @NKID00, @MaukWM, and @shawnbyday all cleaned up the documentation with grammar and typo fixes, in: #2431, #2437, #2519, #2555, #2583, #2644. @Starbuck5 contributed to this worthy goal in #2590
New contributor @Grimmys and @Starbuck5 worked on the documentation build system, upgrading it from Sphinx 1 to Sphinx 3, hiding the obsolete Overlay and cdrom modules from the top bar, and adding the --fullgeneration flag to setup.py docs. #2513, #2511, #2617, #2624.
New contributor @Taffer added a page to showcase all of pygame’s named colors, in #2559. When it is live, it will be at https://www.pygame.org/docs/ref/color_list.html.
New contributor @kaiec noticed that SDL_Image, pygame’s image loading backend, supports more than we had documented, so updated the documentation accordingly, in #2619. (We support WebP and SVG, who knew?) New contributor @duthades continued this by adding tests for the new image formats in #2656.
Finally, new contributor @ayushbisht2001 added a nice logo to the README in #2441, sprucing it up nicely.
Type Hints
Typehints got some neat updates in this release as well, so that you can code with pygame in your favourite IDE and you get that sweet auto-correct/autocomplete and type-checking to catch bugs even before they are reported!
New contributor @jakebailey made tons of good typehint fixes in #2537, the most important ones being, correctly exporting submodules in a way that typehints are recognized for the submodules, and generic types used in annotations being fixed to include the missing type params, among other fixes.
New contributors:
- @w-v fix
set_mods()type hint in #2457 - @nathanielconroy less strict type checking for
AbstractGroup.addin #2646 - @sandipanpanda Fixed wrong kwargs types in sprite.pyi in #2652
- @vnmabus Fix syntax for typing AbstractGroup attributes in #2663
- @bydariogamer Update Vector3 overloaded constructor signature in #2674
- @shingo-kagami Fixed
mouse.get_pressed()type hint in #2685
@MyreMylar Add str and RGBA tuple types to freetype/font type hints in #2462, and Correct blits typehint sequence arg to cover blit inputs in #2482
@ankith26 and @zoldalma999 overhauled many incorrect uses of Optional in #2678
Examples
New contributor @jonozw added a needed pg.quit() for IDLE compatibility in the stars example (#2560). Many other examples needed this too, so another expeditious new contributor (@AnudeepGunukula) swept through and made sure it was on every example in #2643.
@MightyJosip fixed a crash in the mask example in #2606.
New contributor @mljli improved the aliens example in #2608, new contributor @njbradley improved the font_viewer example in #2655 (it’s cool check it out), and @Starbuck5 overhauled the chimp example in #2651.
Experimental super secret _sdl2 thi...
2.0.1 - The Age Of Aquarius release
🌺🌻🌹🥀🌷🌼🌸💐💮🌺🌻🌹🥀🌷🌼🌸💐💮🌺🌻
🌼🌸 python3 -m pip install pygame==2.0.1
🌺🌻🌹🥀🌷🌼🌸💐💮🌺🌻🌹🥀🌷🌼🌸💐💮🌺🌻
The Age Of Aquarius,
the northern Winter Solstice,
and the southern Summer Solstice bring us...
a new pygame to play with :)
This is a bug fix release, with a bunch of features and optimizations thrown in for good measure. Thank you to the people reporting issues related to pygame 1 compatibility. Some of them will take a bit longer to discuss, work through, and find solutions. We say goodbye to Travis the CI that served us well. We said goodbye to the pygame discord that had grown too big, only for a few more to have sprouted up in its place. We said hello to the patreon.com/pygame and we took a breather for a little bit.
Enough bla bla bla... what's new?
Backwards compatibility fixes
Firstly, a few backwards compatibility fixes have been made.
Dan Lawrence @MyreMylar worked some more on the alpha blitter so it's more compatible.
- Change opaque surface test to use SDL_ISPIXELFORMAT_ALPHA() macro #2269
René Dudfield (@illume) worked on making some old audio driver and video driver names that had been renamed work in backwards compatible env vars, SDL_VIDEODRIVER=windib, SDL_AUDIODRIVER=pulse or dsound #2292
Major event refactor
Ankith (@ankith26) did a major event refactor in #2357 #2404 #2416 and #2398 This not only cleaned up the event processing code, but fixed a bunch of issues an introduced some new features making event processing more comfy along the way.
- #1236 unicode keydown field does not appear occasionally
- #1238 posting keydown events fills the all fields.
- #1524 Unicode property not returned on KEYUP event
- #1550 time.set_timer accept event object
- #2146 Segfault in pygame.event.post() fixed
- #2214 WINDOWEVENT API upgrade
- #2319 event.get(type) does not return a list of all events posted
- #2347 pygame.time.set_timer() accepts loops param
- #2378 unicode keydown field working when mashing 4 keys at once
Here's a graph to treat your eyes, on an event benchmark where getting lots of events has been sped up a lot. As you can see, its a 7 times speed up. There are also less peaks in there, due to less thread locking on the event queue and using batching API calls.
New contributors
Thanks to @bwright8 for adding a unit test for image.load_basic() #2307 and also for adding some Surface.convert tests in #2368.
@kristofszentes made a unit test for image.load_extended() in #2324
Paul m. p. P. (@pmp-p) fixed typo in windib driver handler condition #2342
The Dog Lulu (@iamsoto) updated the TYPE_HEAD macro to use a newer API #2363
@aminouhammou added a unit test for display.gl_get_attribute() #2375
Tom Fryers (@TomFryers) Capitalised "Python" in the import message. #2389
Pierre Sassoulas (@Pierre-Sassoulas) has been working on some code quality fixes using the pylint tool (and apart from these merged PRs working on setting up other code quality tools and a pre-commit checker).
- Add parentheses to print so it works in py2 and py3 #2284
- Merge some comparisons in lists for simplicity #2290
- Change range(len(x)) to enumerate(x) when applicable #2291
- Temporarily skip test_sound_args on windows and Appveyor #2371
Color.update() and Rect.update()
@zoldalma999 (who recently joined the pygame team on github after contributing several high quality patches to pygame) worked on a proposal by David Lönnhager (@dlon) to add Color.update and Rect.update #2277
Vectors already have an update() method. Now Color, and Rect do too :)
>>> c = pygame.Color(0, 0, 0)
>>> c2 = pygame.Color(1, 2, 3, 4)
>>> c
(0, 0, 0, 255)
>>> c.update(c2)
>>> c
(1, 2, 3, 4)
>>> rect = pygame.Rect(0, 0, 1, 1)
>>> rect.update(1, 2, 3, 4)
>>> rect
<rect(1, 2, 3, 4)>
>>> rect = pygame.Rect(0, 0, 1, 1)
>>> rect2 = pygame.Rect(1, 2, 3, 4)
>>> rect.update(rect2)
>>> rect
<rect(1, 2, 3, 4)>@zoldalma999 also worked on:
- the "edit on github" link in the docs was fixed to now point to
mainbranch. #2318 - document that sprite groups are ordered in python 3.6 and above #2336
- Remove unittest skip from freetype_Font_render_to_mono #2351
- Fix render_to returning unpositioned rect #2410
René Dudfield (@illume) was hacking on some things like these:
- Fixing some sysfont test failures #2354
- docs, tests and types for pathlib support #2387
- fix for a gl crash #2394
- SDL 2.0.14, and manylinux improvements (pulseaudio and other deps) #2395
- Fix and skip test failures #2415
SDL 2.0.14
libsdl is a library pygame is built on. It had a new release after almost 9 months of development. The 2.0.14 release notes detail things a little bit. More than 9 months worth of effort is a bit much to explain.
There's been a number of bugs fixed we reported in the pygame 2 series. One of which was pygame.display.update() updating the whole screen on windows. So, now 'dirty rect drawing' is faster again on windows. From the list you'll notice a lot of work went into joystick and game controller improvements. Including support for more than 4 xbox controllers at once on windows. But linux, android, mac, and even freebsd got joystick improvements. On linux the Kernel Mode Setting (KMSDRM) video driver was improved a lot. For retro computing fans, the OS2 port got a lot of love. Lots of portability things were improved, like fixing compilation for M1 CPUs, improving the build system. Raspberry Pi support has been improved, as have most video drivers for other platforms.
Xbox One port
Victor Lopez started on an Xbox one port, and has had some success.
I can confirm Xbox One is able to run the aliens sample with joystick support, audio and sprites, it needs, however, heavy testing.
These are the relevant repositories:
pathlib support for image, sound, and font loading.
pathlib is an object oriented way of doing path handling in python 3 (there's also a backport to python2). Before pygame didn't handle these objects in resource loading functions for image and sound loading. Now it does pathlib!
path = pathlib.Path('.') / "data" / "house_lo.wav"
sound1 = mixer.Sound(path)Thanks to @ankith26 in #2366 and René Dudfield (@illume) in #2387 .
Cursor object API
@Starbuck5 worked on a new Cursor object in #2331
Now you can add system cursors, and color cursors out of surfaces along with the other ones you could draw with ascii art.
box = pygame.cursors.Cursor((10,10), pygame.Surface((20,20)))
pg.mouse.set_cursor(box)
pg.mouse.set_cursor(pg.SYSTEM_CURSOR_NO)
pg.mouse.get_cursor()
>>> <Cursor(type: system, constant: SYSTEM_CURSOR_NO)>- added a link to patreon on github in #2362
- Improved the README.rst by clarifying, restructuring and improving links. #2396
- Cleaned up 'import pygame._view' in packager_imports by removing it. #2384
- Docs build fixes + home for the Korean tutorial #2420
@Starbuck5 added a deprecation warning for mouse.set_system_cursor() #2397 after a long discussion and research with a number of us on if we should have deprecation warnings anyway?.
pygame.draw.rect fixes.
Another project @Starbuck5 worked on was fixing some draw.rect issues in PR #2406 found by @gummbum and @dr0id
This script by @dr0id made it much easier to spot the problems.
@galexandreg worked on text_input documentation improvements on by default, needed for pygame.TEXTINPUT #2333
@robertpfeiffer made a few fixes to issues with android support. Added K_AC_BACK key constant, fixed data_file pruning and "STRIPPED" install #2311
Ankith @ankith26 merged these ones in (whilst also looking at some difficult event posting issues, and cleaning up some image loading code).
- Unittests for event module #2283
- Delete obsolete test/util files #2303
- Documented pygame.image load_basic, load_extended, save_extended. image.c code cleanups. #2270
- Pathlib support for most pygame functions #2366
- Drop PyLong_FromUnicode, removed in python 3.10 #2385
- little music doc fix #2414
@mcpalmer1980 Added experimental relative mouse motion support to video.Window in #2392 They have also been using the experimental _sdl2 features quite a lot and coming up with some good improvements and discussions on that (including a new package!).
Dan Lawrence ( @MyreMylar ) was on a coding rampage and made a number of improvements:
- mixer.music.get_busy() return False when the music is paused #2295
- Small improvement to the get_locks() test #2281
- Interactive test for touch.get_finger() #2279
- Removed the link to the closed Discord server from GitHub #2296 😢
- pygame.midi pass the output buffersize down to portmidi #2272
- interactive test for set_gamma_ramp() #2278
- Rejiged the alpha blitter path logic to cover issue on mac #2345
- Account for mixer.init()/pre_init() returning more channels than asked #2372
- Fix typo in image.frombuffer() type hint #2383
Many many special Thanks go to
- everyone writing up issues, answering questions, sharing your work, or moderating discussions on different forums.
- reviewers including: @illume, @siggisv, @ankith26, @robertpfeiffer, @MyreMylar, @Starbuck5, @pmp-p, and others.
- [patreon.com/pygame](https://pa...
pygame 2.0 - the happy dance birthday release
The 28th of October 2020 is the pygame 2.0 release date, because pygame turns 20 years of age.
,--.
| oo|
| ~~| o o o o o o o o o o o o o
|/\/\|
python3 -m pip install pygame==2.0.0What's the best feature of pygame 2? Maybe it's "backwards compatibility". For many, many apps pygame 2 is backwards compatible. Have an pygame app from the year 2000? It will probably work. We still have some known issues and open backwards compatibility issues(see below), but a lot of things work just as they did before. Yes, we still have python 2 support.
How does one summarize the 3306 changes since we started the pygame 2 series in July of 2018 based on patches going back to 2012 and even earlier?
- Support for Metal, Direct 3d, Vulkan, OpenGL 3.0+ in various profiles (core, compatibility, debug, robust, etc), OpenGL ES, and other modern hardware accelerated video APIs across many platforms.
- SSE2/Neon assembly image drawing. Much faster drawing routines, image loading, and alpha blending.
- Type Hints, for code completion (and to help you make the squiggly lines disappear) in editors and IDEs.
- Code cleanup, using lots of code robustness tools like static analyzers, and automated CI/CD. We've been able to help dozens of people new to community projects contribute. We have lots of work to go on code quality, but we're currently the highest rated Python and highest rate C large project on LGTM.
- Many, many bug fixes including in our pygame.draw routines, pygame.math(for vectors), and pygame.mask for pixel perfect collision detection.
- better support for PyPy (the fast JIT based implementation of python). See our milestone Are we pypy yet? No. for our progress on making PyPy the best python for games.
- libsdl version 2 support. Technically pygame 2.0 still works with SDL 1, but we recommend SDL2 which is vastly improved over SDL1 for most use cases. Probably we will remove SDL 1 support starting pygame 2.1.
- Touch support (multitouch, gestures, etc)
- Audio input support (make games with your microphone!).
- Message alert boxes (Press OK, or Cancel).
- Better keyboard support. Proper unicode input and IME support.
- Much improved game controller support.
- Better image and audio format support. Including: webp, 32bit wav files, and much more reliable mp3 support.
- Multiple display support, and multiple window support (multi window support is still experimental, more will come in pygame 2.1).
- Android support through python for android (fork of pygame subset for android). Better documentation, and better support will come in future releases.
- to make distributing your apps easier, a built in "pyinstaller hook"and compatibility with cxfreeze.
- binary "wheels" on many platforms and versions of python from the old python 2.7 - to the latest python 3.9 (and with pypy!).
- lots of quality of life improvements like
Surface.fill('black')instead ofSurface.fill(pygame.Color(0, 0, 0)). Also keywords are supported for many more function arguments. You can draw rounded corners on rects. - plenty of new examples, like
python3 -m pygame.examples.font_viewer, andpython3 -m pygame.examples.music_drop_fade. Additionally the example source code has been cleaned up a lot to follow a more current python style. - Hundreds of documentation improvements, include a new Korean tutorial.
- a special SCALED mode which takes low pixel games and automatically translates them to a larger window. Imagine your 320x200 resolution game of glorious pixel art... on modern screens that would be a very tiny windows. Now with SCALED it shows up big on a Full HD screen, or even a 4K/8K screen and the translation of mouse coordinates and up-scaling of pixels is done for you (hardware accelerated of course).
That was a summary of some of the goodies in pygame 2. We will be releasing more articles and tutorials on new features as time goes on. You can also look at the previous release notes for more info (see end of this post).
thank you 🎉
Probably one of the better realizations thinking about pygame on its 20th birthday is that there is a much larger group of people who have contributed to crafting pygame in recent years. Some have moved onto other things like jobs, family or writing cookbooks in the Canadian wilderness. Much respect for volunteering time to a community project like pygame.
Firstly thanks to the pygame team members who contributed to the pygame 2 series, new and old...
David Lönnhager (@dlon) | René Dudfield (@illume) | Charles (@charlesej) | Dan Lawrence (@MyreMylar) | Ankith (@ankith26) | Niels Thykier (@nthykier) | Lenard Lindstrom (@llindstrom) | Sigurður Sveinn Halldórsson (@siggisv) | @robertpfeiffer | Josip Komljenović (@MightyJosip) | Travis Chang (@Reminisque) | xFly_Dragon (@husano896) | Adam Andrews (@adamandrews1) | (@galexandreg) | Thiago Jobson (@thiagojobson) | (@mcpalmer1980) | @charlesoblack | Daniel Pope (@lordmauve) | Thomas Kluyver (@takluyver) | @e1000 | Andy Nguyen (@anguye13) | @Starbuck5 | Ian Mallett (@imallett)
Equally important thank you go out to all the other contributors, some of which contributed to a community project for the first time.
Pedro de la Peña @pedrodelapena | @lkito | @khuang0312 | @tsadama | @Bottersnike | @alphaCTzo7G | Amos Bastian (@amosbastian) | Andrey Lopukhov (@AndreyX86) | Augusto Noronha (@augusto2112) | Bernardo Sulzbach (@bernardosulzbach) | (@Bottersnike) | Cai Q.T. (@CAIQT) | (@Cerealdragon) | (@ChrisWeissNike) | (@cmtrapp02) | Daniel Molina (@daniel-molina) | David Caughell (@DavidCaughell) | (@dr0id) | burmer (@dtschirmer) | (@IchMageBaume) | (@LambdaGoblin) | François Magimel (@Linkid) | (@LiquidFenrir) | Mark Hurley (@markph0204) | Marius Gedminas (@mgedmin) | (@metulburr) | Michael Farrell (@micolous) | Dominik George (@Natureshadow) | Nik (@nikolas) | Nunu-Willump (@nunu-willump) | (@pleboulanger) | Rebecca Chen (@rchen152) | (@robertpfeiffer) | Sett (@sw00) | @seenemikk | Nguyễn Gia Phong (@McSinyx)| Sebastian Henz | @BastiHz | Alice Lia Stapleton (@slimelia)
raphacosta27 (@raphacosta27) | Bill (@AdditionalPylons) | Gabriel Moreira (@gabsmoreira) | zoldalma999 (@zoldalma999) | amipy (@amipy) | DGMcKenney (@DGMcKenney) | Grigoris Tsopouridis ((@gtsopus)) | Ilia Gogotchuri (@Gogotchuri) | Jim Quach (@jiquach) | Aaron Li (@AaronLi) | Clark Seanor (@cruxicheiros) | K Duggan (@kduggan15) | Michał Górny (@mgorny) | Clark Seanor (@cruxicheiros) | jtoloff (@jtoloff) | 41aaronb (@41aaronb) | Prasanna Venkatesh (@hanzohasashi33) | zoldalma999 (@zoldalma999) | Nihal Mittal (@codescientist703) | leopoldwe (@leopoldwe) | Scott Noyes (@snoyes)
Vicente González Ruiz (@vicente-gonzalez-ruiz)| Douglas (@douglas-cpp) | wuzh07 (@wuzh07) | Gerardo Antonio Hagad (@ginohagad) | Evan Kanter (@evank28) | Inada Naoki (@methane) | Jani Tiainen (@jtiaicomparison) | Christian Clauss (@cclauss) | Gosha Zacharov (@Gosha) | Steven Chua (@Graphcalibur) | K Duggan (@kduggan15) | PeanutbutterWarrior (@PeanutbutterWarrior) | Nachiket Naganure (@NachiketUN) | Pierre Haou (@pierrehaou) | Daniel Gillet (@dangillet) | Stefano Rivera (@stefanor) | Andre Miras (@AndreMiras) | glennmackintosh (@glennmackintosh) | Vilhelm Prytz (@vilhelmprytz) | DotMars (@dotmars) | Gabriel Duque (@zuh0) | Mark Hurley (@markph0204) | Henrik Petersson (@hnrkcode) | Grigoriy (@flaambe) | Matt Sheppard (@mampersat) | s0lst1ce (@s0lst1ce) | Norman Packard (@nhpackard) | peanutbutterandcrackers (@peanutbutterandcrackers)
A special thanks to all the people who help out others. From making videos, to answering questions, to writing guides (and even whole books). MyreMylar, MichaelCPalmer, jtiai, claudeb, DaFluffyPotato, Rabbid76, The Big Kahuna, sloth, Kingsley, ... and lots of other people. Thanks to the mods on forums, chat rooms and Q&A sites. Special thanks to Zireael07 for cheering on pull requests that people make 🎉 Thanks to people adding support and integration to libraries and tools like pgzero(lordmauve and co), Mu Editor (Nicholas and team), and pymunk (Victor Blomqvist). Very many people have contributed by reporting issues. This is fantastic help for people 👏 👏 👏 Without these issue reports and help in testing bugs and new features many parts simply wouldn't work. Thanks to the SDL folk, to the fluidsynth crew, to numpy devs (Matti and co), python for android, pypy project, and the python community at large. Thanks to the folks running game jams like ludumdare(Mike), pyweek(lordmauve), and alakajam. Thanks to renpytom for pygame subset for android and pygame_sdl2, thanks to Marcus von Appen for pysdl2. Thanks to people sharing your work with others on the pygame website, or on places like the pygame reddit, discord, or youtube. Thanks to the kind folk who work on packaging pygame from Debian, Ubuntu, Arch, FreeBSD, and piwheels (@bennuttall). Thanks for the people teaching and learning with pygame all over the world. Last but not least... a very special thanks to everyone we've missed that should be listed here.
Really. Thank you (you). Thanks.
Known issues
We have an up to date list of issues marked with the Compatibility Python 2 label. These are compatibility issues where something worked in pygame 1, but doesn't work in pygame 2.
At the time of writing this included:
- the pygame.cdrom package not being there (mainly because it isn't in SDL2 anymore).
- pygame.scrap is only working with text, not images (needs some porting and testing done).
- pygame.event.post is having issues with some event types.
- pygame.display.set_palette i...
2.0.0.dev24
python3 -m pip install pygame=2.0.0.dev24
A bunch of fixes and speedups before the release.
Now the default branch on the pygame repo is main.
@MyreMylar Dan Lawrence
- Sets SDL Hint for hidden mouse cursor at window edges when full screen #2254
- Documents that integers underlying key code constants differ between Pygame 1 & 2 #2253
- Updates the joystick docs to include controller mappings for X360 & PS4 controllers #2252
- Updates the docs for toggle_fullscreen() #2251
- New Alpha blitter - fixes and speed ups #2243
@siggisv Sigurður Sveinn Halldórsson
- Add to
test/draw_test.pysome unit tests fordraw.line()#2247
Ankith @ankith26
2.0.0.dev22
python3 -m pip install pygame==2.0.0.dev22
Several very difficult to find and fix issues with alpha blending were fixed in this release.
The new alpha blitter has an SSE2 and arm NEON implementation, and keeps compatibility with pygame 1.
Also some progress on other issues, including these...
2.0.0.dev20
Another crunchy little release. This time more compatible manylinux wheels (Ubuntu 18.04 Bionic and CPUs without SSE 4.2), some documentation improvements, and pygame.midi fixes.
python3 -m pip install pygame==2.0.0.dev202.0.0.dev18
pip install pygame==2.0.0.dev18
This is a small bugfix release to fix a problem with installing pygame from source code.
If 2.0.0.dev16 worked for you, there's no need to upgrade.
2.0.0.dev16
pip install pygame==2.0.0.dev16
The 28th of October 2020 will be the pygame 2.0 release date, because pygame turns 20 years of age. Save the date (maybe we'll do something)!
We reached two important milestones with this pre-release. Firstly the old game 'solarwolf' is working fine with no known issues on pygame 2. The second stone we passed by on the road to PyPy goodness is that we are releasing binary wheels for PyPy on mac, windows, and linux. PyPy is a different implementation of python that is highly compatible and can be extremely fast.
Here's a little youtube video of solarwolf on PyPy and SDL2...
If you watched the video to the end, you'll note there's a crash. We still have some way to go before everything in pygame is working with PyPy. "solarwolf" using cpython and pygame 2 is running deliciously and glitch free.
Critical backwards compatibility fixes for pygame 2
First up, some 'critical' improvements that have been made to pygame. 'critical' labeled issues are ones are backwards incompatible issues stopping a pygame 2 release.
Dan Lawrence @MyreMylar
- Making RLE flags & RLE behaviour more consistent between pygame 1 and pygame 2, so that a lot more types of surfaces draw correctly and that "solarwolf" works really nicely.
Ankith @ankith26
- Fix repeated VIDEOEXPOSE events, so apps do not get dozens of extra nonsensical VIDEOEXPOSE events on Windows.
René Dudfield @illume
- Added portmidi package for conan MacOS so that pygame.midi works on MacOS again.
- Set icon on macos like the other platforms with SDL2, so the default icon is there again for MacOS.
bugs, worms, shiny-shiny, and such
Dan Lawrence @MyreMylar
- Missing mouse_doc.h file
- Fix for missed braces in get_flags()
- Adding a premul_alpha helper method to Color class
- One of the math.c functions still used deprecated UTF functions
René Dudfield @illume
- Test that pygame with SDL2 blit gives same results as SDL1 blit
- CI speedups
- Skip a lot of failing tests on pypy, build pypy wheels on mac+travis
- pypy and manylinux2010 because PyPy needs manylinux2010, an old PR from @takluyver was resurrected and changed a bit so we can use manylinux2010.
- Add Setup.Android.SDL2.in, and default icons to STRIPPED build is an improvement for better Android support.
- Fix docs build failure on Sphinx 3, so we can use the current version of the Sphinx documentation tool.
Josip Komljenović @MightyJosip
- Type hints for Vector swizzles & sprite groups
- draw.line fix with thick lines. More of the line was clipped off on screen borders than expected is a fix for an issue @siggisv found with line drawing.
Sigurður Sveinn Halldórsson @siggisv
Ankith @ankith26
This time 4 'critical' backwards compatibility issues were fixed since the last release.
- 6 open 'critical' issues (backwards compatibility issues reported by people), and 35 closed (last release: 7 open, 32 closed).
- merged PRs
- 2090 Commits since 1.9.6 stable release
- 80 Commits since 2.0.0.dev14 pre release
2.0.0.dev14
pip install pygame==2.0.0.dev14
-- Players, only love you when they're playing
With a very tiny little bit of discussion it was sort of decided that the 28th of October 2020 will be the pygame 2.0 release date, because pygame turns 20.
Critical backwards compatibility fixes for pygame 2
First up, some 'critical' improvements that have been made to pygame. 'critical' labeled issues are ones are backwards incompatible issues stopping a pygame 2 release.
Thanks to Dan Lawrence @MyreMylar for Adding a num_buttons parameter to mouse.get_pressed(). This was a backwards compatibility issue, because it used to return 3 elements. Now it returns 3 elements again by default and you can request 5 if you want. Another critical issue fixed by MyreMylar was a problem with key events being reordered on windows.
But wait... there's more. Another backwards compatibility fix by MyreMylar is the "Backwards compatibility for get_flags() in SDL2" PR, which has stopped some games handling full screen mode properly.
Sigurður Sveinn Halldórsson @siggisv fixed a problem with how pygame.draw.aaline didn't look as before.
Now the anti aliased lines look (and smell) awesome.
bugs, worms, shiny-shiny, and such
Ankith @ankith26
- Some mouse cursors documentation improvements
- Fix pyinstaller issues with pygame.font.Font
- Document some undocumented pygame.image functions
- Update pygame.version.rev docs
- Adding windowevent constants
- Fixes pygame.display failing unit tests on raspberry pi
- Remove ancient file kept for python v2.4 compatibility
Josip Komljenović @MightyJosip
Dan Lawrence @MyreMylar
- GitHub issue templates: New style Part 2
- doc header file regen
- Changed display.set_palette() test to test correct function
Adam Andrews @adamandrews1
- Code cleanup Removed PG_ENABLE_NEWBUF
- Python3 needs bool instead of nonzero
- timeout option added to event.wait() which is useful if you only want your app to wake up when something happens and also at least every 1 second or so.
René Dudfield @illume
- Python 3.9 binary wheels (which is a new release of python).
- Test sdist on CI
- Disable timing based tests on mac CI, because issues
Nguyễn Gia Phong @McSinyx
- Fix mouse.pyi@set_system_cursor type hints
- py.typed for mypy, fix pygame._sdl2 importing touch module type hints
- Clean up README and source distribution
Special thanks to the new contributors
Sebastian Henz @BastiHz
Alice Lia Stapleton @slimelia
This time 4 'critical' backwards compatibility issues were fixed since the last release.
- 7 open 'critical' issues (backwards compatibility issues reported by people), and 32 closed (last release: 9 open, 28 closed).
- merged PRs
- 2008 Commits since 1.9.6 stable release
- 118 Commits since 2.0.0.dev12 pre release
2.0.0.dev12
,--.
| oo|
| ~~| o o o o o o o o o o o
|/\/\|
pip install pygame==2.0.0.dev12Locked in or Locked out? That's not going to stop a new pygame coming out.
The main theme of this release is testing. With many new contributors having worked on unit tests, we can be much more confident that many more features will continue to work with our SDL2 based pygame 2 as in pygame 1 which is based on SDL1. But we also have a few new features, and plenty of bug fixes.
Thanks to everyone for their help with this release.
Critical backwards compatibility fixes for pygame 2
First up, some 'critical' improvements that have been made to pygame. 'critical' labeled issues are ones are backwards incompatible issues stopping a pygame 2 release.
We start with some joystick improvements from Daniel Pope @lordmauve. Add SDL2-specific methods to Joystick; rename event fields. Now joysticks(game pads, drum sets, dance mats) can be hot-plugged, and the game will still work properly.
@robertpfeiffer got posting of keydown events working on SDL2. This is part of the android work that has now been merged into the main branch - but it is also a backwards compatibility fix.
Thanks to Dan Lawrence @MyreMylar for fixing segfaults caused when interacting with display surface after quit, which is mainly useful for when writing unit tests or playing with pygame interactively.
Sometimes writing tests for existing functionality finds real issues and bugs. First @tsadama Added unit tests for display.toggle_fullscreen and display.get_active which uncovered an issue with SDL2. Then Dan Lawrence @MyreMylar Fixed get_active() function so it works as described in docs on windows under SDL2..
Tests
Here we see the amount of unit tests left to write to get full coverage of every pygame method. During this release period you can see a lot of things got new tests. During the testing it uncovered a number of real issues, and some of them were even fixed.
| pygame version | Methods left to test |
|---|---|
| 2.0.0.dev12 | 81 |
| 2.0.0.dev10 | 127 |
| 2.0.0.dev8 | 143 |
| 2.0.0.dev6 | 147 |
| 1.9.6 | 156 |
| 1.9.5 | 155 |
| 1.9.4 | 189 |
| 1.9.3 | 194 |
| 1.9.2 | 194 |
| 1.9.1 | 232 |
| 1.9.0 | 232 |
| 1.8.1 | 25 |
| 1.8.0 | 0 |
The count can be found with the following command run in the pygame code base:
grep todo test/*.py | wc -l
'goodfirstissue' is a label applied to issues which would be good for someone who wants to try contributing to a Free, Open Source, or community project (like pygame). A lot of these issues were written up containing unit tests that needed to be finished off.
Unfortunately we will probably run out of things to test in some months. We hope to prepare new types of 'good first issues', and educational material in other areas next. So that there is something else for people who are interested in contributing as a way to learn. Hopefully we can structure it as a learning pathway, with even some advanced topics.
Thanks to Andy Nguyen @anguye13, who worked on a number of tests in the display, image, and surface areas.
- Unit test for image.save_extended()
- display.set_gamma_ramp() unit test
- Added unit test: surface.get_shifts()
- Added unit test: surface.get_pitch()
Adam Andrews @adamandrews1 worked on the transform, threads parts of the code base. They have also begun work on cleaning up the buffer code, which is in C and kind of complicated. But that work is still waiting, and will likely make it into the next release.
- threads.benchmark_workers and threads.WorkerQueue.do
- pygame.transform.smoothscale
- Reintroduce sizing checks for transform.smoothscale test
Travis Chang @Reminisque
- Added unit test for mouse.get_cursor()
- Add unit test for surface.get_losses
- Add mouse.set_cursor unit test
Dan Lawrence @MyreMylar
- Surface.get_bitsize and Surface.get_bytesize tests
- Surface.test_get_abs_parent and Surface.test_get_abs_offset tests, and fix.
Pedro de la Peña @pedrodelapena
@galexandreg continued to
- Added unit tests for display.toggle_fullscreen and display.get_active
- Added Unit Test for joystick.init()
pygame.joystick tests
@raphacosta27 Add unit test: joystick.quit()
Bill @AdditionalPylons Added unit test: JoystickModuleTest.test_get_count
pygame.display tests
Gabriel Moreira @gabsmoreira Add unit test: display.get_driver
@zoldalma999 Adding unit test to display.iconify
@amipy Added a unit test for display.flip()
@DGMcKenney Adds a unit test of the display.set_icon() function.
Grigoris Tsopouridis @gtsopus Add display.set_gamma unit test
pygame.time tests
Ilia Gogotchuri @Gogotchuri Implemented time.Clock.get_fps unit test
Jim Quach @jiquach Add unit test to Clock.get_rawtime
Aaron Li @AaronLi Added test for time.Clock.tick()
Clark Seanor @cruxicheiros Add basic tests for time.Clock.tick_busy_loop
pygame.threads tests
K Duggan @kduggan15 Adds test for threadloop
Michał Górny @mgorny Replace long-deprecated Thread.isAlive() with .is_alive()
Clark Seanor @cruxicheiros threads.tmap() test and and fix. Unsurfaced bug #1768
pygame.Surface tests
@jtoloff unit test for Surface.get_locks function
@41aaronb Added unit test for the surface.lock() function
other tests
Prasanna Venkatesh @hanzohasashi33 math.Vector.scale_to_length docs and add test for display.set_palette()
@zoldalma999 Add unit test to image.get_extended
Nihal Mittal @codescientist703 Added unit test for pygame.cursors.compile
@leopoldwe Add key.get focused unit test
draw
Josip Komljenović @MightyJosip Fixed drawing of ellipse. No more holes.
Scott Noyes @snoyes draw_py._draw_line: Use correct endpoints during swap
Charles @charlesej Fix aatrigon/aapolygon drawing horizontal edges
Math
Daniel Pope @lordmauve Fix OOB access in math.Vector swizzle; add '0' and '1' swizzles
These will be useful to prepare homogenous coordinates for affine transforms by matrix multiplication. Here is a matrix representing a 2x scale + (3, -1) translation:
>>> import numpy as np
>>> from pygame.math import Vector2
>>> v = Vector2(0.5, 0.8)
>>> mat = np.array([
... [2, 0, 3],
... [0, 2, -1],
... ])
>>> mat @ v.xy1
array([4. , 0.6])

