Navigation

    Fuze Arena Logo
    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Popular
    • Users
    • Groups
    • Help
    • Discord

    Sprites - Help!

    Work In Progress
    8
    34
    1983
    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.
    • Jonboy
      Jonboy Fuze Team last edited by

      Will, take a look at this


      It is definitely the case that simply turning of the visible collision makes the collision work as intended.
      I can't see any reason why this would be the case.

      1 Reply Last reply Reply Quote 0
      • Martin
        Martin Fuze Team last edited by

        AND, there's a line further down that sets sprite.visible to false (also tried the function) so they shouldn't just be getting stuck in position, they should vanish (and I was rather hoping, not count for collision detection any more but that was the reason for the test).

        Is there another way to effectively destroy the sprite once the enemy lives reaches 0? I may well be doing something perfectly dumb.

        1 Reply Last reply Reply Quote 0
        • Willpowered
          Willpowered Fuze Team last edited by

          Sorry about that, I'll have to look into how to properly add you on my end. (@Jonboy I've sent you an email)

          I've identified the issue- There is an issue once show_collision_shape is turned off. If the sprites are collided with a map first there is no issue, but when only colliding sprites the collision data won't get refreshed if show_collision_shape is off. (It refreshes it when it's on in order to accurately draw the collision shape.)
          As a workaround for now please show collision shapes or add an empty map to your project and collide your sprites with it using collideMap.

          As for the visibility issue I think I'd have to see your code for that one. Please hang tight until I can figure out what's up on my end with adding you.

          1 Reply Last reply Reply Quote 2
          • Martin
            Martin Fuze Team last edited by Martin

            Thanks Will - just upvoted your posts! Crazy that you need post approval :)

            Strange you should mention collisionMaps - i'm just sat here browsing through the source for Super Mega Arena Blaster and had just arrived at "what's this here collision map then and how does it work"!! So I was just about to investigate collision maps.Because my enemies don't fire back (maybe later) I'm not telling it to collide sprites. So I was just about to go further down and see if you were doing anything any different to me when it comes to the player shots.

            Right, will head down the collision map road then.

            Very impressed with the structure of your code incidentally :+1:

            1 Reply Last reply Reply Quote 0
            • Willpowered
              Willpowered Fuze Team last edited by

              Thanks! Since there's only one big code file, it's important to structure, comment, and use bookmarks efficiently for big projects. Using collideMap should work for now, even if the map is totally empty.

              As for post approval- @MikeDX Do you think you could make me a mod?

              M 1 Reply Last reply Reply Quote 2
              • Martin
                Martin Fuze Team last edited by

                Ah, I can do that - you'll still have to approve but at least you can do it yourself :)

                The Map trick does indeed work - already done it. And I don't need to display the map for it to work.

                1 Reply Last reply Reply Quote 0
                • Willpowered
                  Willpowered Fuze Team last edited by

                  Yup, it should work without drawing, only the collideMap call is needed.

                  This was working at some point earlier on, but got adjusted later in such a way that it no longer worked, and by then all my test projects were using maps!

                  1 Reply Last reply Reply Quote 1
                  • M
                    MikeDX @Willpowered last edited by MikeDX

                    @Willpowered said in Sprites - Help!:

                    As for post approval- @MikeDX Do you think you could make me a mod?

                    I can but that won't help you, as everyone no matter what has to have 10 reputation before they don't need posts approved

                    1 Reply Last reply Reply Quote 0
                    • Willpowered
                      Willpowered Fuze Team last edited by

                      I've got 10 currently, so I think we're good! I can also help out with the approval queue.

                      M 1 Reply Last reply Reply Quote 0
                      • M
                        MikeDX @Willpowered last edited by

                        @Willpowered you've been global moderator for a long time!

                        1 Reply Last reply Reply Quote 0
                        • Willpowered
                          Willpowered Fuze Team last edited by

                          Okay, cool! Maybe I just had to refresh all this time... I think I've had the tab open for quite a while.

                          1 Reply Last reply Reply Quote 1
                          • M
                            MikeDX last edited by

                            apparently Martin made you mod and i thought you were already moderator 😃

                            1 Reply Last reply Reply Quote 0
                            • Martin
                              Martin Fuze Team last edited by

                              Grrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr!!!!!!!!!!!!!!!!!!!!!!!!!!!

                              Ignore the visible "issue"

                              If I overlook the == vs. = one more time I swear I'm going to need a new Switch by the time it's bounced off the wall.

                              pianofire 1 Reply Last reply Reply Quote 2
                              • Willpowered
                                Willpowered Fuze Team last edited by

                                I figured it was something like that!

                                I've added you using my personal Switch. If you have any more code you'd like looked at, let me know!

                                1 Reply Last reply Reply Quote 0
                                • Willpowered
                                  Willpowered Fuze Team last edited by

                                  By the way, you should be able to use removeSprite(sprite) to remove sprites that you're done with.

                                  In Super Mega Arena Blaster I handle this by also creating a dummy sprite that symbolizes a free space.

                                  For example, here's some pseudocode:

                                  nullsprite = createSprite() // create a placeholder sprite
                                  
                                  array enemies[10]
                                  for i = 0 to len(enemies) loop
                                      // populate your enemies array here
                                  repeat
                                  
                                  // in your game loop...
                                  for i = 0 to len(enemies) loop
                                      if enemies[i] != nullsprite then
                                          // do your enemy logic here
                                          if collideSprite(enemies[i], player).exists then
                                              removeSprite(enemies[i]) // delete the sprite...
                                              enemies[i] = nullsprite // ...and set it to null
                                          endif
                                      endif
                                  repeat
                                  

                                  Using a strategy like this, it's possible to make games with varying amounts of enemies / players / shots / etc. alive at any given time!

                                  1 Reply Last reply Reply Quote 1
                                  • T
                                    TheDearHunter F last edited by

                                    Could you post an example of how you are using collideMap to get detectSpriteCollision to work? I am also running into this issue where detection doesnt work if the collision shapes are hidden. Thanks

                                    1 Reply Last reply Reply Quote 0
                                    • Willpowered
                                      Willpowered Fuze Team last edited by

                                      Sure thing! First, you'll need to create an empty map using the map editor. Then in your code you'll need to load it with loadMap(map_name) and call collideMap(my_sprite) to refresh the collision data.

                                      Here's how I would update the swimmer collision example earlier in this thread to work around the problem:

                                      map = loadMap("test") // Load an empty map created with the map editor.
                                      
                                      img = loadImage("Untied Games/Swimmer A")
                                      
                                      spr1 = createSprite()
                                      setSpriteImage(spr1, img)
                                      setSpriteAnimation(spr1, 14, 27, 10)
                                      setSpriteCollisionShape(spr1, SHAPE_CIRCLE, 100, 100, 0)
                                      spr1.x = 1920 / 4
                                      spr1.x_speed = -100
                                      
                                      spr2 = createSprite()
                                      setSpriteImage(spr2, img)
                                      setSpriteAnimation(spr2, 14, 27, 10)
                                      setSpriteCollisionShape(spr2, SHAPE_CIRCLE, 100, 100, 0)
                                      spr2.x = -1920 / 4
                                      spr2.x_speed = 100
                                      spr2.xscale = -1
                                      
                                      setSpriteCamera(0, 0, 4)
                                      centerSpriteCamera(0, 0)
                                      
                                      while true loop
                                          
                                          clear(0, 0, 0, 0)
                                      
                                          // Colliding these sprites with an empty map will not affect them, but it will properly refresh their collision data.
                                          collideMap(spr1)
                                          collideMap(spr2)
                                          
                                          result = collideSprites(spr1, spr2)
                                          if result.exists then
                                              spr2.visible = false
                                          endif
                                          
                                          updateSprites()
                                          drawSprites()
                                          update()
                                          
                                      repeat
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • T
                                        TheDearHunter F last edited by

                                        Ah i was only calling collideMap once and not in my game loop. This helped, thank you!

                                        1 Reply Last reply Reply Quote 0
                                        • Willpowered
                                          Willpowered Fuze Team last edited by

                                          Nice, glad you got it working! When I have an ETA on when the fix for this issue can be deployed, I'll let everyone know.

                                          1 Reply Last reply Reply Quote 0
                                          • sys64738
                                            sys64738 F last edited by

                                            I have a question about sprite animation.

                                            I have a sprite that is animating through frames correctly when idling.

                                            When I detect control input say c.right I set the sprite animation to the corresponding right direction frames. And set the location. The sprite is moving to the right but no longer animates until I stop pressing c.right. I assume each time I update the sprite location it's resetting the animation to it's first frame.

                                            I've looked at example code and can't spot what I am doing wrong.

                                            Discostew 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post