|
|
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
これはもう、仕方のないことなんでしょうか。
できるできないでもかまいませんのでご教授下さい。
|
|
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
|
|
2006/7/17(Mon) 18:52:44|NO.1387
APIを使えば太さを変えれた気がしますが・・・
どうなんでしょう?
|
|
2006/7/17(Mon) 19:03:54|NO.1388
おぉ。解凍が早い。
即座な対応に感謝します!
ミツエモン さん
ありがとうございます! buffer からコピーする方法ですね?
osakana さん
ありがとうございます! 正しく動作いたしました!
大ヒントでした。今後も宜しくお願いします!
(_ _)
|
|
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
|
|