Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
2D Graphics for Ruby
Ruby
branch: master

This branch is 21 commits behind blacktm:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
examples
lib
test
.gitignore
.ruby-version
Gemfile
LICENSE.md
README.md
Rakefile
r2d.gemspec

README.md

R2D: 2D Graphics for Ruby

R2D is a gem for drawing 2D graphics, animations, playing audio, capturing input, and more.

Contributing

This library is in very early development, which means the design direction, implementation, and final API spec is still in flux. Please contact me or open an issue before sending a pull request.

View the Roadmap in the wiki.

Installing

Until a v0.1.0 release, this gem will only be available locally. To build and install the gem, use:

$ gem build r2d.gemspec
$ gem install --local r2d-0.0.0.gem

A Simple R2D Application

require 'r2d'

# Configure and initialize the window
window width: 640, height: 480

# Create a shape and add it to the window
r = Rectangle.new(0, 0, 100, 100, "blue")

# Show the window
window :show

Read the reference below to learn about all the things you can do with R2D. See the examples directory for more sample applications.

Basic Drawing

Common Parameters

x = an 'x'  coordinate (Integer)
y = an 'y'  coordinate (Integer)
s = the size    (Integer)
w = the width   (Integer)
h = the height  (Integer)

c = the color  (String)
or...
c = [r, g, b, a] (Array)
  where elements are 0..255 (Integer) or 0.0..1.0 (Float)
    r = red
    g = green
    b = blue
    a = alpha

Common Instance Methods

All objects that can be drawn have the methods:

add, remove, show, hide

add and show, along with remove and hide are aliased.

Shapes

Squares

Parameters:

x, y, size, color="white", visible=true

Instance methods:

x/=, y/=, size=, color=

Examples:

s = Square.new(x, y, size)
s = Square.new(x, y, size, color, false)

s.x = 10
s.y = 20
s.size = 25
s.color = "red"
s.color = [250, 0, 0, 100]

Rectangles

Parameters:

x, y, width, height, color="white", visible=true

Instance methods:

x/=, y/=, width/=, height/=, color=

Examples:

r = Rectangle.new(x, y, width, height)
r = Rectangle.new(x, y, width, height, color, false)

r.x = 10
r.y = 20
r.width = 200
r.height = 50
r.color = "blue"
r.color = [0, 0, 255, 150]

Quadrilaterals

Parameters:

x1, y1, x2, y2, x3, y3, x4, y4, color="white", visible=true

Instance methods:

x1/=, y1/=, x2/=, y2/=, x3/=, y3/=, x4/=, y4/=, color=

Examples:

q = Quad.new(x1, y1, x2, y2, x3, y3, x4, y4)
q = Quad.new(x1, y1, x2, y2, x3, y3, x4, y4, color, false)

q.x1 = 10
q.y1 = 20
q.color = "blue"
q.color = [0, 0, 255, 150]

Triangles

Parameters:

x1, y1, x2, y2, x3, y3, color="white", visible=true

Instance methods:

x1/=, y1/=, x2/=, y2/=, x3/=, y3/=, color=

Examples:

t = Triangle.new(x1, y1, x2, y2, x3, y3)
t = Triangle.new(x1, y1, x2, y2, x3, y3, color, false)

t.x1 = 10
t.y1 = 20
t.color = "red"
t.color = [0, 0, 255, 1]

Gradients

Parameters

All gradient methods take a Hash where keys refer to the corners of the shape, and values represent the color.

{ :corner => color }

:corner is specific to each shape (described below). color is either a string...

"red", "blue", "yellow", etc

...or an array containing red, green, blue, alpha values from 0 to 255 (Integer) or 0.0 to 1.0 (Float):

[r, g, b, a]

# examples
[255, 0, 0, 255]
[1.0, 1.0, 0.8, 0.5]

Squares and Rectangles

:corners can be these groupings:

# vertical
:top, :bottom

# horizontal
:left, :right

# all corners
:top_left, :top_right, :bottom_left, :bottom_right

Examples:

r.gradient = {
  top: "red",
  bottom: "blue"
}

r.gradient({
  left: [255, 200, 150, 50],
  right: "blue"
}

r.gradient = {
  top_left: "red",
  top_right: "blue",
  bottom_left: "green",
  bottom_right: "yellow"
}

Quadrilaterals

:first, :second, :third, :fourth

Examples:

q.gradient = {
  first: "red",
  second: "blue",
  third: [0, 200, 255, 255],
  fourth: "yellow"
}

Triangles

The triangle gradient method takes a Hash containing keys (symbols) referring to the first, second, and third points of the triangle.

:corners are:

:first, :second, :third

Examples:

t.gradient = {
  first: "red",
  second: "blue",
  third: [0, 200, 255, 255]
}

Images

Formats supported: BMP, PNG, JPG.

Parameters:

x, y, "path_to_image", visible=true

Instance methods:

x, y, width/=, height/=

Examples:

img = Image.new(x, y, "ruby.png")
img = Image.new(x, y, "media/ruby.png", false)

img.x = 10
img.y = 20
img.width = 125
img.height  # returns height

Text

Parameters:

x, y, h, "content", c="white", visible=true

Instance methods:

x/=, y/=, content=, color=

Examples:

t = Text.new(x, y, 20, "hello world")
t = Text.new(x, y, 20, "hello world", "blue", false)

t.x = 10
t.y = 20

Playing Audio

Formats include: MP3, AAC, WAV.

Songs

These are long audio clips.

Parameters:

"path_to_song", volume=10

Instance methods:

play, playing?, pause, paused?, stop, loop

Examples:

s = Song.new("media/track.mp3")
s = Song.new("media/track.mp3", 5)

s.play
s.playing?  # returns `true`

s.pause
s.paused?   # returns `true`

s.stop
s.loop

Capturing Input

Keyboard and Mouse Buttons

To capture a single key press where <key_string> is any valid keyboard character a..z, A..Z, 0..9, and string representing arrows, alt, control, shift, etc:

on_key <key_string> do
  #...
end

Example:

on_key 'a' do
  # letter 'a' pressed
end

Do something repeatedly as a key is held down.

key_down <key_string> do
  #...
end

Example:

key_down 's' do
  # letter 's' held down
end

Valid character strings:

('a'..'z') || ('A'..'Z') || ('0'..'9')
'up'
'down'
'left'
'right'
'left_alt'
'right_alt'
'left_control'
'right_control'
'left_shift'
'right_shift'
'backspace'
'delete'
'space'
'tab'
'return'
'mouse_left'
'mouse_right'

Cursor Position

Use these helper methods to get the position of the cursor. Mouse positions are relative to the top left corner of the window.

         # Returns the mouse:
mouse_x  #  x-coordinate
mouse_y  #  y-coordinate

The Window

R2D will create and manage a window instance for you. The window method is provided to send commands to the window instance.

Window Attributes

Attributes change the appearance and behavior of the window. These are applied before drawing is done.

                     # Defaults:
title: "My App"      #  "R2D"
width: 400           #  640
height: 300          #  480
cursor: false        #  `true`
background: "white"  #  "black"

Example:

window title: 'My App', width: 300, height: 200, cursor: false

Clearing the Window

To remove all objects from the window, use:

window :clear

Note this does not delete the objects themselves – the references remain intact. This is equivalent to calling shape.remove.

The Update Loop

Do something each time the graphic environment is updated (60 times / second).

update do
  # do something
end

Examples:

update do
  if key_down? <key_string>
    # do something
  end
end
Something went wrong with that request. Please try again.