今回のでは上はきちんと消えますが?
私のミスでしょうか
でもまぁ一応解決策は見つけましたので
全部に目を通してみてやっとわかりました(遅いよ俺(;;)
てことで解説なのですが
右左で消えない理由
xに10 yに350 と仮定
if mousex>56 and mousex<331{ x が 10 だとここの処理はスキップされる
if mousey>318 and mousey<358{
pos 43,295
gmode 2
gcopy 3,0,0,310,100
}else{
pos 31,302
gmode 0
gcopy 4,0,0,400,400
}
}
if mousex<56 and mousex>331{ x が 10 で56以下なので下の処理へ
if mousey<318 and mousey>358{ y が 350 で318以下ではないのでここの処理はスキップ
cls
pos 31,302
gmode 0
gcopy 4,0,0,400,400
}
}
結局何もしないままループ
↓
これだと
もしマウスが xに10 yに350 あったとしますよね
最初のif判定でxは56以下で合っていないとみなされスキップされます
下のほうのif文は一見あっているように見えますが
今度はxは56以下で下の処理が実行されるんですが
yが318以上でスキップされてしまします
すると何の処理もしないまま一通り終わってしまい状況は変わらないのです
これを解決するには4つのifを1つにまとめて判定するというものです
1つでも条件に合っていなければその下の処理がスキップされelse命令が実行されるようにすればいいわけです
//一応画像を再現
//screen命令で一応可視にしておいた
//baffer picload の組み合わせもいいが celload celput の組み合わせだと楽
screen 3
color 0,255,0
boxf 0,0,310,100
color 0,0,0
boxf 5,5,305,95
screen 4
color 0,0,255
boxf 0,0,400,400
gsel 0
//===========以下が問題のスクリプト
*a //repeat〜loopでも可
redraw 0 // ここから下の描画命令gcoppyなどは裏面(仮想的に描画される)
if mousex>56 and mousex<331 and mousey>318 and mousey<358{ //4つの条件がすべて合っていないと偽の判定になる
pos 43,295
gmode 2
gcopy 3,0,0,310,100
}else{ //マウスが指定より外だった場合
color 255,255,255
boxf //clsは画面の初期化命令なのでboxfのほうが負荷が少ない
pos 31,302
gmode 0
gcopy 4,0,0,400,400
}
redraw 1 //さっきまで裏面(仮想的に描画していたもの)を表(自分たちが見ているウインドウ内)に描画
await 10
goto *a
説明が私も下手なので
すみません
//===========以下が問題のスクリプト
から下を使えば何ら問題なく使えます