|
|
2015/8/4(Tue) 22:16:13|NO.70473
画面更新時にlineを使用してペイントのようなものを作るにはどうすればよいでしょうか?
新規クリック時の開始地点が0になってしまいます
repeat
stick key,256
redraw 0
pos 0,0
repeat length(x)
line x.cnt,y.cnt
loop
if (key & 256){
x.cnt=mousex
y.cnt=mousey
line x.cnt,y.cnt,mousex,mousey
}
redraw 1
await
loop
(最近Googleでhsp 掲示板を出すとたまにURLが http://hsp.tv/play//pforum.php となって画像が消えたり
掲示板のコンテストに謎の = 文字がある。)
|
|
2015/8/4(Tue) 22:55:29|NO.70474
ご提示されているソースは、果てしなく配列が拡張されていくのであんまり
宜しくないと思います。
それはさておき実際にペイントソフトを作ろうとすると問題は山積みですが、
とりあえずこれでご希望の動作をすると思います。
repeat
stick key,256
if (key & 256){
line x,y,mousex,mousey
x=mousex
y=mousey
}
x=mousex
y=mousey
await
loop
|
|
2015/8/4(Tue) 22:56:30|NO.70475
これはどうですか?
*mainloop
stick key,256
if key = 256 : line x,y,mousex,mousey
x=mousex : y=mousey
await 5 : goto *mainloop
|
|
2015/8/4(Tue) 22:57:27|NO.70476
あ・・・先着がいましたね;
すみません;;
ちなみに撃さんと全く同じ処理です><
|
|
2015/8/4(Tue) 22:59:09|NO.70477
連投失礼。
5〜6行目は不要でした。
|
|
2015/8/4(Tue) 23:26:48|NO.70478
ソースをくださった方々、ありがとうございます。
ちょっと質問に仕方が悪かったようです。
普通の方法なら画面更新がされず以前の内容が残るのでペインティングできるんですが
redraw ~ boxf ~ redraw という処理が必要だった場合以前の内容が毎回消されるので
画面に描画→画面更新前に記録→画面に描画...という処理が必要になるはずです。
この時のlineの位置指定についての質問です。
|
|
2015/8/4(Tue) 23:29:17|NO.70479
一応補足ですが redraw ~ boxf ~ redraw という処理を絶対にしないといけない場合という設定で回答をお願いします。
|
|
2015/8/5(Wed) 00:03:49|NO.70480
1つ前の動作を記録したいということでしたら
こんな感じで出来ると思うのですが
質問の意図と違ってましたら申し訳ございません
screen 0,300,300 : title "メイン"
screen 1,300,300,,ginfo_wx1+305,ginfo_wy1-5 : title "サブ"
*mainloop
randomize
gsel 1
gcopy 0,0,0,300,300
gsel 0
stick key,256
if key = 256 : color rnd(255),rnd(255),rnd(255) : line x,y,mousex,mousey
x=mousex : y=mousey
wait 80
await 5 : goto *mainloop
|
|
2015/8/5(Wed) 01:06:47|NO.70482
必要なのは座標なのか
LINEが描かれた画像なのか・・・
画像としてだけ必要ならNO.70480に載せられてるので
これ↓は座標が必要な場合のスクリプト
repeat
stick key,256
redraw 0
color 255,255,255
boxf
color
pos 300,0
mes "line_max="+line_max
if (key & 256) {
if mlc=0 {//前回クリックされて無いなら
mlc=1 //クリック中フラグ
x(line_max)=mousex
y(line_max)=mousey
line_max++
}else{
if (x(line_max-1) ! mousex) or (y(line_max-1) ! mousey) {//前回と座標が違うなら
x(line_max)=mousex
y(line_max)=mousey
line_max++
}
}
}else{
mlc=0
}
pos 0,0
repeat line_max
line x.cnt,y.cnt
loop
redraw 1
await 16
loop
|
|
2015/8/5(Wed) 02:28:32|NO.70485
> redraw ~ boxf ~ redraw という処理を絶対にしないといけない場合
ということなのでこういうことでしょうか。
boxfは必要ないので使ってないですが。
buffer 1
gsel 0
onclick gosub *draw
stop
*draw
x=mousex
y=mousey
gsel 1
pos 0,0
gcopy 0,0,0,640,480
gsel 0
repeat
stick key,256
if (key&256)=0:break
redraw 0
pos 0,0
gcopy 1,0,0,640,480
line x,y,mousex,mousey
redraw 1
await 16
loop
return
|
|
2015/8/5(Wed) 10:41:50|NO.70494
さらにわからなくなってしまったようです。
例えば
celload 画像10枚読み込み
repeat
redraw 0
color 255,255,255:boxf:color
if(i==10){
i=0
}
celput i
redraw 1
i++
loop
このような画像を10枚読み込んで10枚を毎回連続してパラパラ漫画のように更新することで動画のように見せる処理を入れたとします。
(もしくは
repeat
redraw 0:color 255,255,255:boxf:color:pos mousex,mousey:mes "◇◇":redraw 1
await
loop
こんなのとか)
そして、動いている画像の上にマウスで NO.70474と同じことができないかということです。
|
|
2015/8/5(Wed) 10:44:14|NO.70495
>> redraw ~ boxf ~ redraw という処理を絶対にしないといけない場合
これの意味は単純に疑問に思っただけなので redraw ~ boxf ~ redraw という処理無しでの方法は今回はお断りです。ということ
|
|
2015/8/5(Wed) 21:02:27|NO.70511
既に目的は果たせてると思うんだけど?
dirlist flist,dir_exe+"\\hsptv\\*.jpg",1
if stat<=0 {end}
notesel flist
repeat notemax
noteget fname,cnt
celload dir_exe+"\\hsptv\\"+fname
gid(cnt)=stat
loop
repeat
stick key,256
redraw 0
pos 0,0
celput gid((cnt/60)\notemax)
color 255
pos 300,0
mes "line_max="+line_max
if (key & 256) {
if mlc=0 {//前回クリックされて無いなら
mlc=1 //クリック中フラグ
x(line_max)=mousex
y(line_max)=mousey
line_max++
}else{
if (x(line_max-1) ! mousex) or (y(line_max-1) ! mousey) {//前回と座標が違うなら
x(line_max)=mousex
y(line_max)=mousey
line_max++
}
}
}else{
mlc=0
}
pos 0,0
repeat line_max
line x.cnt,y.cnt
loop
redraw 1
await 16
loop
NO.70480の方法でも同様の事は出来る
透過色を決めて処理する必要があるが・・・
|
|
2015/8/5(Wed) 21:38:30|NO.70512
うぅ〜ん。コードをちゃんと読んで理解していますか?
ちゃんと理解していれば可憐さんと暇人さんのプログラムで目的は達せられていると思うのですが・・・
|
|