I have a characterbody2d and I want to display the equipment being worn. So this equipment would need to be swapped around during game play.

I currently am using several sprites layered. How is best to handle this situation?

  • Raptor :gamedev:@mastodon.gamedev.place
    link
    fedilink
    arrow-up
    2
    ·
    15 days ago

    @ICastFist @Fizz i see this is godot specific and I’m not 100% sure how godot handles it but the normal way to store your image data for sprites like this is to index them from a packed sprite sheet (there’s tons of sprite packers out there, lots of animation tools have them built in), so instead of each obj being a 1000x1000png to use your example you may have a 4000x4000png with 10 objects packed in it.

    Most engines will handle this for you, you just have to pack the assets correctly for it.

    • I Cast Fist@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      15 days ago

      If you pack 10 objects in a 4000x4000 picture, but it has like 500px margins on every side, you’re wasting memory for literally no reason, that’s the point I wanted to bring attention to. Unused image space consumes memory. A spritesheet that only goes to 600px horizontally, but the image file has 1200px, it’s wasting resources.

    • Fizz@lemmy.nzOP
      link
      fedilink
      arrow-up
      1
      ·
      15 days ago

      Thank you for the reply.

      So this is similar to a tilemap in how you pick tiles based on their position on the map. I can draw sprites with just refernces to this sheet that sounds pretty good. I gotta look into this for when i spawn large groups of enemies with various gear.

      For now on my main characters I’m sticking with the 10 sprite nodes stacked.

      • Raptor :gamedev:@mastodon.gamedev.place
        link
        fedilink
        arrow-up
        1
        ·
        15 days ago

        @Fizz similar but for games/engines that don’t use uniform tile maps you basically just have a metadata set alongside the image that indexes where each sub-image is located in it.

        It doesn’t really change the end product, and as I said most engines already work like this for most 2d stuff, and many editors will pack for you if you tell them. You’re just indexing portions of a texture, but it uses an order of magnitude less memory/storage and loads faster even off slow storage or web streaming.