Scratchプログラミング

 奥行き感

Scratchプログラミング 奥行き感 

先に,複数のスプライトのスクリプトを並行して動かす「並行処理」の典型的な例として水族館モデルを紹介した.Scratchを用いると,複数の魚が別々の動きで泳ぎ回るプログラムを容易に作成できるが,平面的な動きしかできなかった.もっとリアルにするには,三次元的な奥行きのある動きにする必要がある.そこで,擬似的に奥行きを加味するために,X座標の変化に合わせて魚の大きさを変えてみた.単純化するために,X軸が正の場合(中心線から右側)では魚の大きさをステップ毎に0.125倍にし,負の場合(中心線から左側)は小さくなるように変化させてみた. 

原点に置いた物体は,少しづつ拡大しながら右の 方に進行し,右壁にぶつかるが,Uターンした後も拡大しながら左側に向かって進行し,中央線を超えると縮小モードに転じ,縮小を続ける.左壁でUターンし た後も中央線に来るまで縮小を続ける.この一連の動作を繰り返すと奥行きのある動きが得られ,中央線では最大と最小の図形が観察され,擬似的に遠近感が得 られるはずである.

次図中央の熱帯魚のプログラムを右の欄に示した.画面の端(左右上下)にぶつかったら,Uターンするように指定している.その際,回転方向を左右のみにしないと,図形が上下逆さまになる.

ここでは,すべての魚に同じプログラムを適用してみた.それぞれの初期座標や大きさが異なるので,皆が同じ動きをすることはない.

編集・実行画面

準備した図は,背景として泡の位置を変えた背景図4枚,スプライトは猫と7種の魚を準備した.

スプライトはすべて透過型の図にする必要がある.さもないと長方形(物体の縦と横の長さ)の枠のスプライトが表示されてしまう.注)輪郭外の透明化は,コスチュームのビットマップモードで「背景を削除」を選択,図内部をラフになぞると輪郭外は透明になる.

 

  

猫はスプライト群に残しているが,表示させないようにしているだけである(スプライトを右クリックするとメニューが表示されるので,「隠す」を選択).

それぞれのスプライトについて,プログラムを作る必要はない.基本となるプログラムを,ある1個のスプライトについて作成し,そのプログラム全体を選択 した後,ステージ下に表示されている他のスプライトにドラッグ&ドロップするだけでプログラムがコピーされる.特定のスプライトについて,大きさ (初期値),動く速度,拡大縮小の比率を変えたい場合は,数値定数を少し変えてやればよい.

実行結果を収録した動画を以下に示した.

水族館遠近セレクト.mp4

複数の画像描画プログラムを並行処理すると書いたが,厳密にはCPUが1個の場合は,高速で処理を切り替える時 分割方式を実行していることになる.最近のパソコンはマルチCPU(2〜4)に移行しているので,そのような機種では並列処理を含むことはいうまでもな い.本プログラムを実行しているのは,2CPUマシン (Core i5, 2.5GHz, RAM 16GB) であるが,7個のプログラムでも,ギクシャクすることなく動いてくれる.パソコンのメモリーを 最大限(16 GB) 使用しているからかもしれないが,実行の際にターボモード(編集の最下部)にする必要はなかった.

Scratch3の場合の画面

注)並行処理と並列処理

2個の仕事AとBの場合

・並行処理  CPUが1個の場合は交互に処理,高速のため見掛け上二つの仕事は同時進行に見える.

ーーーー時間ーーーー> 

 CPU   ABABABABABABABABABABABAB・・・・

・並列処理  CPUが2個の場合は別々に実行できる(極端に単純化した場合).

ーーーー時間ーーーー> 

CPU1  AAAAAAAAAAAA・・・・

CPU2  BBBBBBBBBBBB・・・