HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0427
irons画面全体をリドローしながら、そのうちの一部をリドロー後に引き継ぐ方法5解決


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

チェック忘れてました



ONION software Copyright 1997-2023(c) All rights reserved.