<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>etoysはみ出ないように動く</title><revhistory><revision><revnumber>11</revnumber><date>2012-07-06 00:31:47</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>10</revnumber><date>2012-07-04 02:09:44</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2012-07-04 02:06:54</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2012-07-03 03:36:30</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2012-07-03 03:31:55</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2012-07-03 03:02:24</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2012-07-03 02:56:54</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2012-07-03 02:51:29</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2012-07-03 02:31:20</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2012-07-03 02:08:51</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2012-07-03 02:03:33</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>はみ出ないように動く</title><para>よく紹介されているスクリプトに </para><itemizedlist><listitem override="none"><para>自動車をコースにそって走らせたり、 魚が池から出ないように動かしたりする </para></listitem></itemizedlist><para>ものがあります。 </para><para>スクリプトでは </para><itemizedlist><listitem><para>オブジェクトの前側にセンサーに使う色で描き </para></listitem><listitem><para>その部分にどの色が触れたかで進む方向を調整 </para></listitem></itemizedlist><para>します。 </para><!--rule (<hr>) is not applicable to DocBook--><section><title>分類</title><para>センサーの個数、判定に用いる色で 次のように分類できます。 </para><section><title>センサーの個数</title><orderedlist numeration="arabic"><listitem><para>前方に１つのセンサーを用いる </para></listitem><listitem><para>前方の左右、あわせて２つのセンサーを用いる </para></listitem></orderedlist></section><section><title>判定に用いる色</title><orderedlist numeration="arabic"><listitem><para>進めない部分の色を１つ指定する。 </para></listitem><listitem><para>進める部分の色を１つ指定する。 </para></listitem></orderedlist><para>以上の組み合わせで４パターン考えられます。 </para><!--rule (<hr>) is not applicable to DocBook--></section></section><section><title>パターン１</title><itemizedlist><listitem><para>センサー１つ </para></listitem><listitem><para>進めない部分の色を指定 </para></listitem></itemizedlist><para>動かすオブジェクトに、センサーに使う印を描きます。 </para><itemizedlist><listitem override="none"><para>このオブジェクトに使われていない色にすること </para></listitem><listitem override="none"><para>進む方向の先につけること </para></listitem></itemizedlist><para>例（矢印で示した水色の部分） </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E3%81%AF%E3%81%BF%E5%87%BA%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E3%81%8F?action=AttachFile&amp;do=get&amp;target=car11.png"/></imageobject><textobject><phrase>car11.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>動かしたい範囲の周りを、１色で囲みました。 もっと複雑な形でもかまいません。</para><para> 色が同じであれば、いくつかに分けて描いてもよい。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E3%81%AF%E3%81%BF%E5%87%BA%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E3%81%8F?action=AttachFile&amp;do=get&amp;target=car21.png"/></imageobject><textobject><phrase>car21.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>スクリプトはこのように書けます。 ふちの色にぶつかったら反対向きに進みます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E3%81%AF%E3%81%BF%E5%87%BA%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E3%81%8F?action=AttachFile&amp;do=get&amp;target=car22.png"/></imageobject><textobject><phrase>car22.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>意味は </para><itemizedlist><listitem override="none"><para>センサーの部分が茶色のところに触れたときは </para><itemizedlist><listitem override="none"><para>およそ１８０度回転する </para></listitem></itemizedlist></listitem></itemizedlist><para>乱数(40)は１～４０の間の値を取るので 自動車を回すに用いる値は　１６１～２００　のどれかになります。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>パターン２</title><itemizedlist><listitem><para>センサー１つ </para></listitem><listitem><para>進める部分の色を指定 </para></listitem></itemizedlist><para>進める部分を１色で塗っています。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E3%81%AF%E3%81%BF%E5%87%BA%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E3%81%8F?action=AttachFile&amp;do=get&amp;target=car12.png"/></imageobject><textobject><phrase>car12.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>センサーが触れているのが進める部分の色かどうか判定し <emphasis role="strong">いいえ</emphasis>のとき向きを変えています。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E3%81%AF%E3%81%BF%E5%87%BA%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E3%81%8F?action=AttachFile&amp;do=get&amp;target=car13.png"/></imageobject><textobject><phrase>car13.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>パターン１とほぼ同じですが、 花の絵の部分に進めるかどうかが異なります。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>パターン３</title><itemizedlist><listitem><para>センサー２つ </para></listitem><listitem><para>進めない部分の色を指定 </para></listitem></itemizedlist><para>センサーを２つ描きます。 </para><itemizedlist><listitem override="none"><para>このオブジェクトに使われていない色にすること </para></listitem><listitem override="none"><para>進む方向の左右の先につけること </para></listitem></itemizedlist><para>例 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E3%81%AF%E3%81%BF%E5%87%BA%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E3%81%8F?action=AttachFile&amp;do=get&amp;target=car31.png"/></imageobject><textobject><phrase>car31.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>動かしたい範囲の周りを、１色で囲みました。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E3%81%AF%E3%81%BF%E5%87%BA%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E3%81%8F?action=AttachFile&amp;do=get&amp;target=car32.png"/></imageobject><textobject><phrase>car32.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>ふちの色にぶつかったときの処理を </para><itemizedlist><listitem override="none"><para>右のセンサーが当たったら左へ１０度曲がる </para></listitem><listitem override="none"><para>左のセンサーが当たったら右へ１０度曲がる </para></listitem></itemizedlist><para>とした例です。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E3%81%AF%E3%81%BF%E5%87%BA%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E3%81%8F?action=AttachFile&amp;do=get&amp;target=car33.png"/></imageobject><textobject><phrase>car33.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>このままでは、 ぶつかったときにいつも同じ曲がり方をするので、 ふちの形と ぶつかりかたによっては動けなくなってしまうことがあります。 </para><para>パターン１，２を参考にして乱数を加えるとよいでしょう。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>パターン４</title><itemizedlist><listitem><para>センサー２つ </para></listitem><listitem><para>進める部分の色を指定 </para></listitem></itemizedlist><para>進める部分を１色で塗っています。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E3%81%AF%E3%81%BF%E5%87%BA%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E3%81%8F?action=AttachFile&amp;do=get&amp;target=car41.png"/></imageobject><textobject><phrase>car41.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>センサーが触れているのが進める部分の色かどうか判定し <emphasis role="strong">いいえ</emphasis>のとき向きを変えています。 内容はパターン３と同じです。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/etoys%E3%81%AF%E3%81%BF%E5%87%BA%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E3%81%8F?action=AttachFile&amp;do=get&amp;target=car42.png"/></imageobject><textobject><phrase>car42.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>カエルの絵の部分に進めるかどうかが パターン３の動作と異なります。 </para><para>この場合も パターン１，２を参考にして乱数を加えるとよいでしょう。 </para></section></section></article>