sgl 0.4.0 → 1.0.0
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/ChangeLog +254 -234
- data/History.txt +6 -0
- data/Manifest.txt +10 -0
- data/Rakefile +27 -7
- data/examples/cocoa1-basic.rb +14 -14
- data/examples/cocoa10-transparent.rb +26 -26
- data/examples/cocoa11-application.rb +13 -13
- data/examples/cocoa2-draw.rb +23 -23
- data/examples/cocoa3-affine.rb +29 -29
- data/examples/cocoa4-font.rb +24 -24
- data/examples/cocoa5-image.rb +22 -22
- data/examples/cocoa6-sound.rb +24 -24
- data/examples/cocoa7-movie.rb +40 -40
- data/examples/cocoa8-movieoverlay.rb +42 -42
- data/examples/cocoa9-streaming.rb +40 -40
- data/examples/opengl1-basic.rb +14 -14
- data/examples/opengl11-application.rb +13 -13
- data/examples/opengl2-draw.rb +23 -23
- data/examples/opengl3-affine.rb +29 -29
- data/examples/sample1.rb +11 -11
- data/examples/sample10.rb +16 -16
- data/examples/sample11.rb +22 -22
- data/examples/sample11a.rb +33 -33
- data/examples/sample12.rb +30 -30
- data/examples/sample12a.rb +35 -35
- data/examples/sample13.rb +116 -116
- data/examples/sample15.rb +24 -24
- data/examples/sample16.rb +31 -31
- data/examples/sample16a.rb +35 -35
- data/examples/sample6.rb +18 -18
- data/examples/sample7.rb +16 -16
- data/examples/sample9.rb +20 -20
- data/examples/testgl.rb +169 -169
- data/lib/sgl/bass.rb +46 -46
- data/lib/sgl/cocoa-app.rb +43 -43
- data/lib/sgl/cocoa-color.rb +65 -65
- data/lib/sgl/cocoa-draw.rb +72 -72
- data/lib/sgl/cocoa-event.rb +229 -229
- data/lib/sgl/cocoa-media.rb +144 -144
- data/lib/sgl/cocoa-notuse.rb +493 -493
- data/lib/sgl/cocoa-window.rb +203 -203
- data/lib/sgl/cocoa.rb +8 -8
- data/lib/sgl/opengl-app.rb +38 -38
- data/lib/sgl/opengl-color.rb +44 -44
- data/lib/sgl/opengl-draw.rb +260 -260
- data/lib/sgl/opengl-event.rb +325 -325
- data/lib/sgl/opengl-modules.rb +22 -22
- data/lib/sgl/opengl-window.rb +224 -224
- data/lib/sgl/opengl.rb +7 -7
- data/lib/sgl/sgl-button.rb +135 -135
- data/lib/sgl/sgl-client.rb +21 -21
- data/lib/sgl/sgl-color.rb +68 -82
- data/lib/sgl/sgl-connect.rb +9 -9
- data/lib/sgl/sgl-server.rb +58 -58
- data/lib/sgl/sgl-spring.rb +216 -216
- data/lib/sgl/version.rb +2 -2
- data/scripts/lib-txt2html.rb +130 -0
- data/scripts/txt2html +2 -63
- data/spec/sgl_spec.rb +13 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +1 -0
- data/test/test_cocoa_app.rb +291 -291
- data/test/test_module_ruby16.rb +30 -30
- data/test/test_opengl_app.rb +147 -147
- data/test/test_opengl_basic.rb +22 -22
- data/test/test_opengl_fullscreen.rb +23 -23
- data/test/test_opengl_novice.rb +35 -35
- data/website/challenge1.html +91 -91
- data/website/challenge1.txt +3 -3
- data/website/challenge2.html +143 -144
- data/website/challenge2.txt +13 -14
- data/website/challenge3.html +66 -63
- data/website/challenge3.txt +7 -7
- data/website/cocoa.html +85 -88
- data/website/cocoa.txt +2 -4
- data/website/description.html +138 -138
- data/website/description.txt +1 -1
- data/website/exercise1.html +262 -264
- data/website/exercise1.txt +58 -53
- data/website/exercise2.html +241 -683
- data/website/exercise2.txt +11 -427
- data/website/exercise3.html +206 -0
- data/website/exercise3.txt +155 -0
- data/website/exercise4.html +198 -0
- data/website/exercise4.txt +151 -0
- data/website/exercise5.html +162 -0
- data/website/exercise5.txt +113 -0
- data/website/exhibition.html +84 -84
- data/website/howto.html +146 -134
- data/website/howto.txt +9 -0
- data/website/index.html +178 -178
- data/website/index.txt +20 -19
- data/website/sound.html +141 -141
- metadata +16 -3
@@ -0,0 +1,206 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
7
|
+
<title>
|
8
|
+
練習問題3
|
9
|
+
</title>
|
10
|
+
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
11
|
+
<style>
|
12
|
+
|
13
|
+
</style>
|
14
|
+
<script type="text/javascript">
|
15
|
+
window.onload = function() {
|
16
|
+
settings = {
|
17
|
+
tl: { radius: 10 },
|
18
|
+
tr: { radius: 10 },
|
19
|
+
bl: { radius: 10 },
|
20
|
+
br: { radius: 10 },
|
21
|
+
antiAlias: true,
|
22
|
+
autoPad: true,
|
23
|
+
validTags: ["div"]
|
24
|
+
}
|
25
|
+
var versionBox = new curvyCorners(settings, document.getElementById("version"));
|
26
|
+
versionBox.applyCornersToAll();
|
27
|
+
}
|
28
|
+
</script>
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<div id="main">
|
32
|
+
|
33
|
+
<h1>練習問題3</h1>
|
34
|
+
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/sgl"; return false'>
|
35
|
+
<p>Get Version</p>
|
36
|
+
<a href="http://rubyforge.org/projects/sgl" class="numbers">1.0.0</a>
|
37
|
+
</div>
|
38
|
+
<h2>課題19: 円</h2>
|
39
|
+
|
40
|
+
|
41
|
+
<pre syntax="ruby">
|
42
|
+
# kadai19.rb
|
43
|
+
require 'sgl'
|
44
|
+
|
45
|
+
def setup
|
46
|
+
window -200, -200, 200, 200
|
47
|
+
background 100
|
48
|
+
$x = 0
|
49
|
+
$y = 0
|
50
|
+
end
|
51
|
+
|
52
|
+
def onMouseDown(x, y)
|
53
|
+
$x = x
|
54
|
+
$y = y
|
55
|
+
end
|
56
|
+
|
57
|
+
def display
|
58
|
+
color 100, 0, 0
|
59
|
+
circle($x, $y, 100)
|
60
|
+
end
|
61
|
+
|
62
|
+
mainloop
|
63
|
+
</pre>
|
64
|
+
|
65
|
+
<p>円を描く.マウスボタンを押すと,ボタンを押したところに移動する.
|
66
|
+
プログラムの構造は課題15Aで導入された構造を使っている.</p>
|
67
|
+
|
68
|
+
|
69
|
+
<pre syntax="ruby">
|
70
|
+
def display
|
71
|
+
colorHSV 66, 100, 100, 30
|
72
|
+
circle($x, $y, 100, POLYGON)
|
73
|
+
end
|
74
|
+
</pre>
|
75
|
+
|
76
|
+
<p>塗り潰された円を描く.</p>
|
77
|
+
|
78
|
+
|
79
|
+
<pre syntax="ruby">
|
80
|
+
def display
|
81
|
+
colorHSV 33, 100, 100, 30
|
82
|
+
circle($x, $y, 100, POLYGON, 5)
|
83
|
+
end
|
84
|
+
</pre>
|
85
|
+
|
86
|
+
<p>五角形を描く.いままで円といってきたものは,実は正確には正32角形である.
|
87
|
+
上記circle文の<code>5</code>のところを<code>32</code>にすると,普通の円と同じになる.</p>
|
88
|
+
|
89
|
+
|
90
|
+
<pre syntax="ruby">
|
91
|
+
def display
|
92
|
+
x = mouseX
|
93
|
+
y = mouseY
|
94
|
+
colorHSV 8, 100, 100, 50
|
95
|
+
circle(x, y, 100, POLYGON, 7)
|
96
|
+
end
|
97
|
+
</pre>
|
98
|
+
|
99
|
+
<p>マウスを押されないでもついてくるようにする.</p>
|
100
|
+
|
101
|
+
|
102
|
+
<h2>課題20: 三次元</h2>
|
103
|
+
|
104
|
+
|
105
|
+
<pre syntax="ruby">
|
106
|
+
# kadai20.rb
|
107
|
+
require 'sgl'
|
108
|
+
|
109
|
+
window -200, -200, 200, 200
|
110
|
+
|
111
|
+
push
|
112
|
+
color 100, 0, 0
|
113
|
+
translate 30, 40, 20
|
114
|
+
rotateZ 10
|
115
|
+
rotateY 20
|
116
|
+
rotateX 30
|
117
|
+
scale 20
|
118
|
+
rect -5, -5, 5, 5
|
119
|
+
pop
|
120
|
+
|
121
|
+
wait
|
122
|
+
</pre>
|
123
|
+
|
124
|
+
<p>課題14の物体の移動の例とほとんど同じだが,<code>translate 30, 40, 20</code>として
|
125
|
+
三つの値を指定している点,<code>rotateZ</code>だけではなく,<code>rotateY</code> <code>rotateX</code>を
|
126
|
+
使っている点が違う.三つめの値はZ軸,奥行きである.手前が正の値,奥の
|
127
|
+
ほうが負の値となる.vertexを使った形の描画は,三つの値を指定することで
|
128
|
+
3Dに対応できる.</p>
|
129
|
+
|
130
|
+
|
131
|
+
<pre syntax="ruby">
|
132
|
+
require 'sgl'
|
133
|
+
|
134
|
+
def setup
|
135
|
+
window -200, -200, 200, 200
|
136
|
+
background 100
|
137
|
+
end
|
138
|
+
|
139
|
+
def display
|
140
|
+
x = mouseX
|
141
|
+
y = mouseY
|
142
|
+
|
143
|
+
push
|
144
|
+
color 100, 0, 0
|
145
|
+
translate x, y, 0
|
146
|
+
rotateX x
|
147
|
+
rotateY y
|
148
|
+
scale 20
|
149
|
+
rect -5, -5, 5, 5
|
150
|
+
pop
|
151
|
+
end
|
152
|
+
|
153
|
+
mainloop
|
154
|
+
</pre>
|
155
|
+
|
156
|
+
<p>マウスの移動と組み合わせることもできる.</p>
|
157
|
+
|
158
|
+
|
159
|
+
<pre syntax="ruby">
|
160
|
+
require 'sgl'
|
161
|
+
|
162
|
+
def setup
|
163
|
+
window -200, -200, 200, 200
|
164
|
+
background 100
|
165
|
+
$pos = [] # 中身が空の配列を用意する.
|
166
|
+
end
|
167
|
+
|
168
|
+
def display
|
169
|
+
x = mouseX
|
170
|
+
y = mouseY
|
171
|
+
|
172
|
+
$pos << [x, y] # 配列に現在のマウスの位置を追加する.
|
173
|
+
|
174
|
+
$pos.each {|pos| # 配列の各々の要素について,{}の中身を実行する.
|
175
|
+
# その各々の要素は,posという変数に入る.
|
176
|
+
x = pos[0]
|
177
|
+
y = pos[1]
|
178
|
+
|
179
|
+
push
|
180
|
+
colorHSV 0, 100, 100, 10
|
181
|
+
translate x, y, 0
|
182
|
+
rotateX x
|
183
|
+
rotateY y
|
184
|
+
scale 20
|
185
|
+
rect -5, -5, 5, 5
|
186
|
+
pop
|
187
|
+
}
|
188
|
+
|
189
|
+
if 10 < $pos.length # 配列がたまりすぎた場合は,先頭から順に捨てていく.
|
190
|
+
$pos.shift
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
mainloop
|
195
|
+
</pre>
|
196
|
+
|
197
|
+
<p>配列の使用と組み合わせてみている.</p>
|
198
|
+
<p class="coda">
|
199
|
+
30th June 2007<br>
|
200
|
+
</p>
|
201
|
+
</div>
|
202
|
+
|
203
|
+
<!-- insert site tracking codes here, like Google Urchin -->
|
204
|
+
|
205
|
+
</body>
|
206
|
+
</html>
|
@@ -0,0 +1,155 @@
|
|
1
|
+
h1. 練習問題3
|
2
|
+
|
3
|
+
h2. 課題19: 円
|
4
|
+
|
5
|
+
<pre syntax="ruby">
|
6
|
+
# kadai19.rb
|
7
|
+
require 'sgl'
|
8
|
+
|
9
|
+
def setup
|
10
|
+
window -200, -200, 200, 200
|
11
|
+
background 100
|
12
|
+
$x = 0
|
13
|
+
$y = 0
|
14
|
+
end
|
15
|
+
|
16
|
+
def onMouseDown(x, y)
|
17
|
+
$x = x
|
18
|
+
$y = y
|
19
|
+
end
|
20
|
+
|
21
|
+
def display
|
22
|
+
color 100, 0, 0
|
23
|
+
circle($x, $y, 100)
|
24
|
+
end
|
25
|
+
|
26
|
+
mainloop
|
27
|
+
</pre>
|
28
|
+
|
29
|
+
円を描く.マウスボタンを押すと,ボタンを押したところに移動する.
|
30
|
+
プログラムの構造は課題15Aで導入された構造を使っている.
|
31
|
+
|
32
|
+
<pre syntax="ruby">
|
33
|
+
def display
|
34
|
+
colorHSV 66, 100, 100, 30
|
35
|
+
circle($x, $y, 100, POLYGON)
|
36
|
+
end
|
37
|
+
</pre>
|
38
|
+
|
39
|
+
塗り潰された円を描く.
|
40
|
+
|
41
|
+
<pre syntax="ruby">
|
42
|
+
def display
|
43
|
+
colorHSV 33, 100, 100, 30
|
44
|
+
circle($x, $y, 100, POLYGON, 5)
|
45
|
+
end
|
46
|
+
</pre>
|
47
|
+
|
48
|
+
五角形を描く.いままで円といってきたものは,実は正確には正32角形である.
|
49
|
+
上記circle文の@5@のところを@32@にすると,普通の円と同じになる.
|
50
|
+
|
51
|
+
<pre syntax="ruby">
|
52
|
+
def display
|
53
|
+
x = mouseX
|
54
|
+
y = mouseY
|
55
|
+
colorHSV 8, 100, 100, 50
|
56
|
+
circle(x, y, 100, POLYGON, 7)
|
57
|
+
end
|
58
|
+
</pre>
|
59
|
+
|
60
|
+
マウスを押されないでもついてくるようにする.
|
61
|
+
|
62
|
+
h2. 課題20: 三次元
|
63
|
+
|
64
|
+
<pre syntax="ruby">
|
65
|
+
# kadai20.rb
|
66
|
+
require 'sgl'
|
67
|
+
|
68
|
+
window -200, -200, 200, 200
|
69
|
+
|
70
|
+
push
|
71
|
+
color 100, 0, 0
|
72
|
+
translate 30, 40, 20
|
73
|
+
rotateZ 10
|
74
|
+
rotateY 20
|
75
|
+
rotateX 30
|
76
|
+
scale 20
|
77
|
+
rect -5, -5, 5, 5
|
78
|
+
pop
|
79
|
+
|
80
|
+
wait
|
81
|
+
</pre>
|
82
|
+
|
83
|
+
課題14の物体の移動の例とほとんど同じだが,@translate 30, 40, 20@として
|
84
|
+
三つの値を指定している点,@rotateZ@だけではなく,@rotateY@ @rotateX@を
|
85
|
+
使っている点が違う.三つめの値はZ軸,奥行きである.手前が正の値,奥の
|
86
|
+
ほうが負の値となる.vertexを使った形の描画は,三つの値を指定することで
|
87
|
+
3Dに対応できる.
|
88
|
+
|
89
|
+
<pre syntax="ruby">
|
90
|
+
require 'sgl'
|
91
|
+
|
92
|
+
def setup
|
93
|
+
window -200, -200, 200, 200
|
94
|
+
background 100
|
95
|
+
end
|
96
|
+
|
97
|
+
def display
|
98
|
+
x = mouseX
|
99
|
+
y = mouseY
|
100
|
+
|
101
|
+
push
|
102
|
+
color 100, 0, 0
|
103
|
+
translate x, y, 0
|
104
|
+
rotateX x
|
105
|
+
rotateY y
|
106
|
+
scale 20
|
107
|
+
rect -5, -5, 5, 5
|
108
|
+
pop
|
109
|
+
end
|
110
|
+
|
111
|
+
mainloop
|
112
|
+
</pre>
|
113
|
+
|
114
|
+
マウスの移動と組み合わせることもできる.
|
115
|
+
|
116
|
+
<pre syntax="ruby">
|
117
|
+
require 'sgl'
|
118
|
+
|
119
|
+
def setup
|
120
|
+
window -200, -200, 200, 200
|
121
|
+
background 100
|
122
|
+
$pos = [] # 中身が空の配列を用意する.
|
123
|
+
end
|
124
|
+
|
125
|
+
def display
|
126
|
+
x = mouseX
|
127
|
+
y = mouseY
|
128
|
+
|
129
|
+
$pos << [x, y] # 配列に現在のマウスの位置を追加する.
|
130
|
+
|
131
|
+
$pos.each {|pos| # 配列の各々の要素について,{}の中身を実行する.
|
132
|
+
# その各々の要素は,posという変数に入る.
|
133
|
+
x = pos[0]
|
134
|
+
y = pos[1]
|
135
|
+
|
136
|
+
push
|
137
|
+
colorHSV 0, 100, 100, 10
|
138
|
+
translate x, y, 0
|
139
|
+
rotateX x
|
140
|
+
rotateY y
|
141
|
+
scale 20
|
142
|
+
rect -5, -5, 5, 5
|
143
|
+
pop
|
144
|
+
}
|
145
|
+
|
146
|
+
if 10 < $pos.length # 配列がたまりすぎた場合は,先頭から順に捨てていく.
|
147
|
+
$pos.shift
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
mainloop
|
152
|
+
</pre>
|
153
|
+
|
154
|
+
配列の使用と組み合わせてみている.
|
155
|
+
|
@@ -0,0 +1,198 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
7
|
+
<title>
|
8
|
+
練習問題4
|
9
|
+
</title>
|
10
|
+
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
11
|
+
<style>
|
12
|
+
|
13
|
+
</style>
|
14
|
+
<script type="text/javascript">
|
15
|
+
window.onload = function() {
|
16
|
+
settings = {
|
17
|
+
tl: { radius: 10 },
|
18
|
+
tr: { radius: 10 },
|
19
|
+
bl: { radius: 10 },
|
20
|
+
br: { radius: 10 },
|
21
|
+
antiAlias: true,
|
22
|
+
autoPad: true,
|
23
|
+
validTags: ["div"]
|
24
|
+
}
|
25
|
+
var versionBox = new curvyCorners(settings, document.getElementById("version"));
|
26
|
+
versionBox.applyCornersToAll();
|
27
|
+
}
|
28
|
+
</script>
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<div id="main">
|
32
|
+
|
33
|
+
<h1>練習問題4</h1>
|
34
|
+
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/sgl"; return false'>
|
35
|
+
<p>Get Version</p>
|
36
|
+
<a href="http://rubyforge.org/projects/sgl" class="numbers">1.0.0</a>
|
37
|
+
</div>
|
38
|
+
<h2>課題21: 速度</h2>
|
39
|
+
|
40
|
+
|
41
|
+
<pre syntax="ruby">
|
42
|
+
# kadai21.rb
|
43
|
+
require 'sgl'
|
44
|
+
|
45
|
+
def setup
|
46
|
+
window -200, -200, 200, 200
|
47
|
+
background 100
|
48
|
+
$x = 0
|
49
|
+
$y = 0
|
50
|
+
end
|
51
|
+
|
52
|
+
def display
|
53
|
+
x = mouseX
|
54
|
+
y = mouseY
|
55
|
+
speed = 20.0
|
56
|
+
vx = (x - $x)/speed
|
57
|
+
vy = (y - $y)/speed
|
58
|
+
$x = $x + vx
|
59
|
+
$y = $y + vy
|
60
|
+
color 100, 0, 0
|
61
|
+
circle($x, $y, 50, POLYGON)
|
62
|
+
end
|
63
|
+
|
64
|
+
mainloop
|
65
|
+
</pre>
|
66
|
+
|
67
|
+
<p>物の位置に加え,速度を導入する.円がマウスのところに近付こうとする.</p>
|
68
|
+
|
69
|
+
|
70
|
+
<pre syntax="ruby">
|
71
|
+
require 'sgl'
|
72
|
+
|
73
|
+
def setup
|
74
|
+
window -200, -200, 200, 200
|
75
|
+
background 100
|
76
|
+
$pos=[]
|
77
|
+
for i in 0..9
|
78
|
+
$pos[i] = [-200 + i * 40, 0] # 最初の位置を指定する.
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def display
|
83
|
+
x = mouseX
|
84
|
+
y = mouseY
|
85
|
+
|
86
|
+
speed = 10.0
|
87
|
+
for i in 0..9
|
88
|
+
pos = $pos[i]
|
89
|
+
vx = (x - pos[0]) / speed # マウスに吸い寄せられる速度
|
90
|
+
vy = (y - pos[1]) / speed
|
91
|
+
speed += 2.0 # 円によって速度が異なるようにする.
|
92
|
+
pos[0] = pos[0] + vx # マウスに吸い寄せられた位置
|
93
|
+
pos[1] = pos[1] + vy
|
94
|
+
color 100, 0, 0, 10
|
95
|
+
circle(pos[0], pos[1], 50, POLYGON)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
mainloop
|
100
|
+
</pre>
|
101
|
+
|
102
|
+
<p>配列の使い方を説明する.</p>
|
103
|
+
|
104
|
+
|
105
|
+
<pre syntax="ruby">
|
106
|
+
require 'sgl'
|
107
|
+
|
108
|
+
def setup
|
109
|
+
window -200, -200, 200, 200
|
110
|
+
background 100
|
111
|
+
|
112
|
+
$pos=[]
|
113
|
+
$orgpos=[]
|
114
|
+
for i in 0..19
|
115
|
+
$pos[i] = [-200 + i * 40, 0] # 最初の位置を指定する.
|
116
|
+
$orgpos[i] = [-200 + i * 40, 0] # もう一つ別の配列にも保存する.
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def display
|
121
|
+
x = mouseX
|
122
|
+
y = mouseY
|
123
|
+
|
124
|
+
for i in 0..19
|
125
|
+
pos = $pos[i] # 現在の円の位置
|
126
|
+
orgpos = $orgpos[i] # 元々の位置
|
127
|
+
|
128
|
+
if mouseDown # ボタンが押されているときだけマウスに吸いつく.
|
129
|
+
vx = x - pos[0]
|
130
|
+
vy = y - pos[1]
|
131
|
+
mag = Math.sqrt(vx * vx + vy * vy)
|
132
|
+
mag = mag / 40
|
133
|
+
mag = mag * mag + 1
|
134
|
+
vx = vx / mag
|
135
|
+
vy = vy / mag
|
136
|
+
pos[0] = pos[0] + vx
|
137
|
+
pos[1] = pos[1] + vy
|
138
|
+
end
|
139
|
+
|
140
|
+
speed = 3.0
|
141
|
+
vx2 = (orgpos[0] - pos[0]) / speed # 元々の位置に吸い寄せられる速度
|
142
|
+
vy2 = (orgpos[1] - pos[1]) / speed
|
143
|
+
pos[0] = pos[0] + vx2 # マウスに吸い寄せられた位置
|
144
|
+
pos[1] = pos[1] + vy2
|
145
|
+
color 100, 0, 0, 30
|
146
|
+
circle(pos[0], pos[1], 50, POLYGON)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
mainloop
|
151
|
+
</pre>
|
152
|
+
|
153
|
+
<p>マウスにすいよせられる円.マウスボタンを押しているときだけ反応する.</p>
|
154
|
+
|
155
|
+
|
156
|
+
<pre syntax="ruby">
|
157
|
+
require 'sgl'
|
158
|
+
|
159
|
+
def setup
|
160
|
+
window -200, -200, 200, 200
|
161
|
+
background 100
|
162
|
+
$xpos = [] # 配列を準備する.
|
163
|
+
$ypos = []
|
164
|
+
for i in 0..9
|
165
|
+
$xpos[i] = -200 + i * 40
|
166
|
+
$ypos[i] = 0
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
def display
|
171
|
+
x = mouseX
|
172
|
+
y = mouseY
|
173
|
+
|
174
|
+
speed = 10.0
|
175
|
+
for i in 0..9
|
176
|
+
vx = (x - $xpos[i]) / speed # マウスに吸い寄せられる速度
|
177
|
+
vy = (y - $ypos[i]) / speed
|
178
|
+
speed += 2.0 # 円によって速度が異なるようにする.
|
179
|
+
$xpos[i] = $xpos[i] + vx # マウスに吸い寄せられた位置
|
180
|
+
$ypos[i] = $ypos[i] + vy
|
181
|
+
color 100, 0, 0, 10
|
182
|
+
circle($xpos[i], $ypos[i], 50, POLYGON)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
mainloop
|
187
|
+
</pre>
|
188
|
+
|
189
|
+
<p>配列の使い方を変更した.</p>
|
190
|
+
<p class="coda">
|
191
|
+
30th June 2007<br>
|
192
|
+
</p>
|
193
|
+
</div>
|
194
|
+
|
195
|
+
<!-- insert site tracking codes here, like Google Urchin -->
|
196
|
+
|
197
|
+
</body>
|
198
|
+
</html>
|