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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0429
可憐短径のドラッグ&ドロップで短径位置の変更3解決


可憐

リンク

2015/4/29(Wed) 00:36:48|NO.68867

ExtFloodFillで塗潰したものをドラッグ&ドロップで移動できるようにしたいです。
以下のソースを簡潔なのですが組んでみました。
塗潰したものを移動する際、移動の軌道??みたいなものも描画したいです。
なのですが、知恵を絞り切ってもいい案が出てこないので
誰か力をお貸しください。。よろしくお願いします。



#module #deffunc floodfill int startX, int startY, int noredraw #uselib "gdi32.dll" #cfunc CreateSolidBrush "CreateSolidBrush" int #func SelectObject "SelectObject" int,int #func ExtFloodFill "ExtFloodFill" int,int,int,int,int #func DeleteObject "DeleteObject" int #define ctype RGB(%1,%2,%3) ((%1)|(%2<<8)|(%3<<16)) nc = ginfo_r,ginfo_g,ginfo_b pget startX,startY : tc = RGB(ginfo_r,ginfo_g,ginfo_b) hBrush = CreateSolidBrush( RGB(nc.0,nc.1,nc.2 ) ) SelectObject hdc,hBrush : oldbrs = stat ExtFloodFill hdc, startX, startY, tc, 1 SelectObject hdc,oldbrs : DeleteObject hBrsuh color nc.0,nc.1,nc.2 : if (noredraw=0){redraw} : return #global screen 0,600,250 ;縦線横線を描画 color 0,0,0 y=30 repeat 6 line 50,y,530,y y+35 loop x=50 repeat 17 line x,30,x,205 x+30 loop onclick*塗潰し randomize stop *塗潰し if wparam = 2 { ;右クリックで塗りつぶし ;縦線横線は塗潰さないようにする pget mousex,mousey if ginfo_r = 0 : stop color rnd(4)*64+63,rnd(4)*64+63,rnd(4)*64+63 floodfill mousex,mousey ;マウス座標塗りつぶし } if wparam = 1 { ;左クリックドラッグドロップの処理・・・・ } stop



この記事に返信する


スペース(HSP歴3年)

リンク

2015/4/29(Wed) 02:43:42|NO.68868


コマ数 = 100;コマ数(フレーム数) a地点x=100.0 a地点y=150.0 b地点x=256.0 b地点y=100.0 pos a地点x,a地点y:mes "A" pos b地点x,b地点y:mes "B" x移動量= (a地点x-b地点x)/100.0;1コマ当たりの移動量を計算 y移動量= (a地点y-b地点y)/100.0;1コマ当たりの移動量を計算 repeat コマ数 ct=double(cnt) pos a地点x-(x移動量*ct),a地点y-(y移動量*ct):mes "●" await 10 loop
流れとしては、「a地点xからb地点xを引いた数」をコマ数(このプログラムは100)で割り、
1コマ毎の移動量を算出します。同じようにy軸分の移動量も計算した後、
それをただ加算していくだけです。

整数値だと小数点を計算出来ないため、実数で全て計算しています。
ct=double(cnt)

はその為です。



ht_ask

リンク

2015/4/29(Wed) 03:55:53|NO.68869

移動だけのスクリプトを大げさに書きました。
無駄も多いですが読みやすい方がいいと思って。

#const BOX_MAX 84 gosub *init gosub *main end *init randomize dim box_x, BOX_MAX dim box_y, BOX_MAX dim box_w, BOX_MAX dim box_h, BOX_MAX dim box_r, BOX_MAX dim box_g, BOX_MAX dim box_b, BOX_MAX x = 15 : y = 15 : mrgn = 1 repeat BOX_MAX box_x(cnt) = x box_y(cnt) = y box_w(cnt) = 50 box_h(cnt) = 50 box_r(cnt) = rnd(256) box_g(cnt) = rnd(256) box_b(cnt) = rnd(256) x += box_w(cnt) + mrgn if (cnt \ 12) = 11 { ; 適当に改行 x = box_x(0) y += box_h(cnt) + mrgn } loop screen 0 buffer 1, 640, 480 gosub *redraw_boxes return *redraw_boxes gsel 1 repeat BOX_MAX x = box_x(cnt) : y = box_y(cnt) color box_r(cnt), box_g(cnt), box_b(cnt) boxf x, y, x + box_w(cnt), y + box_h(cnt) loop gsel 0 return *main repeat lb_prev = lb getkey lb, 1 gosub *get_box_by_mouse hover_boxid = boxid ; 今マウス上にある矩形のidが入っている if lb = 1 & lb_prev = 0 { drag_boxid = hover_boxid if drag_boxid ! -1 : draging = 1 title "from:" + drag_boxid } if lb = 0 & lb_prev = 1 { if drag_boxid ! -1 { temp_r = box_r(drag_boxid) temp_g = box_g(drag_boxid) temp_b = box_b(drag_boxid) box_r(drag_boxid) = box_r(hover_boxid) box_g(drag_boxid) = box_g(hover_boxid) box_b(drag_boxid) = box_b(hover_boxid) box_r(hover_boxid) = temp_r box_g(hover_boxid) = temp_g box_b(hover_boxid) = temp_b gosub *redraw_boxes draging = 0 title "to:" + hover_boxid } } redraw 0 pos 0, 0 gmode gmode_gdi gcopy 1, 0, 0, ginfo_winx, ginfo_winy if draging = 1 { x = box_x(drag_boxid) : y = box_y(drag_boxid) w = box_w(drag_boxid) : h = box_h(drag_boxid) pos mousex, mousey gmode gmode_alpha, , , 200 gcopy 1, x, y, w, h } redraw 1 await 40 loop return *get_box_by_mouse boxid = -1 repeat BOX_MAX mx = mousex : my = mousey x1 = box_x(cnt) : x2 = x1 + box_w(cnt) y1 = box_y(cnt) : y2 = y1 + box_h(cnt) if mx >= x1 & mx <= x2 & my >= y1 & my <= y2 { boxid = cnt break } loop return



可憐

リンク

2015/5/1(Fri) 00:21:48|NO.68922

ありがとうございます。
色判定で自分で考えたやり方で全部一から作ってできました。



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