For example, a parallax background will work with that same factor value.In theory, you could create a whole sets of artwork that is proportional to each other and use that one function to scale the size and speed of every object.Atop from his interests in artificial intelligence, over the course of his last year as an undergraduate student he has demonstrated interest in biological based computational problems.
I only got it to work when I used arbitrary calculations that "looked" right, like most cameras with parallax layers seem to do, but that's fake!
If I want objects to travel between Z layers I might as well do it right. Perspective projection just means dividing each object's XY position and size by its Z distance from the camera.
Especially if objects are rotated/rotating AND they are far from the horizon, this will really become apparent.
However, if you're simply using 2D sprites and scaling them in relation to a given vanishing point, this will give you both perspective as well as a parallax effect wherein the further an object is from the observer, the slower it appears to travel (even though its own speed constant need not change).
One thing I have noted with doing it in this way is that IF you decide to use 3D objects, it does sort of force you to determine an appropriate amount of "depth" for the screen.
If for example your screen has screen_width, screen_height, and screen_depth as instance variables, if the depth is less than then you will see some odd distortions towards points which are extremely far away from the vanishing point.
It looks like the previous suggestions do not take the horizon point into account, which is part of what may be missing from previous answers.
The suggested changes involving the scale factor are correct inasmuch as determining how large your objects should appear: However, if you're looking for a way to draw relative to a horizon, might I suggest a modification; wherein the offset is calculated, then added to the drawn_ values of x and y.
I think I updated the fiddle instead of forking it :( I apologize for that!
I left several comments which hopefully clearly outline what I did and why.