Using frame.contains() with a rotated sprite












0















Rotating a sprite doesn't rotate its frame, but instead enlarges it to accomodate the sprite's new dimensions, documented here. The additional area around the sprite creates empty space.



When determining whether the rotated sprite contains another sprite, or a point of its, the contains() function takes into account the empty accumulatedFrame space surrounding the rotated sprite.



How can you change the frame to match the sprite so this doesn't happen?










share|improve this question

























  • Did you try using SKPhysicsBody ?

    – Simone Pistecchia
    Nov 27 '18 at 10:31











  • Frame is bound by the axis, so it will always be relative to your x and y axis, not your character. The variables inside of a frame are x,y,width,height not x1,y1,x2,y2. You are going to either have to use an SKPhysicsBody, or create your own frame. You can use matrix math for this math.stackexchange.com/questions/126967/…

    – Knight0fDragon
    Nov 27 '18 at 15:40
















0















Rotating a sprite doesn't rotate its frame, but instead enlarges it to accomodate the sprite's new dimensions, documented here. The additional area around the sprite creates empty space.



When determining whether the rotated sprite contains another sprite, or a point of its, the contains() function takes into account the empty accumulatedFrame space surrounding the rotated sprite.



How can you change the frame to match the sprite so this doesn't happen?










share|improve this question

























  • Did you try using SKPhysicsBody ?

    – Simone Pistecchia
    Nov 27 '18 at 10:31











  • Frame is bound by the axis, so it will always be relative to your x and y axis, not your character. The variables inside of a frame are x,y,width,height not x1,y1,x2,y2. You are going to either have to use an SKPhysicsBody, or create your own frame. You can use matrix math for this math.stackexchange.com/questions/126967/…

    – Knight0fDragon
    Nov 27 '18 at 15:40














0












0








0








Rotating a sprite doesn't rotate its frame, but instead enlarges it to accomodate the sprite's new dimensions, documented here. The additional area around the sprite creates empty space.



When determining whether the rotated sprite contains another sprite, or a point of its, the contains() function takes into account the empty accumulatedFrame space surrounding the rotated sprite.



How can you change the frame to match the sprite so this doesn't happen?










share|improve this question
















Rotating a sprite doesn't rotate its frame, but instead enlarges it to accomodate the sprite's new dimensions, documented here. The additional area around the sprite creates empty space.



When determining whether the rotated sprite contains another sprite, or a point of its, the contains() function takes into account the empty accumulatedFrame space surrounding the rotated sprite.



How can you change the frame to match the sprite so this doesn't happen?







swift sprite-kit rotation frame gamekit






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 27 '18 at 23:03







Tim

















asked Nov 26 '18 at 9:37









TimTim

2881416




2881416













  • Did you try using SKPhysicsBody ?

    – Simone Pistecchia
    Nov 27 '18 at 10:31











  • Frame is bound by the axis, so it will always be relative to your x and y axis, not your character. The variables inside of a frame are x,y,width,height not x1,y1,x2,y2. You are going to either have to use an SKPhysicsBody, or create your own frame. You can use matrix math for this math.stackexchange.com/questions/126967/…

    – Knight0fDragon
    Nov 27 '18 at 15:40



















  • Did you try using SKPhysicsBody ?

    – Simone Pistecchia
    Nov 27 '18 at 10:31











  • Frame is bound by the axis, so it will always be relative to your x and y axis, not your character. The variables inside of a frame are x,y,width,height not x1,y1,x2,y2. You are going to either have to use an SKPhysicsBody, or create your own frame. You can use matrix math for this math.stackexchange.com/questions/126967/…

    – Knight0fDragon
    Nov 27 '18 at 15:40

















Did you try using SKPhysicsBody ?

– Simone Pistecchia
Nov 27 '18 at 10:31





Did you try using SKPhysicsBody ?

– Simone Pistecchia
Nov 27 '18 at 10:31













Frame is bound by the axis, so it will always be relative to your x and y axis, not your character. The variables inside of a frame are x,y,width,height not x1,y1,x2,y2. You are going to either have to use an SKPhysicsBody, or create your own frame. You can use matrix math for this math.stackexchange.com/questions/126967/…

– Knight0fDragon
Nov 27 '18 at 15:40





Frame is bound by the axis, so it will always be relative to your x and y axis, not your character. The variables inside of a frame are x,y,width,height not x1,y1,x2,y2. You are going to either have to use an SKPhysicsBody, or create your own frame. You can use matrix math for this math.stackexchange.com/questions/126967/…

– Knight0fDragon
Nov 27 '18 at 15:40












1 Answer
1






active

oldest

votes


















0














One option is to position SKNodes at each corner of the square before its rotation, and then obtain their points using the convert function afterwards. From there, you can draw a UIBezierPath between them, and check for accurate intersections using contains().



The only problem with this is that the bezier will appear to move with a node when assigned to it, but the actual path is fixed and won't move.






share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53478250%2fusing-frame-contains-with-a-rotated-sprite%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    One option is to position SKNodes at each corner of the square before its rotation, and then obtain their points using the convert function afterwards. From there, you can draw a UIBezierPath between them, and check for accurate intersections using contains().



    The only problem with this is that the bezier will appear to move with a node when assigned to it, but the actual path is fixed and won't move.






    share|improve this answer






























      0














      One option is to position SKNodes at each corner of the square before its rotation, and then obtain their points using the convert function afterwards. From there, you can draw a UIBezierPath between them, and check for accurate intersections using contains().



      The only problem with this is that the bezier will appear to move with a node when assigned to it, but the actual path is fixed and won't move.






      share|improve this answer




























        0












        0








        0







        One option is to position SKNodes at each corner of the square before its rotation, and then obtain their points using the convert function afterwards. From there, you can draw a UIBezierPath between them, and check for accurate intersections using contains().



        The only problem with this is that the bezier will appear to move with a node when assigned to it, but the actual path is fixed and won't move.






        share|improve this answer















        One option is to position SKNodes at each corner of the square before its rotation, and then obtain their points using the convert function afterwards. From there, you can draw a UIBezierPath between them, and check for accurate intersections using contains().



        The only problem with this is that the bezier will appear to move with a node when assigned to it, but the actual path is fixed and won't move.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 29 '18 at 10:50

























        answered Nov 28 '18 at 10:13









        TimTim

        2881416




        2881416
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53478250%2fusing-frame-contains-with-a-rotated-sprite%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

            Calculate evaluation metrics using cross_val_predict sklearn

            Insert data from modal to MySQL (multiple modal on website)