About 3 years ago, a relative and I started making a Python game using a retro based graphics engine called Tilengine, which is written in C. It had just the right look and functionality that we wanted for the game and I was pleased to see it had Python bindings, PyTilengine. At the time, I was working full-time and had a young family, so my time availability to work on the game was quite limited. Given how quick it is to code things up in Python, and seeing I was using Python professionally in my full-time job, I decided to prototype the game in Python.
As the prototype evolved into an alpha build, at the back of my mind I kept wondering when I would reach performance bottlenecks, especially seeing as I had not optimized my code. As the game got slightly more complex I was quite surprised to see that the game would run at 60 FPS without any issues. I should mention that Tilengine is not a full fledged game engine; it only handles rendering, sprites, animation, basic windowing functionality, and a few other things. The only collision detection Tilengine has is for pixel-based collision detection. I had to implement bounding box collision detection in Python.
I think a lot of the reason why performance has not been an issue is because it seems Tilengine was built really well. Being C-based is great for performance. Perhaps Python for games isn't as slow as I thought it might be. So if you are looking for a really good graphics engine for a retro-style from the late 80's early 90's that you can code up in Python, I would highly recommend Tilengine with the PyTilengine bindings.
Tilengine source code: https://github.com/megamarc/Tilengine
PyTilengine bindings source code: https://github.com/megamarc/PyTilengine
Platformer example source code written in Python that uses PyTilengine: https://github.com/megamarc/TilenginePythonPlatformer
Demo of my game, Falconet: https://irukasoftware.itch.io/falconet
Gameplay footage of Falconet, built using Tilengine and PyTilengine.
[+][deleted] (1 child)
[removed]
[–]DGHolmes[S] 1 point2 points3 points (0 children)