Sprites - Help!
-
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:
-
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?
-
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.
-
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!
-
@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
-
I've got 10 currently, so I think we're good! I can also help out with the approval queue.
-
@Willpowered you've been global moderator for a long time!
-
Okay, cool! Maybe I just had to refresh all this time... I think I've had the tab open for quite a while.
-
apparently Martin made you mod and i thought you were already moderator 😃
-
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.
-
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!
-
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!
-
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
-
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 callcollideMap(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
-
Ah i was only calling collideMap once and not in my game loop. This helped, thank you!
-
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.
-
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.
-
@sys64738 the resetting of the animation is more likely from assigning the frame when detecting the key press.
-
@Discostew yeah that's it. Trying to figure out best way to stop it retriggering. Guess a Boolean switch will do for now
-
@Martin == vs = is the oldest trap in the book! Some compilers now warn you about this one