<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2026-03-03T16:52:48+00:00</updated><id>/feed.xml</id><title type="html">PursuedPyBear</title><subtitle>Unbearably Fun Game Development</subtitle><entry><title type="html">Binny’s Birthday Jam</title><link href="/2022/02/02/bbj-2022.html" rel="alternate" type="text/html" title="Binny’s Birthday Jam" /><published>2022-02-02T00:00:00+00:00</published><updated>2022-02-02T00:00:00+00:00</updated><id>/2022/02/02/bbj-2022</id><content type="html" xml:base="/2022/02/02/bbj-2022.html"><![CDATA[<p>Happy birthday, Binny! 🥳</p>

<p>Binny is the PPB mascot! We have an <a href="https://ppb.dev/binny.html">information page</a> about them, and we celebrate their birthday on March 22nd: The day of PursuedPyBear’s first commit! (e88f5ec46831c57f658b96d9eaaa35da86652bdd, for those that are curious.)</p>

<p>And how does a game engine celebrate a birthday? With a game jam!</p>

<p>So, it is our pleasure to announce Binny’s Birthday <del>Bash</del> Jam!</p>

<p>(<a href="https://itch.io/jam/binnys-birthday-jam-2022">Jam Page</a>)</p>

<p>This year, it will take place from March 3rd to March 19th over on Itch.io! We suggest spending about 72 hours working on your game, using whatever schedule you’d like.</p>

<p>This is meant to be a fun jam, with the only hard rule being that you use the PursuedPyBear game engine.</p>

<p>It is open to everyone everywhere in the world, ages 13 and up.</p>

<p>As always, you can find help in our <a href="https://discord.gg/NXgRyewHtJ?event=938579173293817856">Discord</a>.</p>]]></content><author><name>Jamie</name></author><category term="gamejams" /><summary type="html"><![CDATA[Happy birthday, Binny! 🥳]]></summary></entry><entry><title type="html">No Release, Try out ppb 1.0!</title><link href="/2021/09/22/no-fall-release.html" rel="alternate" type="text/html" title="No Release, Try out ppb 1.0!" /><published>2021-09-22T00:00:00+00:00</published><updated>2021-09-22T00:00:00+00:00</updated><id>/2021/09/22/no-fall-release</id><content type="html" xml:base="/2021/09/22/no-fall-release.html"><![CDATA[<p>Keeping this short:</p>

<p>PursuedPyBear 1.0.0 was very late, and the maintainers have been focusing on other projects since then.
As such, no work was done with the remainder of this release cycle!</p>

<p>So no 1.1 this week. Keep an eye on the Southern Solstice for our next release.</p>

<p>Continue to try out ppb 1.0, and give us feedback in the <a href="https://discord.gg/uDbauD5">discord</a> or via the <a href="https://github.com/ppb/pursuedpybear/issues">issues tab</a>.</p>]]></content><author><name>Piper</name></author><category term="ppb" /><category term="releases" /><summary type="html"><![CDATA[Keeping this short:]]></summary></entry><entry><title type="html">Help Make 1.0 the Best It Can Be</title><link href="/2021/05/27/help-1-0.html" rel="alternate" type="text/html" title="Help Make 1.0 the Best It Can Be" /><published>2021-05-27T00:00:00+00:00</published><updated>2021-05-27T00:00:00+00:00</updated><id>/2021/05/27/help-1-0</id><content type="html" xml:base="/2021/05/27/help-1-0.html"><![CDATA[<p>The official countdown to 1.0 has begun! Last night we released <a href="https://pypi.org/project/ppb/1.0b1/">ppb v1.0b1</a>!
We really want 1.0 to be the best release ppb has every had, and so we need your help! You can get yourself a
contribution credit (no contribution is too small!) and make ppb better at the same time.</p>

<p>With the release of our beta, we’re in
<a href="https://ppb.readthedocs.io/en/stable/discussion/maintenance-schedules.html#release-schedules">feature freeze</a>,
so contributions will be focused on bug fixes, documentation, and examples.</p>

<h2 id="contributing-examples">Contributing Examples</h2>

<p>We like example code! If there’s a thing you figured out how to do and want to contribute, you can submit a PR with
a new example folder. Name the nested folder with the feature set, mechanic, or task you’re showing off. Inside
your example folder you can name your assets and scripts whatever you like, but include a README.md to explain how
to run your example and what you’re trying to do!</p>

<p>Our expectations are that your example does something different from the other examples, that it runs in every version
of Python that ppb supports (we go back to 3.6 right now), and we’d like the code to be readable. We’ll coach you
to the last one if something is confusing.</p>

<h2 id="bug-fixes">Bug Fixes</h2>

<p>Any bugs discovered while testing out ppb should be reported, either to the
<a href="https://github.com/ppb/pursuedpybear/issues">github issue tracker</a> or to the it-didnt-work channel in the
<a href="https://discord.gg/uDbauD5">ppb discord</a>. We’ll confirm and mark the issue.</p>

<p>Want to <em>fix</em> bugs? Check out the <a href="https://github.com/ppb/pursuedpybear/issues?q=is%3Aissue+is%3Aopen+label%3Abug">bug label</a>
on the issue tracker. Anything there can be fixed during freeze, and any new bugs surfaced during the process are
eligible as well.</p>

<p>Our expectations are tests regarding the error, and the code fix. Otherwise, keep it PEP-8ish and we’re happy to answer
questions on the issue or in the #development channel on discord.</p>

<h2 id="improving-the-documentation">Improving the Documentation</h2>

<p>This is the big lift: We want to polish our docs. Piper is tasked with a reference guide to discuss the overall ppb
architecture and a pong tutorial. Outside of that, we could use how-tos and cookbook entries, other tutorials, and
better onboarding documentation for all situations: learning ppb, contributing to ppb, and joining the community.</p>

<h3 id="tutorials">Tutorials</h3>

<p>A tutorial should take between 30 minutes and 4 hours and present a complete working project. By that, we mean a functioning
video game you can play. You may reference prerequisites (don’t feel like you need to explain event handling in every tutorial)
and only focus on the part of the tutorial you’re going for. Make sure each tutorial has an introduction that explains
its goals, what external tools you’ll need, and the basic outline. From there, you may break up your tutorial however you see fit.</p>

<p>If its across multiple pages, please add a subdirectory in the tutorials documentation, just to keep the files nicely ordered.</p>

<h3 id="cookbookhow-to">Cookbook/How-To</h3>

<p>We need a lot of these! Anything you might need to do in a game could conceivably have a related how-to article. How-to articles
are <em>short</em>. No more than 10-20 minutes to complete, and should show actual code and explanation to do a specific task. For
example “How to fix your UI elements to the camera” could be a How-To article.</p>

<p>Cross reference with the API documentation for any built in features you’re using.</p>

<h2 id="in-closing">In Closing</h2>

<p>Don’t worry about getting it right the first time. The maintainers will be glad to help you through the process of hitting the
above goals, we just would like to see as much of these done as possible.</p>

<p>And if you’re a new contributor? Don’t forget to add yourself to the CONTRIBUTORS.md file!</p>]]></content><author><name>Piper</name></author><category term="ppb" /><category term="releases" /><summary type="html"><![CDATA[The official countdown to 1.0 has begun! Last night we released ppb v1.0b1! We really want 1.0 to be the best release ppb has every had, and so we need your help! You can get yourself a contribution credit (no contribution is too small!) and make ppb better at the same time.]]></summary></entry><entry><title type="html">PPB at PyCon US</title><link href="/2021/04/26/pycon.html" rel="alternate" type="text/html" title="PPB at PyCon US" /><published>2021-04-26T00:00:00+00:00</published><updated>2021-04-26T00:00:00+00:00</updated><id>/2021/04/26/pycon</id><content type="html" xml:base="/2021/04/26/pycon.html"><![CDATA[<p>We are very proud to announce that PursuedPyBear will be at <a href="https://us.pycon.org/2021/">PyCon US 2021</a>, in booth and sprint forms!</p>

<h2 id="booth">Booth</h2>

<p>PPB has a booth! As the conference is virtual, so is the booth. But this will be the best way to chat with us about PPB, gamedev in Python, or anything else.</p>

<p>We’re also working on some goodies. You’ll have to come visit to find out. 😉</p>

<h2 id="sprints">Sprints</h2>

<p>As in previous years, PPB will be hosting sprints!</p>

<p>Unique to PPB, we encourage all kinds of ppb-related activities:</p>

<ul>
  <li>Core development</li>
  <li>Documentation</li>
  <li>Strange hacking (Moshe’s <a href="https://github.com/ppb/txpursuedpybear">txpursuedpybear</a> and Jupyter notebook integrations came out of sprints)</li>
  <li>Just making games</li>
</ul>

<p>All of these are valuable to us, so we encourage any of them! All skill levels are welcome.</p>

<h2 id="one-last-thing">One Last Thing</h2>

<p>1.0 is coming this June! So these sprints are one last chance to get all the details in order for our big debut.</p>

<p>We’re hoping to have a lot of the breaking changes done before PyCon, but we could always use more help looking in strange corners. Look for the pre-conference alpha release.</p>]]></content><author><name>Jamie</name></author><category term="pycon" /><summary type="html"><![CDATA[We are very proud to announce that PursuedPyBear will be at PyCon US 2021, in booth and sprint forms!]]></summary></entry><entry><title type="html">June Solstice 2020 Release: More Rendering Options</title><link href="/2020/06/20/release.html" rel="alternate" type="text/html" title="June Solstice 2020 Release: More Rendering Options" /><published>2020-06-20T00:00:00+00:00</published><updated>2020-06-20T00:00:00+00:00</updated><id>/2020/06/20/release</id><content type="html" xml:base="/2020/06/20/release.html"><![CDATA[<p>This has been an exciting release cycle! Most of our focus has been on things interacting with the Renderer, so let’s go down the list.</p>

<h2 id="text-rendering">Text Rendering</h2>

<p>We finally support text rendering! We don’t support system fonts, so you’ll need to include your .ttf or .otf files with the rest of
your resources just like <a href="https://ppb.readthedocs.io/en/stable/reference/assets.html#ppb.Image">images</a> or 
<a href="https://ppb.readthedocs.io/en/stable/reference/sound.html#ppb.Sound">sounds</a>.</p>

<p>Just like the rest of ppb, text resizes based on the shape of your sprite, and it attempts to fill the space.</p>

<h2 id="rectangular-sprites">Rectangular Sprites</h2>

<p>In tackling text rendering, it became required to loosen the restrictions on the shapes of Sprites. As such, we now support rectangular
sprites as well as square ones. The default <code class="language-plaintext highlighter-rouge">Sprite</code> is still a square, but you can also use <code class="language-plaintext highlighter-rouge">ppb.RectangleSprite</code> to manage things that
aren’t square.</p>

<p>Part of this refactor included doing away with the <code class="language-plaintext highlighter-rouge">Sides</code> interface: instead of <code class="language-plaintext highlighter-rouge">Sprite.top.left</code> it’s <code class="language-plaintext highlighter-rouge">Sprite.top_left</code>.</p>

<h2 id="cameras">Cameras</h2>

<p>ppb has long supported a basic software camera as part of its rendering process. Building levels bigger than your viewport is much
more simple than in other libraries since the constructs already exist. That said, the original camera was somewhat ugly. You had
to know and understand the difference between the window screen space and the in-game coordinate grid.</p>

<p>The good news: we rebuilt the camera. Now, it’s width and height attempt to approximate the actual dimensions of the window, translated
into game space. So if you test collision between the camera and an object, you’ll know if the object is visible on screen.</p>

<p>The bad news: In order to make the Camera work as well as it does, it gets added to new scenes by the Renderer during the SceneStarted
event. So instead of setting up your camera in <code class="language-plaintext highlighter-rouge">Scene.__init__</code> you should do your initialization in <code class="language-plaintext highlighter-rouge">Scene.on_scene_started</code>.</p>

<h2 id="renderer-changes">Renderer changes</h2>

<p>This will be short and sweet:</p>

<p>We removed the DoNotRender flag. A Sprite with an image of <code class="language-plaintext highlighter-rouge">None</code> simply won’t render.</p>

<p>We added some initial (and optional) hooks for tinting your sprites and setting the render opacity of your sprites. Include
<code class="language-plaintext highlighter-rouge">Sprite.tint</code> with a 3 tuple color (r, g, b all in the range 0-255) to tint. <code class="language-plaintext highlighter-rouge">Sprite.opacity</code> with a value between 0 and 255 to
change the opacity of a render.</p>

<p>See the detailed change log on github and get the latest version of ppb with <code class="language-plaintext highlighter-rouge">pip install ppb</code>.</p>]]></content><author><name>Piper</name></author><category term="ppb" /><category term="releases" /><summary type="html"><![CDATA[This has been an exciting release cycle! Most of our focus has been on things interacting with the Renderer, so let’s go down the list.]]></summary></entry><entry><title type="html">Spring 2020 Release: PySDL</title><link href="/2020/04/19/release.html" rel="alternate" type="text/html" title="Spring 2020 Release: PySDL" /><published>2020-04-19T00:00:00+00:00</published><updated>2020-04-19T00:00:00+00:00</updated><id>/2020/04/19/release</id><content type="html" xml:base="/2020/04/19/release.html"><![CDATA[<p>And we’re back! After a bit of a hiatus, the team has a new release for you. There’s two significant things to talk about: dramatic optimizations of the event dispatch, and replacing PyGame with PySDL2. This also allows Python 3.8!</p>

<p>First, the simple one: event dispatch performance was dramatically optimized, because the performance of the previous method was just <em>bad</em>.</p>

<p>The big thing is that PursuedPyBear no longer depends on PyGame and uses PySDL2 instead. This was done because PyGame has never supported Python 3.8 in a final release, despite 3.8.0 being released in October, 2019. We are now using PySDL2 instead. This should require no changes from our uses, although Linux uses will require additional steps to install the SDL libraries (see the <a href="https://ppb.readthedocs.io/en/stable/getting-started.html#installing-ppb">installation instructions</a>).</p>

<p>Additionally, a pass was made at improving the docs: Double checking the accuracy of existing documentation, adding detailed documentation to <code class="language-plaintext highlighter-rouge">ppb.engine.GameEngine</code> and adding our first discussion pages. One discussing the design and constraints of the Asset system and another outlining the principles of ppb as a project.</p>

<p>We anticipate this release to have no impact on the vast majority of users, and minimal impact on the rest.</p>

<p>The detailed changelog can be found in the <a href="https://github.com/ppb/pursuedpybear/releases/tag/v0.8.0">GitHub Release</a>.</p>]]></content><author><name>Jamie</name></author><category term="ppb" /><category term="releases" /><summary type="html"><![CDATA[And we’re back! After a bit of a hiatus, the team has a new release for you. There’s two significant things to talk about: dramatic optimizations of the event dispatch, and replacing PyGame with PySDL2. This also allows Python 3.8!]]></summary></entry><entry><title type="html">Bug found with MacOS Mojave and PyGame</title><link href="/2019/10/04/mojave-warning.html" rel="alternate" type="text/html" title="Bug found with MacOS Mojave and PyGame" /><published>2019-10-04T00:00:00+00:00</published><updated>2019-10-04T00:00:00+00:00</updated><id>/2019/10/04/mojave-warning</id><content type="html" xml:base="/2019/10/04/mojave-warning.html"><![CDATA[<p>There have been problems found sometimes with the latest MacOS (Mojave) and
PyGame 1. Specifically, it’ll look black until the user interacts with the
window.</p>

<p>The work-around seems to be to install Python 3 from the
<a href="https://www.python.org/downloads/mac-osx/">Python Software Foundation</a> and not
via Homebrew.</p>

<p>For more information, see:</p>

<ul>
  <li><a href="https://github.com/ppb/pursuedpybear/issues/374">PursuedPyBear issue</a></li>
  <li><a href="https://github.com/pygame/pygame/issues/555">PyGame issue</a></li>
  <li><a href="https://bugzilla.libsdl.org/show_bug.cgi?id=4274">SDL bug</a></li>
  <li><a href="https://github.com/Homebrew/homebrew-core/issues/33016">Homebrew issue</a></li>
  <li><a href="https://stackoverflow.com/questions/52718921/problems-getting-pygame-to-show-anything-but-a-blank-screen-on-macos-mojave">Stack Overflow question</a></li>
  <li><a href="https://discourse.libsdl.org/t/macos-10-14-mojave-issues/25060/8">SDL discussion</a></li>
</ul>

<p>Unfortunately, with PyGame’s focus on their v2 effort, we do not expect them to
produce updated wheels when this bug is rooted out and fixes are released.</p>]]></content><author><name>Jamie</name></author><category term="ppb" /><category term="meta" /><summary type="html"><![CDATA[There have been problems found sometimes with the latest MacOS (Mojave) and PyGame 1. Specifically, it’ll look black until the user interacts with the window.]]></summary></entry><entry><title type="html">Fall Release: Assets and Sound!</title><link href="/2019/09/24/release.html" rel="alternate" type="text/html" title="Fall Release: Assets and Sound!" /><published>2019-09-24T00:00:00+00:00</published><updated>2019-09-24T00:00:00+00:00</updated><id>/2019/09/24/release</id><content type="html" xml:base="/2019/09/24/release.html"><![CDATA[<p>The big headline is the Asset Revamp. Instead of just passing around strings (and the whole resource path concept), actual <code class="language-plaintext highlighter-rouge">Asset</code> objects are given to systems. (<a href="https://ppb.readthedocs.io/en/stable/reference/assets.html">api reference</a>, <example>) These are a mechanism for eager background loading of data.</example></p>

<p>As part of this, we’ve introduced the concept of a Virtual File System (VFS). The VFS allows assets to be loaded from the Python Path (<code class="language-plaintext highlighter-rouge">sys.path</code>), using the same structure as python modules. This simplifies the usage of asset packs (like <a href="https://pypi.org/project/ppb-mutant/">ppb-mutant</a>) and allows assets not tied to a sprite (namely sound effects) to work.</p>

<p>As a quick example this v0.6 code:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">MySprite</span><span class="p">(</span><span class="n">ppb</span><span class="p">.</span><span class="n">BaseSprite</span><span class="p">):</span>
    <span class="n">image</span> <span class="o">=</span> <span class="s">'thingy.png'</span>
    <span class="n">resource_path</span> <span class="o">=</span> <span class="s">'resources/sprites'</span>
</code></pre></div></div>

<p>becomes this v0.7 code:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">MySprite</span><span class="p">(</span><span class="n">ppb</span><span class="p">.</span><span class="n">Sprite</span><span class="p">):</span>
    <span class="n">image</span> <span class="o">=</span> <span class="n">ppb</span><span class="p">.</span><span class="n">Image</span><span class="p">(</span><span class="s">'resources/sprites/thingy.png`)
</span></code></pre></div></div>

<p>You may also notice that <code class="language-plaintext highlighter-rouge">ppb.BaseSprite</code> became <code class="language-plaintext highlighter-rouge">ppb.Sprite</code>. This is the result of a bunch of refactoring, and the old name is now deprecated and will be removed in a future release.</p>

<p>Also part of this effort is that there’s three generated image assets available: <code class="language-plaintext highlighter-rouge">ppb.Circle</code>, <code class="language-plaintext highlighter-rouge">ppb.Square</code>, and <code class="language-plaintext highlighter-rouge">ppb.Triangle</code>. Instead of loading data from a file, these generate basic shapes in memory.</p>

<p>The lesser headline is the addition of sound effects! (<docs>, <example>) These are just simply `signal(ppb.events.PlaySound(ppb.Sound('path/to/sound.ogg')))`. Other types of sounds (namely background music) and more advanced control will come in future releases, as we develop the APIs.</example></docs></p>

<p>Note that the warning about PyGame and Python version compatibility from the v0.6 release notes still apply. In summary: Do not use PyGame 2 or Python 3.8 at this time.</p>

<h2 id="changes-since-v06">Changes since v0.6:</h2>

<p>Added:</p>
<ul>
  <li><code class="language-plaintext highlighter-rouge">ppb.vfs</code> module - Enables loading of files from Python packages (#306)</li>
  <li>Asset system - Enables eager, background loading of assets (#306)
    <ul>
      <li><code class="language-plaintext highlighter-rouge">AbstractAsset</code> ABC (#329)</li>
      <li><code class="language-plaintext highlighter-rouge">AssetLoaded</code> event (#315)</li>
      <li>Loading Screen feature (#336)</li>
    </ul>
  </li>
  <li>Two Phase Update feature (#273)</li>
  <li>Sound! (#326)</li>
  <li>Sprite Layering! (#350, #322)</li>
  <li>Add <code class="language-plaintext highlighter-rouge">ppb.Circle</code>, <code class="language-plaintext highlighter-rouge">ppb.Square</code>, and <code class="language-plaintext highlighter-rouge">ppb.Triangle</code> generated images (#363)</li>
  <li><code class="language-plaintext highlighter-rouge">ppb.Sprite</code> is now the base sprite class (#357)</li>
  <li><code class="language-plaintext highlighter-rouge">ppb.run()</code> accepts arbitrary engine and subsystem arguments (#307)</li>
</ul>

<p>Changed:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">ppb.BaseSprite</code> is now deprecated in favor of <code class="language-plaintext highlighter-rouge">ppb.Sprite</code> (#357)</li>
  <li>Deprecate string filenames in favor of assets (#306)</li>
  <li>Significant file rearrangement. (#316)</li>
  <li>Animations now based on Asset system. (#308)</li>
</ul>

<p>Removed:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">__resource_path__()</code> protocol removed in favor of <code class="language-plaintext highlighter-rouge">ppb.vfs</code> (#306)</li>
</ul>

<p>Invisible:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">ppb.sprites.BaseSprite</code> now truly just a base class, using mixins to provide features. (#357)
    <ul>
      <li><code class="language-plaintext highlighter-rouge">ppb.sprites.SquareShapeMixin</code> (#357)</li>
      <li><code class="language-plaintext highlighter-rouge">ppb.sprites.RenderableMixin</code> (#357)</li>
    </ul>
  </li>
  <li>Accept only stable versions of <code class="language-plaintext highlighter-rouge">ppb_vector</code> (#303)</li>
  <li>Renderer no longer tracks resources (#306)</li>
  <li>Tolerances on Camera dimensions loosened. (#319)</li>
  <li>Manual Tests (#328)</li>
  <li>Updated Contributing.md (#324)</li>
</ul>]]></content><author><name>Jamie</name></author><category term="ppb" /><category term="releases" /><summary type="html"><![CDATA[The big headline is the Asset Revamp. Instead of just passing around strings (and the whole resource path concept), actual Asset objects are given to systems. (api reference, ) These are a mechanism for eager background loading of data.]]></summary></entry><entry><title type="html">Summer 2019 Release: PPB v0.6 and Vector v1.0</title><link href="/2019/07/07/release.html" rel="alternate" type="text/html" title="Summer 2019 Release: PPB v0.6 and Vector v1.0" /><published>2019-07-07T00:00:00+00:00</published><updated>2019-07-07T00:00:00+00:00</updated><id>/2019/07/07/release</id><content type="html" xml:base="/2019/07/07/release.html"><![CDATA[<p>Good news, everyone! A release cycle has come to a close, resulting in <code class="language-plaintext highlighter-rouge">ppb</code> v0.6
and (drumroll please), <code class="language-plaintext highlighter-rouge">ppb-vector</code> v1.0, a stable release!</p>

<p><em>[party horn noises]</em></p>

<p>I am not going to get into the full changelogs here, they are both quite long.
You can find them on GitHub (<a href="https://github.com/ppb/pursuedpybear/releases/tag/v0.6.0">ppb</a>, <a href="https://github.com/ppb/ppb-vector/releases/tag/v1.0">ppb-vector</a>). I’m
just going to list some highlights.</p>

<h2 id="ppb-vector"><code class="language-plaintext highlighter-rouge">ppb-vector</code></h2>

<p>(<a href="https://github.com/ppb/ppb-vector/releases/tag/v1.0">changelog</a>)</p>

<p>Between the refactorings, the renamings, the immense amount of testing, a lot has
happend. A <em>lot</em>. Far and away the most significant change is that <code class="language-plaintext highlighter-rouge">Vector</code> is
now immutable. While this makes a lot of things inconvenient, we think it will
improve maintainability for everything in the long term.</p>

<p>Other than that, all of the computations and methods have remained the same.</p>

<p>I would like to call out @nbraud for their immense help with the 
<a href="https://hypothesis.works/">hypothesis</a>-based test suite and improving the
numerical algorithms. This literally would not have happened without their help
and the software is dramatically better for it.</p>

<p>As a stable release, the PursuedPyBear team is commiting to
<a href="https://semver.org/">Semantic Versioning</a> going forward. That means that 1.0.1
should contain only fixes, no API improvements, 1.1 will be the first version
with new methods and features, and it will be backwards compatible all the way
to 2.0. So if you want to be paranoid, specify <code class="language-plaintext highlighter-rouge">ppb-vector&gt;=1.0,&lt;2</code> in your
dependencies.</p>

<h2 id="ppb"><code class="language-plaintext highlighter-rouge">ppb</code></h2>

<p>(<a href="https://github.com/ppb/pursuedpybear/releases/tag/v0.6.0">changelog</a>)</p>

<p>The Summer 2019 release! :beach_umbrella: (See our <a href="/2019/06/25/release-schedule.html">release schedule</a>) This comes with our usual smattering of
features, rebuilds, and changes, but I would like to highlight a few things.</p>

<p>First, we now have online docs, hosted by ReadTheDocs! You can find them next to
Binny (that would be the blue binary bear in our logo) or at 
<a href="https://ppb.readthedocs.io/"><code class="language-plaintext highlighter-rouge">https://ppb.readthedocs.io/</code></a>.</p>

<p>Second, I would like to highlight a significant breaking change: We flipped the
Y-axis. Postive Y now points up, towards the top of the window. Why? Because
that is what is taught in most mathematics classes.</p>

<p>Third and finally, there are impending releases of Python 3.8 and PyGame 2. Do
not install these if you are using PursuedPyBear v0.6. PPB is not compatible
with PyGame 2, and PyGame 1 is not compatible with Python 3.8. Use Python 3.7
and PyGame 1.9 until an updated version of PPB is released. These requirements
are encoded in our various metadata files, so hopefully your tools will honor
this or warn you if not. And we will get an updated release out as soon as
PyGame 2 is out to fix this problem.</p>]]></content><author><name>Jamie</name></author><category term="ppb" /><category term="ppb-vector" /><category term="releases" /><summary type="html"><![CDATA[Good news, everyone! A release cycle has come to a close, resulting in ppb v0.6 and (drumroll please), ppb-vector v1.0, a stable release!]]></summary></entry><entry><title type="html">A new beta! 0.6.0b1</title><link href="/2019/06/26/ppb-0.6.0b1.html" rel="alternate" type="text/html" title="A new beta! 0.6.0b1" /><published>2019-06-26T00:00:00+00:00</published><updated>2019-06-26T00:00:00+00:00</updated><id>/2019/06/26/ppb-0.6.0b1</id><content type="html" xml:base="/2019/06/26/ppb-0.6.0b1.html"><![CDATA[<p>0.6.0b1 is now out! Want to try our new <a href="https://ppb.readthedocs.io/en/latest/reference/features/animation.html">Animation feature</a>?</p>

<p>Or maybe you’d like our brand new API for subsystems: No more replicating the renderer and
updater just to add your own custom subsystem. And they interact with the engine in an all
new way. Just respond to the new Idle event and handle your timing based systems with
style.</p>

<p>Remember, this is considered a prerelease, so to get it via pip:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip install ppb==0.6.0b1
</code></pre></div></div>

<p>Please report any issues you find to the <a href="https://github.com/ppb/pursuedpybear/issues">github issue tracker</a>!</p>

<h2 id="full-release-notes">Full release notes:</h2>

<p>First beta of our Summer Solstice 2019 release.</p>

<p>Note that because of incompatibilities, PyGame 1 and Python 3.6 &amp; 3.7 are the only supported
versions. Neither Python 3.8 nor PyGame 2 are supported in this release. (This will hopefully
be fixed for our Fall Equinox 2019 release, but its largely out of our hands.)</p>

<h3 id="new-since-051">New since 0.5.1</h3>

<ul>
  <li>Online docs! https://ppb.readthedocs.io/ (#195)</li>
  <li>Sprites can rotate (#214)</li>
  <li>An <code class="language-plaintext highlighter-rouge">Idle</code> event has been added, fired each iteration through the event loop (#221)</li>
  <li>An animation feature has been added (#230) and an example (#235)</li>
  <li>A <code class="language-plaintext highlighter-rouge">title</code> argument has been added to <code class="language-plaintext highlighter-rouge">ppb.run()</code> (#258)</li>
  <li><code class="language-plaintext highlighter-rouge">ppb.make_engine()</code> has been added to simplify customization (#255)</li>
  <li><code class="language-plaintext highlighter-rouge">GameEngine.loop_once()</code> has been added to allow for external loops (#255)</li>
  <li>The sprite sides API now implements full numerical methods (#272)</li>
  <li><code class="language-plaintext highlighter-rouge">GameEngine()</code> now accepts <code class="language-plaintext highlighter-rouge">systems</code> and <code class="language-plaintext highlighter-rouge">basic_systems</code> arguments (you probably want the former) (#295)</li>
</ul>

<h3 id="breaking-changes-since-051">Breaking Changes since 0.5.1</h3>

<ul>
  <li>The Y axis has been flipped so that +Y is up (#237, #275)</li>
  <li><code class="language-plaintext highlighter-rouge">ppb.Vector</code> has changed significantly; see the <a href="https://github.com/ppb/ppb-vector/releases">ppb-vector</a> changes (#204, #280)</li>
  <li>The deprecated scene change API (<code class="language-plaintext highlighter-rouge">Scene.running</code>, <code class="language-plaintext highlighter-rouge">Scene.next</code>) has been removed (#259)</li>
  <li><code class="language-plaintext highlighter-rouge">System.activate()</code> has been removed (#221)</li>
  <li><code class="language-plaintext highlighter-rouge">GameEngine.register()</code> now accepts callables instead of simple values (#228)</li>
  <li><code class="language-plaintext highlighter-rouge">ppb.abc</code> has been completely removed (#284)</li>
</ul>

<h3 id="fixes-since-051">Fixes since 0.5.1</h3>

<ul>
  <li><code class="language-plaintext highlighter-rouge">ppb.utils.LoggingMixin</code> now works with subclasses (based on the file the calling code is in) (#202)</li>
  <li><code class="language-plaintext highlighter-rouge">StartScene</code> no longer requires an empty <code class="language-plaintext highlighter-rouge">kwargs</code> when passed a scene class (#236)</li>
  <li><code class="language-plaintext highlighter-rouge">GameObjectCollection</code> (and its subclass <code class="language-plaintext highlighter-rouge">Scene</code>) work correctly with subclasses of children (#241)</li>
  <li>Simplified the rendering event flow (#256)</li>
  <li><code class="language-plaintext highlighter-rouge">Sprite.size</code> of less than or equal to 0 no longer causes error (#262)</li>
  <li>Defining sprites in a REPL no longer causes problems (#270)</li>
  <li>Camera data is updated before <code class="language-plaintext highlighter-rouge">PreRender</code> fires (#274)</li>
</ul>

<h3 id="development-changes">Development changes</h3>

<ul>
  <li><a href="https://www.python.org/dev/peps/pep-0508/">PEP 508</a> compatible</li>
  <li>Add CODEOWNERS (#191)</li>
  <li>Moved to <a href="https://cirrus-ci.org/">Cirrus CI</a> (#216, #227)</li>
  <li>Started using <a href="https://bors.tech/">bors</a> (#217)</li>
  <li>Started using <a href="https://hypothesis.works/">hypothesis</a></li>
</ul>]]></content><author><name>Piper</name></author><category term="ppb" /><category term="release" /><summary type="html"><![CDATA[0.6.0b1 is now out! Want to try our new Animation feature?]]></summary></entry></feed>