🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    problem with TFT_eSprite

    Scheduled Pinned Locked Moved SOFTWARE
    4 Posts 3 Posters 2.8k Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • P Offline
      PIMLDQS
      last edited by

      Hi all
      I have a problem with sprites

      I have some objects that draw some circels, strings or line to the M5core2.

      I do that with the following code

      x = 230;
          uint32_t _r = r;  // 50
          uint32_t _w = _r * 2;
          uint32_t _h = _r * 2;
      
          TFT_eSprite _sprite = new TFT_eSprite(&M5.Lcd);
          _sprite.createSprite(_w, _h);
          _sprite.drawCircle(_r, _r, _r, _color);
          _sprite.drawCircle(_r, _r, _r - 1, _color);
          _sprite.fillCircle(_r, _r, _r - 2, _colorCircle);
      
          _sprite.pushSprite(x - _r + 4, y - _r + 4);
          _sprite.deleteSprite();
      

      That works fine if x is lower than 230. As soon x is bigger than 230 every pixel that is outside 280 is trunccatet from the circle

      Any ideas or is thre a limitation with sprites?

      1 Reply Last reply Reply Quote 0
      • W Offline
        wsanders
        last edited by

        You don't show what Y is, or what your screen orientation is set to. If I remember correctly, if any part of a sprite gets pushed offscreen, the sprite will be truncated. So make sure the bounds of the sprite are within the 320 x 240 pixels of the LCD when you push it. The paramaters to pushSprite are the "upper left corner" of where you want the sprite to be placed.

        Look through the examples at https://github.com/m5stack/M5Stack/tree/master/examples/Advanced/Display/Sprite to failiarize yourself.

        1 Reply Last reply Reply Quote 0
        • J Offline
          JudyLemoine
          last edited by

          This post is deleted!
          1 Reply Last reply Reply Quote 0
          • J Offline
            JudyLemoine
            last edited by

            When x is larger than 230, the circle is pushed to a position where part of it exceeds the screen width (320 pixels wide), specifically beyond the x value of 280 (since your circle has a diameter of 100 pixels, calculated from _r = 50, and its center is at x - _r + 4).
            Sprites are typically clipped when drawn outside the screen area, meaning any part of the sprite that extends beyond the screen boundary will not be displayed.

            To prevent the sprite from being truncated, you can implement a check to ensure that the sprite's position remains within the screen's boundaries before calling pushSprite.

            Here’s an updated version of your code:

            // Ensure the sprite stays within the screen's bounds
            x = (x > 270) ? 270 : x;  // Adjust x to stay within the screen width
            
            uint32_t _r = r;  // 50
            uint32_t _w = _r * 2;
            uint32_t _h = _r * 2;
            
            TFT_eSprite _sprite = new TFT_eSprite(&M5.Lcd);
            _sprite.createSprite(_w, _h);
            _sprite.drawCircle(_r, _r, _r, _color);
            _sprite.drawCircle(_r, _r, _r - 1, _color);
            _sprite.fillCircle(_r, _r, _r - 2, _colorCircle);
            
            // Push sprite only within the screen's bounds
            _sprite.pushSprite(x - _r + 4, y - _r + 4);
            _sprite.deleteSprite();
            
            
            1 Reply Last reply Reply Quote 0

            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

            With your input, this post could be even better 💗

            Register Login
            • First post
              Last post