<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Erick</title>
    <description>The latest articles on Forem by Erick (@erickzanardo).</description>
    <link>https://forem.com/erickzanardo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F462843%2Fcded7159-d866-46b3-9f84-7c4dd94a5ede.jpeg</url>
      <title>Forem: Erick</title>
      <link>https://forem.com/erickzanardo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/erickzanardo"/>
    <language>en</language>
    <item>
      <title>One month after my game release, Android Edition</title>
      <dc:creator>Erick</dc:creator>
      <pubDate>Mon, 01 Sep 2025 14:11:10 +0000</pubDate>
      <link>https://forem.com/erickzanardo/one-month-after-my-game-release-android-edition-3ncn</link>
      <guid>https://forem.com/erickzanardo/one-month-after-my-game-release-android-edition-3ncn</guid>
      <description>&lt;p&gt;Sometime ago I published my first "Build in public" &lt;a href="https://dev.to/erickzanardo/one-month-after-my-game-release-3fe5"&gt;article &lt;/a&gt;about the first month since the release of my game on computer platforms, and today here I am again, this time to share some of the statistics of the release of that same game, but now on the Android platform, in the Google Play Store!&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers!
&lt;/h2&gt;

&lt;p&gt;The game was released on July 31st and the date of the writing of this article is September 1st! The following numbers are about that period.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;495&lt;/strong&gt; people visited the game details page and &lt;strong&gt;13&lt;/strong&gt; people bought the game directly from the page, giving a &lt;strong&gt;2,63%&lt;/strong&gt; conversion rate.&lt;/p&gt;

&lt;p&gt;This is a graph of amount of visits in the game page, and acquisitions per day:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7rz3893qyys4wn78d02.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7rz3893qyys4wn78d02.png" alt="Visits and acquisitions" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In total the game had &lt;strong&gt;23&lt;/strong&gt; orders, &lt;strong&gt;8&lt;/strong&gt; refunds, totaling &lt;strong&gt;16&lt;/strong&gt; "final sales", giving a gross revenue of &lt;strong&gt;BRL 125,25&lt;/strong&gt; (something close to 23USD using todays exchange rate).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7l25ye7gvxwqn3bz4bh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7l25ye7gvxwqn3bz4bh1.png" alt="Total sales" width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Insights
&lt;/h2&gt;

&lt;p&gt;I must confess that I was expecting the game to perform better on android than it did on the computer platforms, giving its casual puzzler nature, but it still is not a bad result I guess!&lt;/p&gt;

&lt;p&gt;I can see from the amount of people that visited the game page, that people have been finding and seeing the game, but the low conversion rate makes me believe that paid games have a hard time on the platform?&lt;/p&gt;

&lt;p&gt;At the same time the number of refunds also makes me believe that I need to improve the game somehow! It is just a bit frustrating that I have no feedback from users on why they wanted to refund the game.&lt;/p&gt;

&lt;p&gt;Maybe the game was just not their cup of tea? Or maybe there is something that they disliked and lead them to want their money back? I guess will never known.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;All in all, I am happy with the results, could it be better? Definitely, but it could also be way worse, this is the first time that I release a paid game on the Android platform so I am glad that people played my game and hopefully had fun!&lt;/p&gt;

&lt;p&gt;For my next android game, I plan on trying a different approach, making it free, adding ads to it (in a non predatory way!) and provide an IAP to remove the ads, I have the feeling that this might make the game perform better.&lt;/p&gt;

&lt;p&gt;If you wanna check the game out, take a look on it on Google Play: &lt;a href="https://play.google.com/store/apps/details?id=xyz.cherrybit.minecart" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=xyz.cherrybit.minecart&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading and following up my work, and as always, feel free to reach out anytime!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to avoid ghost lines and render artifacts in Flame</title>
      <dc:creator>Erick</dc:creator>
      <pubDate>Tue, 12 Aug 2025 13:18:11 +0000</pubDate>
      <link>https://forem.com/blue-fire/how-to-avoid-ghost-lines-and-render-artifacts-in-flame-4hfg</link>
      <guid>https://forem.com/blue-fire/how-to-avoid-ghost-lines-and-render-artifacts-in-flame-4hfg</guid>
      <description>&lt;p&gt;If you ever developed a 2d game, you might have had to deal with “strange rendering artifacts” when using sprites from a sprite sheet.&lt;/p&gt;

