Sprites - Help!
-
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
-
I don’t know why my brain just assumes because it’s basic, it’s should be a single = and somehow magically know the difference!
-
Was this ever resolved. Just got collisions working in my latest project and then turned off show collision boxes. And well here I am with same problem as Martin.
Edit have loaded an empty map as above. And added
for x = 0 to 10 loop collidemap(bubblesprite[x]) Collide = detectspritecollision(subsprite,bubblesprite[x])
And it works very occasionly for a bit then doesn't
-
I am told that it is resolved in the next patch that has been submitted for review.
It works 100% of the time for me when using what you have done. I do also collide subsprite with the map as well however. Maybe try that?
-
@Martin oh brilliant that was the problem, I didn't collidemap the sub, so obvious in hindsight! thank you!