summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2021-01-21 17:33:56 -0500
committerrealtradam <[email protected]>2021-01-21 17:33:56 -0500
commit5aabbc0246caf6dd65b5803998fc0b14c15b55d1 (patch)
tree3fa7aef88fe743062c2f05186b5bd312314e5405
parent74cbc0ddb7875b447e002bfc0d5ae5e7f23f4000 (diff)
downloadruby2d-camera-5aabbc0246caf6dd65b5803998fc0b14c15b55d1.tar.gz
ruby2d-camera-5aabbc0246caf6dd65b5803998fc0b14c15b55d1.zip
fixed zoom coordinate bug
-rw-r--r--animator.rb18
-rw-r--r--camera.rb14
-rw-r--r--run.rb23
3 files changed, 34 insertions, 21 deletions
diff --git a/animator.rb b/animator.rb
index bf23fed..94f7770 100644
--- a/animator.rb
+++ b/animator.rb
@@ -61,28 +61,18 @@ class AnimatedSquare
end
def update(offset, zoom)
- #width_zoom_offset = Window.width/2 * (zoom-1)
- #height_zoom_offset = Window.height/2 * (zoom-1)
- puts
- p @square
- puts
- p @speed
- puts
- p zoom
- puts
- puts
if axis.zero?
@square.x += speed * zoom
- if @square.x >= ((range[1] - offset[0]))
+ if @square.x >= ((range[1] - offset[0])) * zoom
self.speed = -speed.abs
- elsif @square.x <= ((range[0] - offset[0]))
+ elsif @square.x <= ((range[0] - offset[0])) * zoom
self.speed = speed.abs
end
else
@square.y += speed * zoom
- if @square.y >= ((range[1] - offset[1]))
+ if @square.y >= ((range[1] - offset[1])) * zoom
self.speed = -speed.abs
- elsif @square.y <= ((range[0] - offset[1]))
+ elsif @square.y <= ((range[0] - offset[1])) * zoom
self.speed = speed.abs
end
end
diff --git a/camera.rb b/camera.rb
index b3cd116..1ccea91 100644
--- a/camera.rb
+++ b/camera.rb
@@ -28,9 +28,9 @@ class Camera
object.x *= zoom
object.y *= zoom
end
+ self.zoom_level *= zoom
move_by(Window.width / 2 * (zoom - 1),
Window.height / 2 * (zoom - 1))
- self.zoom_level *= zoom
end
def self.zoom_to(zoom)
@@ -38,8 +38,8 @@ class Camera
end
def self.follow(item)
- move_to((item.x - (Window.width / 2)) / elasticity,
- (item.y - (Window.height / 2)) / elasticity)
+ move_to(((item.x + item.size / 2) - (Window.width / 2)) / elasticity,
+ ((item.y + item.size / 2) - (Window.height / 2)) / elasticity)
end
def self.objects
@@ -59,8 +59,8 @@ class Camera
end
def self.move_by(x, y)
- camera_position[0] += x
- camera_position[1] += y
+ camera_position[0] += x / zoom_level
+ camera_position[1] += y / zoom_level
objects.each do |object|
object.x -= x
object.y -= y
@@ -68,8 +68,8 @@ class Camera
end
def self.move_to(x, y)
- self.camera_position = [x + camera_position[0],
- y + camera_position[1]]
+ self.camera_position = [x / zoom_level + camera_position[0],
+ y / zoom_level + camera_position[1]]
objects.each do |object|
object.x -= x
object.y -= y
diff --git a/run.rb b/run.rb
index 8d45db9..b01902f 100644
--- a/run.rb
+++ b/run.rb
@@ -42,6 +42,26 @@ Camera.elasticity = 10
Camera << @squares.last
end
+# An example of static elements on the screen that
+# do not follow the camera movement
+Rectangle.new(
+ width: 350,
+ height: 70,
+ color: 'navy'
+)
+@ui_pos = Text.new(
+ 'pos: 0,0',
+ x: 10,
+ y: 10,
+ color: 'teal'
+)
+@ui_zoom = Text.new(
+ 'zoom: 0',
+ x: 10,
+ y: 40,
+ color: 'lime'
+)
+
# How fast the player can move
@speed = 10
@@ -128,6 +148,9 @@ update do
#Camera.move_to(50,50)
@cam_x_move = 0
@cam_y_move = 0
+ p @ui_pos.inspect
+ @ui_pos.text = "Camera Position: #{Camera.camera_position[0].round(1)}, #{Camera.camera_position[1].round(1)}"
+ @ui_zoom.text = "Zoom: #{Camera.zoom_level.round(3)}"
end
show