diff --git a/examples/bounce.rb b/examples/bounce.rb
index e556adb5456caa835db3574901740d3ae4408d03..df66271968f0774179f73d25f7702ea2ca72edb5 100755
--- a/examples/bounce.rb
+++ b/examples/bounce.rb
@@ -25,7 +25,7 @@ class Ball
     @x = @center.x - @radius
     @y = @center.y - @radius
     @color = FXRGB(255, 0, 0) # red
-    @dir = FXPoint.new(-1, 0)
+    @dir = FXPoint.new(-1, -1)
     setWorldSize(1000, 1000)
   end
 
@@ -38,12 +38,20 @@ class Ball
     dc.fillArc(x, y, w, h, 64*270, 64*360)
   end
 
-  def bounce
-    @dir = -@dir
+  def bounce_x
+    @dir.x=-@dir.x
   end
 
-  def collision?
-    (x < 0) || (x+w > worldWidth) || (y < 0) || (y+h > worldHeight)
+  def bounce_y
+    @dir.y=-@dir.y
+  end
+
+  def collision_y?
+    (y<0 && dir.y<0) || (y+h>worldHeight && dir.y>0)
+  end
+
+  def collision_x?
+    (x<0 && dir.x<0) || (x+w>worldWidth && dir.x>0)
   end
 
   def setWorldSize(ww, wh)
@@ -58,8 +66,12 @@ class Ball
     center.y += dy
     @x += dx
     @y += dy
-    if collision?
-      bounce
+    if collision_x?
+      bounce_x
+      move(units)
+    end
+    if collision_y?
+      bounce_y
       move(units)
     end
   end