&lt;p&gt;Consider the screenshot below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztsh8t06k11t7z0p47v5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztsh8t06k11t7z0p47v5.png" alt=" " width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have a good eye, you might already have noticed the artifacts that I am talking about, but since this screenshot was compressed and scaled down to be presented here in a web page, it might be hard to spot them both, so let me zoom in in the issues:&lt;/p&gt;

&lt;p&gt;Note this “ghost line” between the tiles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F960rxq849b63tm2rx1ye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F960rxq849b63tm2rx1ye.png" alt=" " width="182" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F21yu64ul5dhhg87con62.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F21yu64ul5dhhg87con62.png" alt=" " width="182" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note how a thin line appears on the left side of the knight&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhi87o523lybvpf16jg0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhi87o523lybvpf16jg0.png" alt=" " width="153" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs4dtne3gaq7v8fvk82r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs4dtne3gaq7v8fvk82r.png" alt=" " width="153" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You make sure that your src position and src size is exact, you make sure that your tiles are correctly aligned with each other, yet, you can't get rid of these annoying lines.&lt;/p&gt;

&lt;p&gt;And that is not really your fault! These artifacts can happen in a variety of different contexts, they are common to happen when any camera transformation is used, be it zoom or translation, it can happen if you scale up or down the sprite, or even when you simply have it positioned with long decimal values.&lt;/p&gt;

&lt;p&gt;Still, no matter the context, the root cause is the same: computers have a limited precision on float numbers and their decimal values.&lt;/p&gt;

&lt;p&gt;That imprecision can make sprites that are supposed to be perfectly aligned, as in if they are positioned edge to edge on each other, to be rendered with a very thin line between them, causing what we call &lt;strong&gt;ghost lines&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The issue we see in the knight is a bit different; first, take a look at the whole sprite sheet that we are using:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0awf7kgb7qlv8ufwb4lj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0awf7kgb7qlv8ufwb4lj.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's zoom in a bit in our knight:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8rvv1ixja1gbrr1hqvq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8rvv1ixja1gbrr1hqvq.png" alt=" " width="320" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note how we have the sprite of another knight on the left, and that sprite touches the border of the knight that we are rendering.&lt;/p&gt;

&lt;p&gt;Even though we set the src position correctly to start on the exact pixel, when rendering the whole scene, when all the underlying transformations are applied, that imprecision will make the rendering of our sprite accidentally “grabbing a small section” of the rest of the sprite sheet, and a thin line from the sword of the other sprite will be rendered alongside our own sprite. This is what we call a &lt;strong&gt;“texture leak”.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Solutions
&lt;/h2&gt;

&lt;p&gt;There are several ways to fix these problems, in this article we will suggest a couple of them which are the ways that in our experience works the best and are the ones we recommend.&lt;/p&gt;

&lt;p&gt;We presented two different issues, so let's tackle them individually.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ghost lines busting! Who you gonna call?
&lt;/h3&gt;

&lt;p&gt;A reliable way of fixing those ghost lines that appear between aligned tiles is to use a technique known in the game development world as “pixel bleeding”.&lt;/p&gt;

&lt;p&gt;The idea is that we render the sprites a little bit bigger than its original size, that way, the added size will cover that thin line, but it is so small that will not be noticeable by the human eye.&lt;/p&gt;

&lt;p&gt;Starting on Flame v1.3.0 all sprites and sprite components can be rendered with this bleeding effect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;bleedValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.04&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;spriteImages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;images&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'little-adventures.png'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;world&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="n"&gt;SpriteComponent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fromImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;spriteImages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nl"&gt;srcSize:&lt;/span&gt; &lt;span class="n"&gt;Vector2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nl"&gt;srcPosition:&lt;/span&gt; &lt;span class="n"&gt;Vector2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;zero&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="nl"&gt;position:&lt;/span&gt; &lt;span class="n"&gt;Vector2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resX&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resY&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nl"&gt;size:&lt;/span&gt; &lt;span class="n"&gt;Vector2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nl"&gt;bleed:&lt;/span&gt; &lt;span class="n"&gt;bleedValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note the bleed attribute on the SpriteComponent.fromImage and how we are passing a value of 0.04 to it. That will make the sprite be rendered with 0.04 pixels on each border, covering the ghost line!&lt;/p&gt;

