元に戻す処理を行う際にどうしても最初の一回だけ余分に押す必要が出てしまいます
最初のみ処理を2回分するなど色々試してみたのですがどうしても整合性が取れなくて…
初歩的な質問+稚拙なソースで申し訳ないのですが、今の自分の知識だと解けそうにないので
どうかご回答頂けないでしょうか。
便宜上一部bufferをscreenに差し替えています。
#define U_limit 4 //アンドゥ限界 #define U_Buffer 100 //メインバッファの初期位置 #define wix 130 //ウィンドウ #define wiy 100 #define ofsx 600//初期位置 #define ofsy 300 #define x 0 #define y 1 dim keyar,26 ;キー情報 width 1,1,1,1 ;仮メイン screen U_Buffer,wix,wiy,0,ofsx,ofsy;メイン //undo→ repeat U_limit screen U_Buffer+(cnt+1),wix,wiy,0,(ofsx)+(wix*(cnt+1)),ofsy loop//------ //←redo repeat U_limit screen U_Buffer-(cnt+1),wix,wiy,0,(ofsx)-(wix*(cnt+1)),ofsy loop//------ gsel U_Buffer mes"ここに描画":mes"Z:undo Y:redo" *main A1=0 //クリック判定初期化 repeat 26 getkey a,'A'+cnt if keyar.cnt=0&a : s="_" : poke s,0,'A'+cnt:if s="Z":gosub *undo //Zが押されたら if keyar.cnt=0&a : s="_" : poke s,0,'A'+cnt:if s="Y":gosub *redo //Yが押されたら keyar.cnt=a loop stick key,256 if (key & 256){ color red,green,blue line M1(x),M1(y),mousex,mousey//変更 A1=1 } M1=mousex,mousey //マウス位置代入 if (A2=1)and(A1=0){//離したらundoに移動 repeat U_limit gsel (U_Buffer )+(U_limit) - cnt:pos 0,0 //描写先 gcopy (U_Buffer-1 )+(U_limit) - cnt,0,0,200,400 //描写元をコピー gsel U_Buffer loop//---- } A2=A1:await 10 goto *main //--------------------------------- *Undo repeat U_limit*2 gsel (U_Buffer- U_limit )+cnt :pos 0,0 //描写先に gcopy (U_Buffer- U_limit )+cnt+1 ,0,0,200,400 //描写元をコピー gsel U_Buffer loop//---- return *redo repeat U_limit*2 gsel (U_Buffer )+(U_limit) - cnt:pos 0,0 //描写先に gcopy (U_Buffer-1 )+(U_limit) - cnt,0,0,200,400 //描写元をコピー gsel U_Buffer loop//---- return