welcome: please sign in
location: "etoysはみ出ないように動く"の差分
10と11のリビジョン間の差分
2012-07-04 02:09:44時点のリビジョン10
サイズ: 3787
編集者: masahiko
コメント:
2012-07-06 00:31:47時点のリビジョン11
サイズ: 3770
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 1: 行 1:
#acl All:
行 10: 行 9:
 * オブジェクトの前側にセンサーとなるものを設定し
 * センサーにどの色が触れたかで進む方向を調整
 * オブジェクトの前側にセンサーに使う色で描き
 * その部分にどの色が触れたかで進む方向を調整

はみ出ないように動く

よく紹介されているスクリプトに

  • 自動車をコースにそって走らせたり、 魚が池から出ないように動かしたりする

ものがあります。

スクリプトでは

  • オブジェクトの前側にセンサーに使う色で描き
  • その部分にどの色が触れたかで進む方向を調整

します。


分類

センサーの個数、判定に用いる色で 次のように分類できます。

センサーの個数

  1. 前方に1つのセンサーを用いる
  2. 前方の左右、あわせて2つのセンサーを用いる

判定に用いる色

  1. 進めない部分の色を1つ指定する。
  2. 進める部分の色を1つ指定する。

以上の組み合わせで4パターン考えられます。


パターン1

  • センサー1つ
  • 進めない部分の色を指定

動かすオブジェクトに、センサーに使う印を描きます。

  • このオブジェクトに使われていない色にすること
  • 進む方向の先につけること

例(矢印で示した水色の部分)

  • car11.png

動かしたい範囲の周りを、1色で囲みました。 もっと複雑な形でもかまいません。
色が同じであれば、いくつかに分けて描いてもよい。

  • car21.png

スクリプトはこのように書けます。 ふちの色にぶつかったら反対向きに進みます。

  • car22.png

意味は

  • センサーの部分が茶色のところに触れたときは
    • およそ180度回転する

乱数(40)は1~40の間の値を取るので 自動車を回すに用いる値は 161~200 のどれかになります。


パターン2

  • センサー1つ
  • 進める部分の色を指定

進める部分を1色で塗っています。

  • car12.png

センサーが触れているのが進める部分の色かどうか判定し いいえのとき向きを変えています。

  • car13.png

パターン1とほぼ同じですが、 花の絵の部分に進めるかどうかが異なります。


パターン3

  • センサー2つ
  • 進めない部分の色を指定

センサーを2つ描きます。

  • このオブジェクトに使われていない色にすること
  • 進む方向の左右の先につけること

  • car31.png

動かしたい範囲の周りを、1色で囲みました。

  • car32.png

ふちの色にぶつかったときの処理を

  • 右のセンサーが当たったら左へ10度曲がる
  • 左のセンサーが当たったら右へ10度曲がる

とした例です。

  • car33.png

このままでは、 ぶつかったときにいつも同じ曲がり方をするので、 ふちの形と ぶつかりかたによっては動けなくなってしまうことがあります。

パターン1,2を参考にして乱数を加えるとよいでしょう。


パターン4

  • センサー2つ
  • 進める部分の色を指定

進める部分を1色で塗っています。

  • car41.png

センサーが触れているのが進める部分の色かどうか判定し いいえのとき向きを変えています。 内容はパターン3と同じです。

  • car42.png

カエルの絵の部分に進めるかどうかが パターン3の動作と異なります。

この場合も パターン1,2を参考にして乱数を加えるとよいでしょう。

etoysはみ出ないように動く (最終更新日時 2012-07-06 00:31:47 更新者 masahiko)