&lt;p&gt;Note that the exact bleed value depends on multiple factors: The size of the sprite, the zoom level or the current viewport, bigger sprites might require larger values and so on, before settling in a bleed value, be sure to test the game in different resolutions and zoom levels, and depending on how dynamic the zoom of the game is, consider making the bleed value proportional to the applied zoom.&lt;/p&gt;

&lt;h3&gt;
  
  
  Texture leaking plumbing!
&lt;/h3&gt;

&lt;p&gt;A simple technique to fix this problem is to “isolate” that sprite in the memory. This means that when rendering the sprite in the game we will not be rendering a portion of an image, but rather be rendering an image that has only the sprite we want to render.&lt;/p&gt;

&lt;p&gt;Of course you could get rid of the sprite sheet and make every single texture of your game a single image, that could cause many other issues though like increased IO operations etc.&lt;/p&gt;

&lt;p&gt;So, starting on Flame v1.30.0 we provide a new feature that allows you to still use sprite sheets, while being able to isolate sprite in memory to avoid the memory leaks: Raster Sprites.&lt;/p&gt;

&lt;p&gt;Raster sounds like a fancy word, but a raster image, or raster sprite simply means “an image in the memory”. When using raster sprites, Flame will under the hood extract the sprite from your sprite sheet and make an image in memory that represents that single sprite, avoiding the possibility of textures leaking into each other.&lt;/p&gt;

&lt;p&gt;To use Raster sprites in flame, simply use the RasterSpriteComponent instead of the SpriteComponent. Both components share the same API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;    &lt;span class="n"&gt;world&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="n"&gt;RasterSpriteComponent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fromImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;spriteImages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nl"&gt;srcSize:&lt;/span&gt; &lt;span class="n"&gt;Vector2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nl"&gt;srcPosition:&lt;/span&gt; &lt;span class="n"&gt;Vector2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nl"&gt;position:&lt;/span&gt; &lt;span class="n"&gt;Vector2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resX&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resY&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nl"&gt;size:&lt;/span&gt; &lt;span class="n"&gt;Vector2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Mix and match
&lt;/h3&gt;

&lt;p&gt;Note that if you have multiple tiles in the same texture atlas, whereas their edges are side to side, you might need to combine both techniques and use the bleedValue attribute in a RasterComponent in order to avoid both ghost lines and texture leaks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Flame tiled
&lt;/h3&gt;

&lt;p&gt;If you use Flame Tiled for your tiled map you might still notice ghost lines as these features have not yet been implemented in that package by the time of the writing of this article, but stay tuned for future updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrapping up!
&lt;/h3&gt;

&lt;p&gt;With these two techniques you should be able to get rid of any unexpected rending artifacts in your game!&lt;/p&gt;

&lt;p&gt;Check out the official docs for the &lt;a href="https://docs.flame-engine.org/latest/flame/rendering/images.html#sprite-bleeding" rel="noopener noreferrer"&gt;Pixel Bleeding&lt;/a&gt; and &lt;a href="https://docs.flame-engine.org/latest/flame/rendering/images.html#sprite-rasterization" rel="noopener noreferrer"&gt;Sprite Rasterization&lt;/a&gt; and &lt;a href="https://github.com/erickzanardo/flame_render_artifacts_example/tree/main" rel="noopener noreferrer"&gt;check this repository&lt;/a&gt; for the full example used for this article.&lt;/p&gt;

&lt;p&gt;If by any chance you find yourself in an edge case where neither of the presented solutions work, don't hesitate in reaching out to the Flame team on &lt;a href="https://discord.com/invite/pxrBmy4" rel="noopener noreferrer"&gt;our Discord!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>flame</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>One month after my game release!</title>
      <dc:creator>Erick</dc:creator>
      <pubDate>Wed, 16 Jul 2025 17:44:11 +0000</pubDate>
      <link>https://forem.com/erickzanardo/one-month-after-my-game-release-3fe5</link>
      <guid>https://forem.com/erickzanardo/one-month-after-my-game-release-3fe5</guid>
      <description>&lt;p&gt;It has been almost a month since I released Mine Cart Operator, a small puzzler game about dwarves and mining carts!&lt;/p&gt;

