先の質問で頂いた解答を元に製作を続けていましたが
■を黒線に追跡させる点で再びぶつかりました
進行方向にある黒線(0,0,0)を検出するために■の左上から1dotずつ取得するのですが
引用させていただき、以上のようなスクリプトを作ってみたもののいくつか問題が発生しました。
// テキトーなサンプル開始(初期化) ax = 1 ay = 1 x = 40 y = 150 // テキトーなサンプル終了(初期化) screen 0,500,400 title "こっちがスクリーン"// 判別用タイトルをつける。bufferにするときは消す buffer 1, ginfo(12), ginfo(13)// 同じ大きさのバッファを作成。今は、動作の様子を示すためscreenを使用。 //title "こっちがバッファー"// 判別用タイトルをつける。bufferにするときは消す ;赤色=ゲームオーバー ;青色=ゴール color 255,0,0 boxf course_x=0 course_y=100 ;コース生成 repeat 10 color 255,255,255 boxf course_x,course_y,course_x+100,course_y+100 course_x+100 loop color 0,0,0 gsel 0, 1// スクリーンを操作先にする。screen 1をbufferにするときはgsel 0だけにする。 gcopy 1, 0, 0, ginfo(12), ginfo(13)// 一応コースもコピー ;メインループ repeat ;線引き getkey keys,1 _mousex = mousex// バッファーだとmousexが使えないと思うので、変数に退避 _mousey = mousey// バッファーだとmouseyが使えないと思うので、変数に退避 if keys=1:{ gsel 1// 操作先をバッファにして line mx,my,_mousex,_mousey// 線を描く gsel 0// 操作先をスクリーンに mx=_mousex my=_mousey }else{ mx=_mousex my=_mousey } ;追跡 ;redraw 0 pos 0, 0 gcopy 1, 0, 0, ginfo(12), ginfo(13) // テキトーなサンプル開始(描画) xa=x-5 ya=y-5 repeat pget xa+xc,ya+yc if ginfo_r=0 & ginfo_g=0 & ginfo_b=0:{ x=xa+xc y=ya+yc xc=0:yc=0:break } ;color 0,255,0 ;pset xa+xc,ya+yc if xc>=10:{xc=0:yc+1} if yc>=10:{xc=0:yc=0:break} xc+1 loop x+1 color 0,0,0 boxf x - 5, y - 5, x + 5, y + 5 // テキトーなサンプル終了(描画) ;redraw 1 wait 1 loop
解決したいのは
・同じX座標のドットが2つ以上続くと同じ個所のドットを検出し続けてしまい止まってしまう
・同様に現在のY座標より下に行くと同様に止まってしまう
・検出後にその座標へ直接移動させてしまうために当初よりスピードが速くなってしまう
の三点です。
上に点に関しては左上からでなく逆方向から取得するというのも考えましたがまた同じ問題が起こりますし
同一座標の場合の例外を設定しても身動きが取れなくなる結果になってしまいました。
なにか良い方法がありますでしょうか?