sgl 0.3.1 → 0.4.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.
Files changed (103) hide show
  1. data/ChangeLog +234 -0
  2. data/Manifest.txt +94 -0
  3. data/Rakefile +16 -5
  4. data/examples/cocoa1-basic.rb +14 -0
  5. data/examples/cocoa10-transparent.rb +26 -0
  6. data/examples/cocoa11-application.rb +13 -0
  7. data/examples/cocoa2-draw.rb +23 -0
  8. data/examples/cocoa3-affine.rb +29 -0
  9. data/examples/cocoa4-font.rb +24 -0
  10. data/examples/cocoa5-image.rb +22 -0
  11. data/examples/cocoa6-sound.rb +24 -0
  12. data/examples/cocoa7-movie.rb +40 -0
  13. data/examples/cocoa8-movieoverlay.rb +42 -0
  14. data/examples/cocoa9-streaming.rb +40 -0
  15. data/examples/opengl1-basic.rb +14 -0
  16. data/examples/opengl11-application.rb +13 -0
  17. data/examples/opengl2-draw.rb +23 -0
  18. data/examples/opengl3-affine.rb +29 -0
  19. data/examples/sample1.rb +11 -0
  20. data/examples/sample10.rb +16 -0
  21. data/examples/sample11.rb +22 -0
  22. data/examples/sample11a.rb +33 -0
  23. data/examples/sample12.rb +30 -0
  24. data/examples/sample12a.rb +35 -0
  25. data/examples/sample13.rb +116 -0
  26. data/examples/sample15.rb +24 -0
  27. data/examples/sample16.rb +31 -0
  28. data/examples/sample16a.rb +35 -0
  29. data/examples/sample6.rb +18 -0
  30. data/examples/sample7.rb +16 -0
  31. data/examples/sample9.rb +20 -0
  32. data/examples/sgl-sound1.rb +6 -0
  33. data/examples/sgl-sound2.rb +19 -0
  34. data/examples/sine.ogg +0 -0
  35. data/examples/testgl.rb +169 -0
  36. data/lib/sgl/bass-api.rb +202 -0
  37. data/lib/sgl/bass-sample.rb +106 -0
  38. data/lib/sgl/bass.rb +46 -0
  39. data/lib/sgl/cocoa-app.rb +43 -0
  40. data/lib/sgl/cocoa-color.rb +65 -0
  41. data/lib/sgl/cocoa-draw.rb +72 -0
  42. data/lib/sgl/cocoa-event.rb +229 -0
  43. data/lib/sgl/cocoa-media.rb +144 -0
  44. data/lib/sgl/cocoa-notuse.rb +493 -0
  45. data/lib/sgl/cocoa-window.rb +203 -0
  46. data/lib/sgl/cocoa.rb +8 -0
  47. data/lib/sgl/notuse-objs.rb +358 -0
  48. data/lib/sgl/opengl-app.rb +38 -0
  49. data/lib/sgl/opengl-color.rb +44 -0
  50. data/lib/sgl/opengl-draw.rb +260 -0
  51. data/lib/sgl/opengl-event.rb +325 -0
  52. data/lib/sgl/opengl-modules.rb +22 -0
  53. data/lib/sgl/opengl-window.rb +224 -0
  54. data/lib/sgl/opengl.rb +7 -0
  55. data/lib/sgl/sgl-basic.rb +61 -0
  56. data/lib/sgl/sgl-button.rb +135 -0
  57. data/lib/sgl/sgl-client.rb +21 -0
  58. data/lib/sgl/sgl-color.rb +82 -0
  59. data/lib/sgl/sgl-connect.rb +9 -0
  60. data/lib/sgl/sgl-objlib.rb +0 -0
  61. data/lib/sgl/sgl-objs.rb +0 -0
  62. data/lib/sgl/sgl-server.rb +58 -0
  63. data/lib/sgl/sgl-sound.rb +24 -0
  64. data/lib/sgl/sgl-spring.rb +216 -0
  65. data/lib/sgl/sgl-timer.rb +72 -0
  66. data/lib/sgl/sgl.rb +5 -0
  67. data/lib/sgl/version.rb +2 -2
  68. data/scripts/makemanifest.rb +20 -0
  69. data/test/test_bass.rb +27 -0
  70. data/test/test_cocoa_app.rb +5 -5
  71. data/test/test_helper.rb +9 -1
  72. data/test/test_module_ruby16.rb +22 -21
  73. data/test/test_opengl_app.rb +4 -5
  74. data/test/test_opengl_basic.rb +3 -4
  75. data/test/test_opengl_fullscreen.rb +4 -6
  76. data/test/test_opengl_novice.rb +3 -6
  77. data/test/test_sgl.rb +4 -27
  78. data/test/test_sound.rb +15 -0
  79. data/website/challenge1.html +91 -0
  80. data/website/challenge1.txt +30 -0
  81. data/website/challenge2.html +144 -0
  82. data/website/challenge2.txt +73 -0
  83. data/website/challenge3.html +63 -0
  84. data/website/challenge3.txt +15 -0
  85. data/website/cocoa.html +88 -0
  86. data/website/cocoa.txt +35 -0
  87. data/website/description.html +138 -0
  88. data/website/description.txt +90 -0
  89. data/website/exercise1.html +264 -0
  90. data/website/exercise1.txt +192 -0
  91. data/website/exercise2.html +683 -0
  92. data/website/exercise2.txt +597 -0
  93. data/website/exhibition.html +84 -0
  94. data/website/exhibition.txt +24 -0
  95. data/website/howto.html +134 -0
  96. data/website/howto.txt +56 -0
  97. data/website/index.html +17 -9
  98. data/website/index.txt +13 -4
  99. data/website/sound.html +141 -0
  100. data/website/sound.txt +87 -0
  101. data/website/stylesheets/grade.png +0 -0
  102. data/website/stylesheets/screen.css +21 -20
  103. metadata +109 -3