&lt;p&gt;I really like the idea of the build in public so in its spirit I decided to write up this small article to share with anyone interested the numbers and statistics from my released game.&lt;/p&gt;

&lt;p&gt;The idea in this article is to present statistics raw, with just a few comments on some of the data with some of the insights that I had while looking at the numbers, but I invite the reader to not take any of the insights as “absolute truths” as each launch and dev are unique and have their own context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Show me the numbers
&lt;/h2&gt;

&lt;p&gt;Before I share all the numbers, some important context about the game.&lt;/p&gt;

&lt;p&gt;It was released in itch.io on June 8th, initially released with 26 levels, costing 1.50USD, with the possibility of buyers to tip higher values for the game, and a free demo is provided for free which features the first 8 levels.&lt;/p&gt;

&lt;p&gt;On July 11th a small expansion was released, which added a new mechanic and 10 additional levels to the full version of the game, on that same day a sale of 35% OFF in celebration of the mini expansion started which lasted until July 14th!&lt;/p&gt;

&lt;p&gt;All the numbers shared in this article are statistics between the game release data (June 8th) and the day of the writing of this article (July 16th)&lt;/p&gt;

&lt;p&gt;Now, to the numbers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The gross revenue:&lt;/strong&gt; 75.50USD&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments:&lt;/strong&gt; 15&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View:&lt;/strong&gt; 481&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Downloads:&lt;/strong&gt; 71&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ratings:&lt;/strong&gt; 3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collections:&lt;/strong&gt; 3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comments:&lt;/strong&gt; 4&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A graph showing views, payments and downloads by day:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa198ddk9ncbs7ohwqgk5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa198ddk9ncbs7ohwqgk5.png" alt=" " width="692" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The breakdown of the downloads per platform:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlcp6prn1x6h914bs2dv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlcp6prn1x6h914bs2dv.png" alt=" " width="683" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;demo-linux.zip:&lt;/strong&gt; 8&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;demo-macos.zip:&lt;/strong&gt; 32&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;demo-windows.zip:&lt;/strong&gt; 12&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;linux.zip:&lt;/strong&gt; 3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macos.zip:&lt;/strong&gt; 11&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;windows.zip:&lt;/strong&gt; 5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is another interesting piece of data, the top 4 source of incoming traffic on the game page from the last 30 days&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91a6ozldwhfns7fxqnyl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91a6ozldwhfns7fxqnyl.png" alt=" " width="693" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn:&lt;/strong&gt; 75&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter:&lt;/strong&gt; 62&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn (android app):&lt;/strong&gt; 32&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Game sales page:&lt;/strong&gt; 20&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Insights
&lt;/h2&gt;

&lt;p&gt;Two things surprised me:&lt;/p&gt;

&lt;p&gt;I never expected the LinkedIn posts that I made about the game would bring back so much traffic and that MacOS builds would be the most downloaded ones!&lt;/p&gt;

&lt;p&gt;I kinda associated those results to the fact that a good chunk of my network are Flutter Developers, and game development in that platform always seems to get the attention of these folks, which leads to the second surprise, for many reasons, MacOS is the most used operation system among &lt;a href="https://flutter.dev/" rel="noopener noreferrer"&gt;Flutter&lt;/a&gt; (and mobile in general) developers, so it kinda makes sense how MacOS was the most popular platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;It has been an interesting road so far, this is the first time that I release something out there for real, so it has been a great learning for me.&lt;/p&gt;

&lt;p&gt;I hope that the numbers and data I shared here helps people on similar journeys as me!&lt;/p&gt;

&lt;p&gt;I have a couple of possibilities for my next steps, which I haven't fully decided yet. Part of me wants to release the game on Steam next, and see how it performs there, part of me just wants to build more content for the game and keep focusing on the itch io platform for now.&lt;/p&gt;

