That is a kickass implementation, thanks Kyle!

I've added in keyboard support and a little Sonic The Hedgehog ;)

I get that couple-pixel gap problem too, very strange.

class Parallax
  def initialize(slot, img, z)
    @iw = [slot.width, slot.width*z].max
@layers = [slot.image(img, :top=>0, :left=>0), slot.image(img, :top=>0, :left=>@iw)]
    @z = z
  end

  def right
    @layers.each do |layer|
      layer.move layer.le...@z, 0
      layer.move @iw, 0 if layer.le...@iw <= 5
    end
  end

  def left
    @layers.each do |layer|
      layer.move layer.le...@z, 0
      layer.move -...@iw, 0 if layer.left+layer.wid...@iw >= @iw
    end
  end
end

Shoes.app :width=>320, :height=>200 do
  $app = self

  def draw_star(degrees=0)
    star_radius = 20
    $app.fill blue
    @star.remove unless @star.nil?
    $app.rotate degrees
@star = $app.star(width/2-star_radius/2, height-star_radius-20, 10, star_radius, star_radius/2)
  end

  def right
    @layers.each do |l|
      l.right
    end
    draw_star(-45)
  end

  def left
    @layers.each do |l|
      l.left
    end
    draw_star(45)
  end

  keypress do |key|
    case key
      when :right : right
      when :left : left
    end
  end


  wiki = 'http://upload.wikimedia.org/wikipedia/commons'
  @layers = [
Parallax.new(self, "#{wiki}/f/f5/Parallax-scroll-example- layer-0.gif", 0), Parallax.new(self, "#{wiki}/0/09/Parallax-scroll-example- layer-1.gif", 1), Parallax.new(self, "#{wiki}/0/0a/Parallax-scroll-example- layer-2.gif", 2), Parallax.new(self, "#{wiki}/8/85/Parallax-scroll-example- layer-3.gif", 3)
  ]
  draw_star(0)
end

--Mike

On Mar 22, 2009, at 1:12 PM, Kyle King wrote:

I didn't know parallax scrolling had a name! Clever stuff.

Here's a shoes implementation of the parallax scrolling example on Wikipedia. I'm not sure if this will display correctly on all platforms since I can't quite figure out why I get a gap in the scroll when I change the <= 5 to <= 0. Perhaps a deeper bug lurks there. Not really sure.

Hopefully this is enough to get you started anyway:

Shoes.app :width=>320, :height=>200 do
        def parallax img, z
                iw = [width, width*z].max
layers = [image(img, :top=>0, :left=>0), image(img, :top=>0, :left=>iw)]
        
                animate 24 do
                        layers.each do |layer|
                                layer.move layer.left-z, 0
                                layer.move iw, 0 if layer.left+iw <= 5
                        end
                end
        end
        
        wiki = 'http://upload.wikimedia.org/wikipedia/commons'
        parallax "#{wiki}/f/f5/Parallax-scroll-example-layer-0.gif", 0
        parallax "#{wiki}/0/09/Parallax-scroll-example-layer-1.gif", 1
        parallax "#{wiki}/0/0a/Parallax-scroll-example-layer-2.gif", 2
        parallax "#{wiki}/8/85/Parallax-scroll-example-layer-3.gif", 3
end


On Mar 22, 2009, at 1:16 AM, Michael Shapiro wrote:

Hi Folks,
For fun, I'd like to build a little side-scrolling game kit for shoes.

Has any attempted to implement parallax scrolling? (http://en.wikipedia.org/wiki/Parallax_scrolling )

--Mike


Reply via email to