Sign in to follow this  
Mehmet Turan

How can I add a parallax effect into my side-scrolling game?

Recommended Posts

Mehmet Turan    103
How can I add a parallax effect into my side-scrolling game? I read a lot about parallax scrolling so I know what the logic is and what parallax is but I can't create a dynamic parallax effect.

I have draw and update functions like this:
[CODE]
Camera2D guiCam = new Camera2D();

updateWorld(){

guiCam.position.x+=7f;
}

[/CODE]


[CODE]
public class Background extends DynamicGameObject {


int dirX=-1;


public Background(float x, float y, float width, float height,float velX) {
super(x, y, width, height);
velocity.x = velX;

}
public void update(float deltaTime,float cameraX) {


position.x = cameraX * 0.3f; // magic number to make the background move slowly
if(position.x + bounds.width-1200 <= 0)
position.x+= 2400;

}

}
[/CODE]
[CODE]
void render()
{
batcher.beginBatch(Assets.background);

batcher.drawSprite(world.onKatman.position.x, 240, 2400, 480, Assets.backgroundRegion);

if(world.onKatman.position.x + world.onKatman.bounds.width-1200 < 800)
batcher.drawSprite(world.onKatman.position.x + world.onKatman.bounds.width, 240, 2400, 480, Assets.backgroundRegion);



batcher.endBatch();
}[/CODE]
So this draws a parallax effect with two background objects but it draws it statically. I'm creating a 2D side-scrolling game and I'm translating my character and my camera position along x axis. So I have to translate my parallax effect with my camera but when I add to background `position.x` it doesn't work. How can I solve this? Edited by Mehmet Turan

Share this post


Link to post
Share on other sites
ApochPiQ    23003
The trick to 2D parallax is to just move the background at a slower rate than the foreground. Try something like moving your "back" layer 1 pixel every time the foreground scrolls 2 pixels (i.e. divide the rate of foreground scroll by 2 to get the rate of background scroll).

Share this post


Link to post
Share on other sites
Mehmet Turan    103
[quote name='ApochPiQ' timestamp='1337207719' post='4940786']
The trick to 2D parallax is to just move the background at a slower rate than the foreground. Try something like moving your "back" layer 1 pixel every time the foreground scrolls 2 pixels (i.e. divide the rate of foreground scroll by 2 to get the rate of background scroll).
[/quote]

Thanks for your reply.I know how to simulate parallax but my problem is different i think.When i move my camera and character my background don't scroll.I have to scroll them but i couldn't do it.It draws continuously at same position.When i translate them with same amount with my camera translate,parallax effect don't work.

Share this post


Link to post
Share on other sites
ApochPiQ    23003
Can you post your actual code for how you move the background? Are you using integer coordinates? (In which case you might just be getting rounding errors that truncate 1/2 to 0 and thus the background never moves, etc.)

Share this post


Link to post
Share on other sites
Mehmet Turan    103
[quote name='ApochPiQ' timestamp='1337209379' post='4940789']
Can you post your actual code for how you move the background? Are you using integer coordinates? (In which case you might just be getting rounding errors that truncate 1/2 to 0 and thus the background never moves, etc.)
[/quote]

My code is the same with in my first post.I'm translating it with back.x+=7f;

I'm using floats.

Share this post


Link to post
Share on other sites
alnite    3436
This looks like a translation issue. Can you post more code other than the above? It's really hard to tell with just those two methods. Show us how you create the backgrounds, the camera, and the update and paint processes. Most likely you reset the translate coordinate or something.

Share this post


Link to post
Share on other sites
Mehmet Turan    103
[quote name='alnite' timestamp='1337217185' post='4940803']
This looks like a translation issue. Can you post more code other than the above? It's really hard to tell with just those two methods. Show us how you create the backgrounds, the camera, and the update and paint processes. Most likely you reset the translate coordinate or something.
[/quote]
[quote name='ApochPiQ' timestamp='1337212716' post='4940800']
Have you tried stepping through the code in a debugger and looking at the values of the variables you are using?
[/quote]

I have updated my codes.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this