画面全体をリドローしながら、そのうちの一部をリドロー後に引き継ぐ方法
irons 2013/4/27(Sat) 18:33:19|NO.53656
失礼します
今以下のゲームのようなものを作ろうと考えています
・プレイヤーはマウスを使って黒線を引く
・それを道しるべとして■が動く
・壁に触れないよう導き、ゴールすればクリア
■を移動する際に全画面をredrawで消すのですが
するとマウスで書いた線まで消えてしまい■に辿らせることができません
この線を残したまま、画面を更新する
もしくは■を移動するにはどうすればよいでしょう?
一応現段階でのスクリプト(マウスによる線描写まで)
screen 0,500,400
;赤色=ゲームオーバー
;青色=ゴール
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
;メインループ
repeat
;線引き
getkey keys,1
if keys=1:{
line mx,my,mousex,mousey
mx=mousex
my=mousey
}else{
mx=mousex
my=mousey
}
;追跡
await 1
loop
どこぞのだれか 2013/4/27(Sat) 18:42:10|NO.53657
線をバッファーに描画し、追跡直前にスクリーンにコピーしてみては?
irons 2013/4/27(Sat) 19:24:17|NO.53658
>どこぞのだれかさん
バッファに描いてみるというのも考えてはみましたが
リアルタイムで線を引きながら追跡される感じなのでどうも使えそうにはないです
■ごとバッファすると今度は考えている線の検出が難しくなりそうで……
どこぞのだれか 2013/4/27(Sat) 20:32:40|NO.53659
■ごとではなく、線のみをバッファするのです。
▼テキトーに実装してみたスクリプト
// テキトーなサンプル開始(初期化)
ax = 1
ay = 1
x = 40
y = 50
// テキトーなサンプル終了(初期化)
screen 0,500,400
title "こっちがスクリーン"// 判別用タイトルをつける。bufferにするときは消す
screen 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)
// テキトーなサンプル開始(描画)
x += ax
y += ay
if x >= ginfo(12) - 5 : ax = 0 - abs(ax) : x = ginfo(12) - 5
if y >= ginfo(13) - 5 : ay = 0 - abs(ay) : y = ginfo(13) - 5
if x < 5 : ax = abs(ax) : x = 5
if y < 5 : ay = abs(ay) : y = 5
boxf x - 5, y - 5, x + 5, y + 5
// テキトーなサンプル終了(描画)
redraw
await 1
loop
irons 2013/4/27(Sat) 20:41:01|NO.53660
なるほど、そのような順番にすれば線だけをバッファ保存できますね
ありがとうございました
irons 2013/4/27(Sat) 20:42:08|NO.53661
チェック忘れてました