In a mario-like platform game, when my Scene launches, I create a SKTileSet as well as a SKTileMapNode programmatically (using the editor is not an option).
For now, the map only contains the ground on which the player must walk.
I have successfully added the player as a SKSpriteNode, and added a physics body, so that the player falls from the sky, through the screen when the game launches.
The issue is, I can't figure out the best way to prevent the player from falling through the ground.
Should I add a physics body to each tile of the ground, or detect collisions and correct the position of the player? If I do so, why attach a physics body to the player at all, since I need to check and correct its position all the time?
Related
I want to create a "solid" SCNNode, so when the camera touches the node, it will stop moving. I've tried physics but it didn't work. How can I do it?
This question does not help with the problem. I am going to assume you have a player object moving through a scene. If you want to disable the camera moving you have to set a condition for when the player collides with that solid object to stop the camera in update.
I am creating a tilemap platform game in SpriteKit. I assigned collision paths to the physics body of all ground tiles and made them non-dynamic. To the player I assigned two collision polygons: a circle on the bottom and a rectangle on the top.
The player sprite has a fixed position on screen, while the level is scrolling from right to left. Now, as long as the player sprite is on flat ground, the collisions work perfectly and the player is walking on the ground. However, I also have some sloped terrain tiles that I want the player to follow (e.g. walking uphill). But when the player reaches a sloped tile, he simply bounces off of it, being unable to "climb" it.
Similarly, when I drop the player from above on a sloped tile, he slides down the "hill", instead of remaining in position.
I have both restitution and friction set to 0.
So how can I make the player sprite follow the ground regardless of its shape and how can I make the player stay on a sloped tile instead of sliding down?
I tried using SKConstraints with positionX set to a constant value. At first it seemed to work, but then the player got stuck in the middle of a sloped tile and eventually fell through it.
I also tried different shapes of collision polygons on the player (e.g. a rectangle instead of a circle at the bottom) but that changed nothing.
Any help is appreciated!
This has more to do with your game logic instead of your map properties. You need to have several "states" for your player. For example, if your player is idle you can set the CGVector to 0,0. This will stop the player from moving in any direction.
To give you some examples on movement. Let's say you want to make your object move right:
// move node's physics body to the right while leaving vertical movement as is
// 160 is just an example
myNode.physicsBody.velocity = CGVectorMake(160, self.physicsBody.velocity.dy);
// do not allow right movement to exceed 160
if(myNode.physicsBody.velocity.dx > 160)
myNode.physicsBody.velocity = CGVectorMake(160, self.physicsBody.velocity.dy);
To move left you inverse the dx value:
myNode.physicsBody.velocity = CGVectorMake(-160, self.physicsBody.velocity.dy);
if(myNode.physicsBody.velocity.dx < -160)
myNode.physicsBody.velocity = CGVectorMake(-160, self.physicsBody.velocity.dy);
Allow myNode to be affected by gravity and it should remain in contact with the ground as it moves down a slope.
It's a tilemap platform game...
Then gravity isn't important, put gravity to a very low value and then change all your impulses for the jumps and such in relation to the change in gravity...
OR,
Possibly, if the game isn't randomly generated you can set up a uibezierpath, and turn the path off if he stops moving up the hill.
But then if he stopped mid-hill or was starting from the top, he would still slide down...
And increasing friction (not setting it to 0) may help. Try friction at 1?
I am making a game in SKSpriteKit, I am trying to make a foreground object with this Image, http://minus.com/i/OQ0boloElnCr
if an object touches the non-transparency in the picture(the ceiling and rock paths), the object dies.
Is it possible in Sprite kit to detect the ceiling, the non-transparency parts of the image
I am new to corona and my Problem id I have a long scene and in that I have a ball body. When it moves up i want to move the scene up. How to do this in Corona.
This is done using a display group to contain your entire scene (the level, the ball, everything) and then move that display group. Physics in Corona don't work between display groups for this very reason, so that that you can move the scene without affecting physics inside the scene. Refer to the "Egg Breaker" sample project.
I was looking for tutorials on the net for a 2d camera that follows a sprite and I found a reply from this site:
(XNA 2D Camera Engine That Follows Sprite)
I made a simple game where in the sprite is loaded at the center of the game screen and it moves according to the direction I press from my directional key pad.
I tried implementing this code and added the Spritebatch instruction to my game. There seem to be no syntax error, but once I run the game, I only see the blue screen. Also, the sprite I used didn't appear.
(I'd like to imitate the player control of Tasty Planet where in the goo is controlled by the mouse and the screen follows it around. - trailer of the game: http://www.youtube.com/watch?v=az4VgetA_n0
Game development is sometimes best accomplished step by step. Especially when one is first learning :-)
What you want to do is first get some basics onto the screen 1) the player's avatar, and b) some static component like a wall, or floor.
With those in place and rendering on the screen, then you implement your camera component. This will be a class that takes the player's position in the world and offsets any "world" item by that much.
For example, if the player is at 10,10 in the world, and there is a tree at 5,5 ... the tree should be drawn at -5,-5, and the player drawn at 0,0 (assuming your coordinate grid's 0,0 is in the middle of the screen). And as the player's position moves, just subtract that from static world object that you draw.