&lt;p&gt;Either way, whatever path I choose, stay tuned, as I will for sure share about the experience!&lt;/p&gt;

&lt;p&gt;If you didn't get the game yet, check it out: &lt;a href="https://cherrybit.itch.io/mine-cart-operator" rel="noopener noreferrer"&gt;https://cherrybit.itch.io/mine-cart-operator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love to hear your thoughts about it!&lt;/p&gt;

&lt;p&gt;Cheers!&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>flutter</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Fireslime is now Blue Fire</title>
      <dc:creator>Erick</dc:creator>
      <pubDate>Thu, 19 Aug 2021 13:07:26 +0000</pubDate>
      <link>https://forem.com/blue-fire/fireslime-is-now-blue-fire-405g</link>
      <guid>https://forem.com/blue-fire/fireslime-is-now-blue-fire-405g</guid>
      <description>&lt;p&gt;TLDR: Fireslime, the team behind the Flame Engine, is changing their name to Blue Fire. We are also moving away from the idea of being just an indie game studio and want to focus more on maintaining Open Source projects and create an open and friendly community around those projects.&lt;/p&gt;

&lt;p&gt;Almost 3 years ago, I (Erick) and Luan started a little project together. We both enjoyed game development, and after talking about some ideas, we created Fireslime, a small, informal, Indie Game Studio.&lt;/p&gt;

&lt;p&gt;When Fireslime started, Luan had already created the very first version of Flame, a Flutter based game engine. Since we both liked learning and exploring new things, we decided to use Flame as the engine of our games; that way, we could slowly improve the engine, while we developed the game. But back then, our focus was mainly on building games, and not the game engine itself. Flame was just a means to an end for us, a tool to create our games.&lt;/p&gt;

&lt;p&gt;As time passed, we created multiple games. We even fully released two of them, and launched two demo versions. They didn't manage to make much success on their own, but they helped us grow Flame.&lt;/p&gt;

&lt;p&gt;Suddenly, we started to realize that the people who were in the community Discord (that we created for the Fireslime's games) were actually there because of the Flame Engine or the other open source projects we maintain, and not for the games themselves.&lt;/p&gt;

&lt;p&gt;As the Flame Engine and our other projects grew, so did the time we spent on them. Which inadvertently meant that we spent less time working on our games.&lt;/p&gt;

&lt;p&gt;Over time, more people joined the team as maintainers, the first to join was Renan, a software developer, bad gamer and bad comedian. After Renan the next one to join was  Lukas, a ​​developer, keyboard builder, backpacker and climber. And last but not least, Jochum, an open source enthusiast, GitLab fanboy, collector of strange linux devices and proud owner of a Commodore 64. And while the team grew, that initial idea of being a game studio was steadily fading.&lt;/p&gt;

&lt;p&gt;So we decided to finally embrace this situation that we found ourselves in, and officially announce our new goal and focus: working on Open Source projects and building a friendly community around our Flutter and Dart projects.&lt;/p&gt;

&lt;p&gt;Fireslime was a name that we decided on originally for a game studio, as it was playful and friendly. But with our new focus in mind, we wanted something different; something open and something that had its roots in both Fireslime and Flutter. So, as a team, we chose the name Blue Fire.&lt;/p&gt;

&lt;p&gt;"Blue" expresses our focus and love for the Flutter framework and Dart, on which our projects are built and our community lives. And "Fire" represents our roots, our history and our connection to the Flame Engine.&lt;/p&gt;

&lt;p&gt;Does that mean that we will no longer build games? No! Our biggest project is the Flame Engine, and the best way of validating and testing such a game engine, is to build games with it. But now that we have our goal and focus clear, we can honestly say that we are committed to Flame, Flutter and our other Open Source projects (be it our other libraries or games), with the hopes to help and grow both the Flame and Flutter community and their corresponding ecosystem.&lt;/p&gt;

&lt;p&gt;So, from us as Fireslime, we thank everyone that has supported, helped and followed us over these last few years. And we hope you will all keep supporting us as Blue Fire as well, and be part of our community! &lt;/p&gt;

&lt;p&gt;The Blue Fire team wishes you happy coding.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
