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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0717
foodpiaペイント風に書いてみるには5解決


foodpia

リンク

2006/7/17(Mon) 18:23:57|NO.1382

ペイントの用にクリックしたらその部分を
黒で描くというプログラムを組んでいたのですが
処理速度の関係でしょうか?マウスを素早く移動させると正しく描画されません。
ペイントならばマウスを素早く移動させても問題ないのですが…


*mlp wait 1 getkey clk,1 if clk = 1{ color 0,0,0 circle mousex-10,mousey-10,mousex+10,mousey+10 } else { color 255,255,255 boxf } goto *mlp

いろいろ考えて以下のようにもして見ましたがダメでした。


dim drawx,1024*1024 dim drawy,1024*1024 *mlp wait 1 getkey clk,1 if clk = 1{ drawx(c) = mousex-10 drawy(c) = mousey-10 color 0,0,0 circle mousex-10,mousey-10,mousex+10,mousey+10 c + 1 } else { repeat c color 0,0,0 circle drawx(cnt),drawy(cnt),drawx(cnt)+20,drawy(cnt)+20 loop c = 0 } goto *mlp

これはもう、仕方のないことなんでしょうか。
できるできないでもかまいませんのでご教授下さい。



この記事に返信する


osakana

リンク

2006/7/17(Mon) 18:44:57|NO.1385

ヒントです。

*mlp wait 1 getkey clk,1 if clk = 1{ color 0,0,0 line mx,my,mousex,mousey } else { color 255,255,255 boxf } mx=mousex my=mousey goto *mlp

好きな太さに変えるには少し工夫が必要ですが
原理が分かればいつか出来ると思いますよ



ミツエモン

リンク

2006/7/17(Mon) 18:45:18|NO.1386

こんなのはどうでしょうか?
drawx,drawy変数をどこかで利用する場合は、この方法は意味ないですが・・
(pget,psetも有効ですし)


screen 0,640,480 : title "ペイント" buffer 2 *mlp mx = mousex : my = mousey stick Key,256,1 : if (Key != 0) { if (Key & 256) { gsel 2 color 0,0,0 : circle mx,my,(mx+20),(my+20) } } gsel 0 redraw 0 color 255,255,255 : boxf gmode 0,ginfo(12),ginfo(13) : pos 0,0 : gcopy 2,0,0,ginfo(12),ginfo(13) redraw 1 // await 0 goto *mlp



osakana

リンク

2006/7/17(Mon) 18:52:44|NO.1387

APIを使えば太さを変えれた気がしますが・・・
どうなんでしょう?



foodpia

リンク

2006/7/17(Mon) 19:03:54|NO.1388

おぉ。解凍が早い。
即座な対応に感謝します!

ミツエモン さん
ありがとうございます! buffer からコピーする方法ですね?

osakana さん
ありがとうございます! 正しく動作いたしました!

大ヒントでした。今後も宜しくお願いします!
(_ _)



GENKI

リンク

2006/7/17(Mon) 22:50:17|NO.1392

> APIを使えば太さを変えれた気がしますが・・・

変えられます。
気まぐれに書いてみました。HSP3のモジュールにAPI使うときって
こんな書き方でいいんでしょうか。よく分かりません…ふなれなもので。

参考資料:http://hspwiki.nm.land.to/?Paint%2Fline

#module #deffunc b_line int lnex0,int lney0,int lnex1,int lney1,int lsize ;b_line ラインの終点X,Y座標, ラインの始点X,Y座標, ラインの太さ #uselib "gdi32.dll" #func CreatePen "CreatePen" int, int, int #func SelectObject "SelectObject" int,int #func Polyline "Polyline" int, var, int #func DeleteObject "DeleteObject" int #define ctype RGB(%1,%2,%3) ((%3*65536)+(%2*256)+%1) ;ペン形状設定 CreatePen 0, lsize, RGB(0,0,0) hPen = stat : if stat=0 : dialog "ペン設定に失敗しました" : return 1 ;ライン描画 dim point,4 point = lnex0, lney0, lnex1, lney1 SelectObject hdc, hPen hOldPen = stat Polyline hdc, point, 2 if stat = 0 : dialog "描画に失敗しました" : return 1 DeleteObject hPen SelectObject hdc, hOldPen redraw 1 return 0 #global b_line 0,0,ginfo_winx,ginfo_winy, 3 stop



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