gosu 0.7.7.1-mswin32 → 0.7.8-mswin32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/examples/ChipmunkIntegration.rb +1 -0
- data/examples/MoreChipmunkAndRMagick.rb +159 -0
- data/lib/gosu.so +0 -0
- metadata +3 -2
@@ -4,6 +4,7 @@
|
|
4
4
|
## Date: 2007-10-05
|
5
5
|
## License: Same as for Gosu (MIT)
|
6
6
|
## Comments: Based on the Gosu Ruby Tutorial, but incorporating the Chipmunk Physics Engine
|
7
|
+
## See http://code.google.com/p/gosu/wiki/RubyChipmunkIntegration for the accompanying text.
|
7
8
|
|
8
9
|
require 'rubygems'
|
9
10
|
require 'gosu'
|
@@ -0,0 +1,159 @@
|
|
1
|
+
# Based on the C Demo3 demonstration distributed with Chipmunk.
|
2
|
+
# Also with some help from the ChipmunkIntegration.rb program.
|
3
|
+
#
|
4
|
+
# License: Same as for Gosu (MIT)
|
5
|
+
# Created on 21/10/2007, 00:05:19 by Robert Sheehan
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'gosu'
|
9
|
+
require 'chipmunk'
|
10
|
+
require 'RMagick'
|
11
|
+
|
12
|
+
# Convenience method for converting between radians, Gosu degrees and Vec2 vectors.
|
13
|
+
class Numeric
|
14
|
+
def radians_to_gosu
|
15
|
+
self * 180.0 / Math::PI + 90
|
16
|
+
end
|
17
|
+
|
18
|
+
def radians_to_vec2
|
19
|
+
CP::Vec2.new(Math::cos(self), Math::sin(self))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Layering of sprites
|
24
|
+
module ZOrder
|
25
|
+
Background, Box = *0..1
|
26
|
+
end
|
27
|
+
|
28
|
+
SCREEN_WIDTH = 640
|
29
|
+
SCREEN_HEIGHT = 480
|
30
|
+
TICK = 1.0/60.0
|
31
|
+
NUM_POLYGONS = 80
|
32
|
+
NUM_SIDES = 4
|
33
|
+
EDGE_SIZE = 15
|
34
|
+
|
35
|
+
# Everything appears in the Gosu::Window.
|
36
|
+
class DemoWindow < Gosu::Window
|
37
|
+
|
38
|
+
def initialize
|
39
|
+
super(SCREEN_WIDTH, SCREEN_HEIGHT, false)
|
40
|
+
self.caption = "A Chipmunk-RMagick-Gosu Demonstration"
|
41
|
+
@space = CP::Space.new
|
42
|
+
@space.iterations = 5
|
43
|
+
@space.gravity = CP::Vec2.new(0, 100)
|
44
|
+
# you can replace the background with any image with this line
|
45
|
+
# background = Magick::ImageList.new( "media/Space.png")
|
46
|
+
fill = Magick::TextureFill.new(Magick::ImageList.new("granite:"))
|
47
|
+
background = Magick::Image.new(SCREEN_WIDTH, SCREEN_HEIGHT, fill)
|
48
|
+
setup_triangles(background)
|
49
|
+
@background_image = Gosu::Image.new(self, background, true) # turn the image into a Gosu one
|
50
|
+
@boxes = create_boxes(NUM_POLYGONS)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Create all of the static triangles.
|
54
|
+
# Adds them to the space and the background image.
|
55
|
+
def setup_triangles(background)
|
56
|
+
gc = Magick::Draw.new
|
57
|
+
gc.stroke_width(2)
|
58
|
+
gc.stroke('red')
|
59
|
+
gc.fill('blue')
|
60
|
+
# all the triangles are part of the same body
|
61
|
+
body = CP::Body.new(Float::MAX, Float::MAX)
|
62
|
+
base = 15
|
63
|
+
height = 10
|
64
|
+
shape_vertices = [CP::Vec2.new(-base, base), CP::Vec2.new(base, base), CP::Vec2.new(0, -height)]
|
65
|
+
# make shapes and images
|
66
|
+
9.times do |i|
|
67
|
+
6.times do |j|
|
68
|
+
stagger = (j % 2) * 40
|
69
|
+
x = i * 80 + stagger
|
70
|
+
y = j * 70 + 80
|
71
|
+
shape = CP::Shape::Poly.new(body, shape_vertices, CP::Vec2.new(x, y))
|
72
|
+
shape.e = 1
|
73
|
+
shape.u = 1
|
74
|
+
@space.add_static_shape(shape)
|
75
|
+
gc.polygon(x - base + 1, y + base - 1, x + base - 1, y + base - 1, x, y - height + 1)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
# do the drawing
|
79
|
+
gc.draw(background)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Produces the vertices of a regular polygon.
|
83
|
+
def polygon_vertices(sides, size)
|
84
|
+
vertices = []
|
85
|
+
sides.times do |i|
|
86
|
+
angle = -2 * Math::PI * i / sides
|
87
|
+
vertices << angle.radians_to_vec2() * size
|
88
|
+
end
|
89
|
+
return vertices
|
90
|
+
end
|
91
|
+
|
92
|
+
# Produces the image of a polygon.
|
93
|
+
def polygon_image(vertices)
|
94
|
+
box_image = Magick::Image.new(EDGE_SIZE * 2, EDGE_SIZE * 2) { self.background_color = 'transparent' }
|
95
|
+
gc = Magick::Draw.new
|
96
|
+
gc.stroke('red')
|
97
|
+
gc.fill('plum')
|
98
|
+
draw_vertices = vertices.map { |v| [v.x + EDGE_SIZE, v.y + EDGE_SIZE] }.flatten
|
99
|
+
gc.polygon(*draw_vertices)
|
100
|
+
gc.draw(box_image)
|
101
|
+
return Gosu::Image.new(self, box_image, false)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Produces the polygon objects and adds them to the space.
|
105
|
+
def create_boxes(num)
|
106
|
+
box_vertices = polygon_vertices(NUM_SIDES, EDGE_SIZE)
|
107
|
+
box_image = polygon_image(box_vertices)
|
108
|
+
boxes = []
|
109
|
+
num.times do
|
110
|
+
body = CP::Body.new(1, CP::moment_for_poly(1.0, box_vertices, CP::Vec2.new(0, 0))) # mass, moment of inertia
|
111
|
+
body.p = CP::Vec2.new(rand(SCREEN_WIDTH), rand(40) - 50)
|
112
|
+
shape = CP::Shape::Poly.new(body, box_vertices, CP::Vec2.new(0, 0))
|
113
|
+
shape.e = 0.0
|
114
|
+
shape.u = 0.4
|
115
|
+
boxes << Box.new(box_image, body)
|
116
|
+
@space.add_body(body)
|
117
|
+
@space.add_shape(shape)
|
118
|
+
end
|
119
|
+
return boxes
|
120
|
+
end
|
121
|
+
|
122
|
+
# All the simulation is done here.
|
123
|
+
def update
|
124
|
+
@space.step(TICK)
|
125
|
+
@boxes.each { |box| box.check_off_screen }
|
126
|
+
end
|
127
|
+
|
128
|
+
# All the updating of the screen is done here.
|
129
|
+
def draw
|
130
|
+
@background_image.draw(0, 0, ZOrder::Background)
|
131
|
+
@boxes.each { |box| box.draw }
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
# The falling boxes class.
|
137
|
+
# Nothing more than a body and an image.
|
138
|
+
class Box
|
139
|
+
|
140
|
+
def initialize(image, body)
|
141
|
+
@image = image
|
142
|
+
@body = body
|
143
|
+
end
|
144
|
+
|
145
|
+
# If it goes offscreen we put it back to the top.
|
146
|
+
def check_off_screen
|
147
|
+
pos = @body.p
|
148
|
+
if pos.y > SCREEN_HEIGHT + EDGE_SIZE or pos.x > SCREEN_WIDTH + EDGE_SIZE or pos.x < -EDGE_SIZE
|
149
|
+
@body.p = CP::Vec2.new(rand * SCREEN_WIDTH, 0)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def draw
|
154
|
+
@image.draw_rot(@body.p.x, @body.p.y, ZOrder::Box, @body.a.radians_to_gosu)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
window = DemoWindow.new
|
159
|
+
window.show
|
data/lib/gosu.so
CHANGED
Binary file
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: gosu
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.7.
|
7
|
-
date: 2007-11
|
6
|
+
version: 0.7.8
|
7
|
+
date: 2007-12-11 00:00:00 +01:00
|
8
8
|
summary: 2D game development library.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- LICENSE
|
36
36
|
- examples/ChipmunkIntegration.rb
|
37
37
|
- examples/CptnRuby.rb
|
38
|
+
- examples/MoreChipmunkAndRMagick.rb
|
38
39
|
- examples/OpenGLIntegration.rb
|
39
40
|
- examples/RMagickIntegration.rb
|
40
41
|
- examples/Tutorial.rb
|