@@ -0,0 +1,683 @@
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
+ 練習問題 11〜21
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>練習問題 11〜21</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">0.4.0</a>
37
+ </div>
38
+ <h2>課題15 マウスのボタンが押された時に</h2>
39
+
40
+
41
+ <h2>課題16 円の描き方</h2>
42
+
43
+
44
+ <h2>課題18 三次元</h2>
45
+
46
+
47
+ <h2>課題19 速度</h2>
48
+
49
+
50
+ <h2>課題20 キーボードからの入力</h2>
51
+
52
+
53
+ <h2>課題21 配列の使い方</h2>
54
+
55
+
56
+ <h2>課題11A マウスの位置に反応する形</h2>
57
+
58
+
59
+ <pre syntax="ruby">
60
+ require 'sgl'
61
+
62
+ window 200,200
63
+
64
+ loop do
65
+ x = mouseX
66
+ y = mouseY
67
+ rect x-5, y-5, x+5, y+5
68
+ flip
69
+ end
70
+ </pre>
71
+
72
+ <p>mouseXとmouseYでマウス位置を取得する.rectで四角形を描画する.</p>
73
+
74
+
75
+ <p>rectの前に<code>color x, y, 0</code>をいれてみる.</p>
76
+
77
+
78
+ rectの後に下記をいれてみる.
79
+ <pre syntax="ruby">
80
+ line 0, 0, x, y
81
+ line 200, 0, x, y
82
+ line 0, 200, x, y
83
+ line 200, 200, x, y
84
+ </pre>
85
+
86
+ <h2>課題12A 複雑な形の描画</h2>
87
+
88
+
89
+ <pre syntax="ruby">
90
+ require 'sgl'
91
+
92
+ window -200, -200, 200, 200
93
+
94
+ beginObj(POLYGON)
95
+ vertex 60, 90
96
+ vertex -120, 60
97
+ vertex -90, -90
98
+ vertex 120, -90
99
+ endObj
100
+
101
+ wait
102
+ </pre>
103
+
104
+ <p><code>window -200, -200, 200, 200</code>のようにして四つの値を指定できる.
105
+ beginObjとendObjではさまれた領域で形を描く.</p>
106
+
107
+
108
+ <pre syntax="ruby">
109
+ beginObj(POLYGON)
110
+ color 100, 0, 0, 100
111
+ vertex 60, 90
112
+ color 0, 100, 0, 100
113
+ vertex -120, 60
114
+ color 0, 0, 100, 100
115
+ vertex -90, -90
116
+ color 100, 100, 0, 100
117
+ vertex 120, -90
118
+ endObj
119
+ </pre>
120
+
121
+ <p>頂点ごとに色を指定できる.</p>
122
+
123
+
124
+ <pre syntax="ruby">
125
+ beginObj(POLYGON)
126
+ color 100, 0, 0, 0
127
+ vertex 60, 90
128
+ color 0, 100, 0, 100
129
+ vertex -120, 60
130
+ color 0, 0, 100, 100
131
+ vertex -90, -90
132
+ color 100, 100, 0, 0
133
+ vertex 120, -90
134
+ endObj
135
+ </pre>
136
+
137
+ <p>頂点ごとに透明度も変えられる.</p>
138
+
139
+
140
+ <h2>課題13A スムースな線の描画</h2>
141
+
142
+
143
+ <pre syntax="ruby">
144
+ require 'sgl'
145
+
146
+ useSmooth
147
+
148
+ window -200, -200, 200, 200
149
+
150
+ beginObj(LINE_LOOP)
151
+ color 100, 0, 0, 100
152
+ vertex 60, 90
153
+ color 0, 100, 0, 50
154
+ vertex -120, 60
155
+ color 0, 0, 100, 50
156
+ vertex -90, -90
157
+ color 100, 100, 0, 100
158
+ vertex 120, -90
159
+ endObj
160
+
161
+ wait
162
+ </pre>
163
+
164
+ <p>windowの前にuseSmoothを指定することによって,アンチエイリアスを
165
+ かけることができる.</p>
166
+
167
+
168
+ <p>beginObjの括弧の中は,<code>POLYGON</code>または<code>LINE_LOOP</code>を指定する.
169
+ この二つがあればほぼ十分であるが,他に下記方法も指定できる.</p>
170
+
171
+
172
+ <p><span class="caps">LINES</span>, POINTS, <span class="caps">LINE</span>_STRIP, <span class="caps">LINE</span>_LOOP, <span class="caps">TRIANGLES</span>, TRIANGLE_STRIP,
173
+ <span class="caps">TRIANGLE</span>_FAN, <span class="caps">QUADS</span>, QUAD_STRIP, <span class="caps">POLYGON</span>,</p>
174
+
175
+
176
+ <h2>課題14A 物体の移動</h2>
177
+
178
+
179
+ <pre syntax="ruby">
180
+ require 'sgl'
181
+
182
+ useSmooth
183
+
184
+ window -200, -200, 200, 200
185
+
186
+ push
187
+ translate 100, 0
188
+ rotateZ 10
189
+ scale 2
190
+ rect -5, -5, 5, 5
191
+ pop
192
+
193
+ wait
194
+ </pre>
195
+
196
+ <p>今回でてきた新しいコマンド,
197
+ push, pop, translate, rotateZ, scaleを使って回転移動拡大縮小などができ
198
+ るようになる.pushとpopで囲まれていることが非常に重要である.また襦袢
199
+ として,translate, rotateZ, scaleの順番に指定することが重要.形を描く
200
+ コマンドと,位置,回転角度などの指定を分離できる.</p>
201
+
202
+
203
+ <h2>課題15A ボタンが押されたその時に</h2>
204
+
205
+
206
+ <pre syntax="ruby">
207
+ require 'sgl'
208
+
209
+ def setup
210
+ window -200, -200, 200, 200
211
+ background 0
212
+ $x = 0
213
+ $y = 0
214
+ end
215
+
216
+ def onMouseDown(x, y)
217
+ $x = x
218
+ $y = y
219
+ end
220
+
221
+ def display
222
+ line 0, 0, $x, $y
223
+ end
224
+
225
+ mainloop
226
+ </pre>
227
+
228
+ <p>いままではプログラムはかかれている順番通りに実行されるものだったが,こ
229
+ こでは違う順序となっている.まず最初にコマンドを登録し,それが後に呼ば
230
+ れて実行されることになる.このようにプログラムの実行順番が違う方式をこ
231
+ れから採用する.</p>
232
+
233
+
234
+ <p>setup, onMouseDown, displayというコマンドを登録する.その後mainloopと
235
+ いうコマンドを呼ぶ.このメインループの中で,全てのプログラムが実行され,
236
+ 適宜setup, displayが呼び出される.マウスのボタンが押された瞬間に,
237
+ onMouseDownというコマンドが呼ばれる.</p>
238
+
239
+
240
+ <p>そのonMouseDownの前に,$xという$のついた変数がつかわれている.変数には
241
+ それぞれ使える範囲というのもがあるのだが,通常は一つのコマンドの範囲内
242
+ でしか使うことができなかった.しかし,$のついた変数であれば,プログラ
243
+ ムが動いている間ずっと残る.プログラムの最初の部分で,<code>$x = 0</code>のように
244
+ して,あらかじめなんらかの値を代入することで,変数を使うということを示
245
+ す必要がある.</p>
246
+
247
+
248
+ <h2>課題16A 円</h2>
249
+
250
+
251
+ <pre syntax="ruby">
252
+ require 'sgl'
253
+
254
+ def setup
255
+ window -200, -200, 200, 200
256
+ background 100
257
+ $x = 0
258
+ $y = 0
259
+ end
260
+
261
+ def onMouseDown(x, y)
262
+ $x = x
263
+ $y = y
264
+ end
265
+
266
+ def display
267
+ color 100, 0, 0
268
+ circle($x, $y, 100)
269
+ end
270
+
271
+ mainloop
272
+ </pre>
273
+
274
+ <p>円を描く.マウスボタンを押すと,ボタンを押したところに移動する.
275
+ プログラムの構造は課題15Aで導入された構造を使っている.</p>
276
+
277
+
278
+ <pre syntax="ruby">
279
+ def display
280
+ colorHSV 66, 100, 100, 30
281
+ circle($x, $y, 100, POLYGON)
282
+ end
283
+ </pre>
284
+
285
+ <p>塗り潰された円を描く.</p>
286
+
287
+
288
+ <pre syntax="ruby">
289
+ def display
290
+ colorHSV 33, 100, 100, 30
291
+ circle($x, $y, 100, POLYGON, 5)
292
+ end
293
+ </pre>
294
+
295
+ <p>五角形を描く.いままで円といってきたものは,実は正確には正32角形である.
296
+ 上記circle文の<code>5</code>のところを<code>32</code>にすると,普通の円と同じになる.</p>
297
+
298
+
299
+ <pre syntax="ruby">
300
+ def display
301
+ x = mouseX
302
+ y = mouseY
303
+ colorHSV 8, 100, 100, 50
304
+ circle(x, y, 100, POLYGON, 7)
305
+ end
306
+ </pre>
307
+
308
+ <p>マウスを押されないでもついてくるようにする.</p>
309
+
310
+
311
+ <h2>課題18A 3D</h2>
312
+
313
+
314
+ <pre syntax="ruby">
315
+ require 'sgl'
316
+
317
+ window -200, -200, 200, 200
318
+
319
+ push
320
+ color 100, 0, 0
321
+ translate 30, 40, 20
322
+ rotateZ 10
323
+ rotateY 20
324
+ rotateX 30
325
+ scale 20
326
+ rect -5, -5, 5, 5
327
+ pop
328
+
329
+ wait
330
+ </pre>
331
+
332
+ <p>課題14の物体の移動の例とほとんど同じだが,<code>translate 30, 40, 20</code>として
333
+ 三つの値を指定している点,<code>rotateZ</code>だけではなく,<code>rotateY</code> <code>rotateX</code>を
334
+ 使っている点が違う.三つめの値はZ軸,奥行きである.手前が正の値,奥の
335
+ ほうが負の値となる.vertexを使った形の描画は,三つの値を指定することで
336
+ 3Dに対応できる.</p>
337
+
338
+
339
+ <pre syntax="ruby">
340
+ require 'sgl'
341
+
342
+ def setup
343
+ window -200, -200, 200, 200
344
+ background 100
345
+ end
346
+
347
+ def display
348
+ x = mouseX
349
+ y = mouseY
350
+
351
+ push
352
+ color 100, 0, 0
353
+ translate x, y, 0
354
+ rotateX x
355
+ rotateY y
356
+ scale 20
357
+ rect -5, -5, 5, 5
358
+ pop
359
+ end
360
+
361
+ mainloop
362
+ </pre>
363
+
364
+ <p>マウスの移動と組み合わせることもできる.</p>
365
+
366
+
367
+ <pre syntax="ruby">
368
+ require 'sgl'
369
+
370
+ def setup
371
+ window -200, -200, 200, 200
372
+ background 100
373
+ $pos = [] # 中身が空の配列を用意する.
374
+ end
375
+
376
+ def display
377
+ x = mouseX
378
+ y = mouseY
379
+
380
+ $pos &lt;&lt; [x, y] # 配列に現在のマウスの位置を追加する.
381
+
382
+ $pos.each {|pos| # 配列の各々の要素について,{}の中身を実行する.
383
+ # その各々の要素は,posという変数に入る.
384
+ x = pos[0]
385
+ y = pos[1]
386
+
387
+ push
388
+ colorHSV 0, 100, 100, 10
389
+ translate x, y, 0
390
+ rotateX x
391
+ rotateY y
392
+ scale 20
393
+ rect -5, -5, 5, 5
394
+ pop
395
+ }
396
+
397
+ if 10 &lt; $pos.length # 配列がたまりすぎた場合は,先頭から順に捨てていく.
398
+ $pos.shift
399
+ end
400
+ end
401
+
402
+ mainloop
403
+ </pre>
404
+
405
+ <p>配列の使用と組み合わせてみている.</p>
406
+
407
+
408
+ <h2>課題19A 速度</h2>
409
+
410
+
411
+ <pre syntax="ruby">
412
+ require 'sgl'
413
+
414
+ def setup
415
+ window -200, -200, 200, 200
416
+ background 100
417
+ $x = 0
418
+ $y = 0
419
+ end
420
+
421
+ def display
422
+ x = mouseX
423
+ y = mouseY
424
+ speed = 20.0
425
+ vx = (x - $x)/speed
426
+ vy = (y - $y)/speed
427
+ $x = $x + vx
428
+ $y = $y + vy
429
+ color 100, 0, 0
430
+ circle($x, $y, 50, POLYGON)
431
+ end
432
+
433
+ mainloop
434
+ </pre>
435
+
436
+ <p>物の位置に加え,速度を導入する.円がマウスのところに近付こうとする.</p>
437
+
438
+
439
+ <pre syntax="ruby">
440
+ require 'sgl'
441
+
442
+ def setup
443
+ window -200, -200, 200, 200
444
+ background 100
445
+ $pos=[]
446
+ for i in 0..9
447
+ $pos[i] = [-200 + i * 40, 0] # 最初の位置を指定する.
448
+ end
449
+ end
450
+
451
+ def display
452
+ x = mouseX
453
+ y = mouseY
454
+
455
+ speed = 10.0
456
+ for i in 0..9
457
+ pos = $pos[i]
458
+ vx = (x - pos[0]) / speed # マウスに吸い寄せられる速度
459
+ vy = (y - pos[1]) / speed
460
+ speed += 2.0 # 円によって速度が異なるようにする.
461
+ pos[0] = pos[0] + vx # マウスに吸い寄せられた位置
462
+ pos[1] = pos[1] + vy
463
+ color 100, 0, 0, 10
464
+ circle(pos[0], pos[1], 50, POLYGON)
465
+ end
466
+ end
467
+
468
+ mainloop
469
+ </pre>
470
+
471
+ <p>配列の使い方を説明する.</p>
472
+
473
+
474
+ <pre syntax="ruby">
475
+ require 'sgl'
476
+
477
+ def setup
478
+ window -200, -200, 200, 200
479
+ background 100
480
+
481
+ $pos=[]
482
+ $orgpos=[]
483
+ for i in 0..19
484
+ $pos[i] = [-200 + i * 40, 0] # 最初の位置を指定する.
485
+ $orgpos[i] = [-200 + i * 40, 0] # もう一つ別の配列にも保存する.
486
+ end
487
+ end
488
+
489
+ def display
490
+ x = mouseX
491
+ y = mouseY
492
+
493
+ for i in 0..19
494
+ pos = $pos[i] # 現在の円の位置
495
+ orgpos = $orgpos[i] # 元々の位置
496
+
497
+ if mouseDown # ボタンが押されているときだけマウスに吸いつく.
498
+ vx = x - pos[0]
499
+ vy = y - pos[1]
500
+ mag = Math.sqrt(vx * vx + vy * vy)
501
+ mag = mag / 40
502
+ mag = mag * mag + 1
503
+ vx = vx / mag
504
+ vy = vy / mag
505
+ pos[0] = pos[0] + vx
506
+ pos[1] = pos[1] + vy
507
+ end
508
+
509
+ speed = 3.0
510
+ vx2 = (orgpos[0] - pos[0]) / speed # 元々の位置に吸い寄せられる速度
511
+ vy2 = (orgpos[1] - pos[1]) / speed
512
+ pos[0] = pos[0] + vx2 # マウスに吸い寄せられた位置
513
+ pos[1] = pos[1] + vy2
514
+ color 100, 0, 0, 30
515
+ circle(pos[0], pos[1], 50, POLYGON)
516
+ end
517
+ end
518
+
519
+ mainloop
520
+ </pre>
521
+
522
+ <p>マウスにすいよせられる円.マウスボタンを押しているときだけ反応する.</p>
523
+
524
+
525
+ <pre syntax="ruby">
526
+ require 'sgl'
527
+
528
+ def setup
529
+ window -200, -200, 200, 200
530
+ background 100
531
+ $xpos = [] # 配列を準備する.
532
+ $ypos = []
533
+ for i in 0..9
534
+ $xpos[i] = -200 + i * 40
535
+ $ypos[i] = 0
536
+ end
537
+ end
538
+
539
+ def display
540
+ x = mouseX
541
+ y = mouseY
542
+
543
+ speed = 10.0
544
+ for i in 0..9
545
+ vx = (x - $xpos[i]) / speed # マウスに吸い寄せられる速度
546
+ vy = (y - $ypos[i]) / speed
547
+ speed += 2.0 # 円によって速度が異なるようにする.
548
+ $xpos[i] = $xpos[i] + vx # マウスに吸い寄せられた位置
549
+ $ypos[i] = $ypos[i] + vy
550
+ color 100, 0, 0, 10
551
+ circle($xpos[i], $ypos[i], 50, POLYGON)
552
+ end
553
+ end
554
+
555
+ mainloop
556
+ </pre>
557
+
558
+ <p>配列の使い方を変更した.</p>
559
+
560
+
561
+ <h2>課題20A キーボードからの入力の仕方</h2>
562
+
563
+
564
+ <pre syntax="ruby">
565
+ require 'sgl'
566
+
567
+ def setup
568
+ window 200, 200
569
+ background 100
570
+ $key = 0
571
+ end
572
+
573
+ def onKeyDown(key)
574
+ p key
575
+ $key = key
576
+ end
577
+
578
+ def display
579
+ colorHSV $key, 100, 100
580
+ line $key, 0, $key, 200
581
+ end
582
+
583
+ mainloop
584
+ </pre>
585
+
586
+ <p>アルファベットのキーを押すと,keyに1〜26の値が入る.Aが1,Zが26という
587
+ 関係になる.</p>
588
+
589
+
590
+ <p>それら以外のキーを押したときにどのようなキーコードになるかは,
591
+ <code>c:\ruby\doc\rubysdl\rubysdl_const_list.txt</code> に記述されている.
592
+ 数字の0が押されたときは,<code>SDL::Key::K0</code>という値となる.</p>
593
+
594
+
595
+ <h2>課題21A 配列の使い方return</h2>
596
+
597
+
598
+ <pre syntax="ruby">
599
+ require 'sgl'
600
+
601
+ def setup
602
+ window -200, -200, 200, 200
603
+ background 100
604
+ $pos = [] # 中身が空の配列を用意する.
605
+ for a in 0..10 # 配列の要素それぞれについて繰り返す.
606
+ $pos[a] = 0 # 中身に全部0を入れておく.
607
+ end
608
+ $index = 0 # 現在配列のどこの部分を指しているかを示す変数である.
609
+ end
610
+
611
+ def display
612
+ $pos[$index] = mouseX # 配列の$indexの示す個所に現在のマウスのx座標を入れる.
613
+
614
+ for a in 0..10 # 配列の要素それぞれについて繰り返します.
615
+ x = $pos[a]
616
+ color 0
617
+ line x, -100, x, 100 # 縦線を描く.
618
+ end
619
+
620
+ $index = $index + 1 # 現在を示す$indexを次の値のところにセットする.
621
+ if 10 &lt; $index # $indexが配列の大きさを越えたら0にセットしなおす.
622
+ $index = 0
623
+ end
624
+
625
+ p $pos # $posという配列の中身を表示する.
626
+ end
627
+
628
+ mainloop
629
+ </pre>
630
+
631
+ <p>配列の使い方の基本形である.縦線が,マウスの動きを追って動く.つまりマ
632
+ ウスのx座標だけを保存している.x座標,y座標を保存するとどうなるか,実
633
+ 験する.</p>
634
+
635
+
636
+ <pre syntax="ruby">
637
+ require 'sgl'
638
+
639
+ def setup
640
+ window -200, -200, 200, 200
641
+ background 100
642
+ $xpos = [] # 中身が空の配列を,x座標,y座標について用意する.
643
+ $ypos = []
644
+ for a in 0..10 # 配列の要素それぞれについて繰り返す.
645
+ $xpos[a] = 0
646
+ $ypos[a] = 0
647
+ end
648
+ $index = 0 # 現在配列のどこの部分を指しているかを示す変数.
649
+ end
650
+
651
+ def display
652
+ $xpos[$index] = mouseX
653
+ $ypos[$index] = mouseY
654
+
655
+ for a in 0..10 # 配列の要素それぞれについて繰り返す.
656
+ x = $xpos[a]
657
+ y = $ypos[a]
658
+ color 0
659
+ circle x, y, 50
660
+ end
661
+
662
+ $index = $index + 1 # 現在を示す$indexを,次の値のところにセットする.
663
+ if 10 &lt; $index # $indexが配列の最大を越えたら,0にセットしなおす.
664
+ $index = 0
665
+ end
666
+
667
+ p $xpos
668
+ p $ypos
669
+ end
670
+
671
+ mainloop
672
+ </pre>
673
+
674
+ <p>このように値を保存する配列を増やしていくようにする.</p>
675
+ <p class="coda">
676
+ 20th June 2007<br>
677
+ </p>
678
+ </div>
679
+
680
+ <!-- insert site tracking codes here, like Google Urchin -->
681
+
682
+ </body>
683
+ </html>