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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0817
bマウスで押した場所から動かす8解決


b

リンク

2015/8/17(Mon) 15:42:34|NO.70832


buffer 1,50,50 boxf 0,0,50,50 gsel 0,1 repeat getkey winclick,1 color 255,255,255:boxf if(winclick==1){ mx=mousex my=mousey } pos mx,my //←ココがよくわからない celput 1 redraw 1 await 15 redraw 0 await loop

このスクリプトを実行させるとマウスで四角形の真ん中をクリックしても動かすときに四角形の端になってしまます。
どのように改善すれば良いのでしょうか



この記事に返信する


(´ω`)

リンク

2015/8/17(Mon) 15:57:26|NO.70834

pos コマンドは、描画の起点を指定するコマンドです。
pos mx, my とは、座標(mx,my)から描画を始めなさい、という意味になります。
celput コマンドは、現在の描画起点にバッファの画像をコピーします。

つまり、座標(mx,my)を起点で、黒い■をコピーしてきている。
マウスが■の中央にくるようにしたいなら、起点をずらす必要があります。

pos mx, my をええ感じに書き換えてみてください。(´ω`)



b

リンク

2015/8/17(Mon) 16:32:39|NO.70835

(´ω`)さんありがとうございます。
>pos mx, my をええ感じに書き換えてみてください。(´ω`)
このええ感じというところがわからないんですよ,..



pumpkin

リンク

2015/8/17(Mon) 16:34:31|NO.70836

pos命令で場所を指定して■を描画してるようですが
pos命令が指定するのは■の真ん中ではなく、■の左上にあたるので、少し場所指定の数字をいじる必要があります。


buffer 1,50,50 boxf 0,0,50,50 gsel 0,1 repeat getkey winclick,1 color 255,255,255:boxf if(winclick==1){ mx=mousex-22 //-22で描画の起点になる場所をマウスの位置からずらす my=mousey-22 } pos mx,my //←ココがよくわからない celput 1 redraw 1 await 15 redraw 0 await loop

こんなんでどうでしょうか?
けっこう雑にやったのでピッタリ真ん中ではないと思いますので、その辺はお好みで数字をいじってください。



motchy

リンク

2015/8/17(Mon) 16:45:13|NO.70837

いまいち何がやりたいのか分からない中で超絶意図汲み取りすると


#define sxSqr 50 //長方形の横サイズ #define sySqr 50 //〃縦 buffer 1,sxSqr,sySqr boxf 0,0,sxSqr,sySqr gsel 0,1 xsqr = 0 : ysqr = 0 //長方形の左上座標 flg_drg = 0 //ドラッグ中フラグ。(0,1) = (ドラッグ中,でない) /* 未初期化変数警告回避 */ winclick = 0 xmofst = 0 : ymofst = 0 key = 0 repeat stick key //getkey より先に実行しておくのがミソ。HDL読んで、順番入れ替えてみれば意味が分かる。 getkey winclick,1 if winclick { if flg_drg { //ドラッグ継続なら xsqr = mousex+xmofst : ysqr = mousey+ymofst //長方形の位置情報を更新 } else { //ドラッグ中でないなら if (xsqr <= mousex)&(mousex <= xsqr+sxSqr)&(ysqr <= mousey)&(mousey <= ysqr+sySqr) { //マウスカーソルが長方形に乗っているなら if key&256 { //今まさにマウス左ボタンが押し下げられたのなら (※気になるなら試しにこれを外してみればいい。きっと意味が分かる。) xmofst = xsqr-mousex : ymofst = ysqr-mousey //マウスカーソルに対する長方形の相対座標。オフセット。 flg_drg = 1 //ドラッグ開始 } } } } else { flg_drg = 0 //ドラッグ解除 } redraw 0 color 255,255,255 : boxf pos xsqr,ysqr : celput 1 redraw 1 await 15 loop

要するに「カーソルとの相対座標覚えとけや〜」ということで、極めて簡単。



スペース

リンク

2015/8/17(Mon) 16:50:42|NO.70838

もしかしてこういうことをやりたいのかな・・・

buffer 1,50,50 boxf 0,0,50,50 gsel 0,1 repeat getkey winclick,1 redraw 0 color 255,255,255:boxf if(winclickBac=0 & winclick=1){ 補正x=mousex-mx //-22で描画の起点になる場所をマウスの位置からずらす 補正y=mousey-my } if winclickBac=1 & winclick=1:mx=mousex-補正x:my=mousey-補正y pos mx,my //←ココがよくわからない celput 1 redraw 1 title "補正x:"+補正x+" 補正y:"+補正y+" mx:"+mx+" my:"+my+"" winclickBac=winclick await 15 loop



スペース

リンク

2015/8/17(Mon) 16:51:41|NO.70839

あ、motchyさんと被ったし一部コメントを変え忘れた・・・



b

リンク

2015/8/17(Mon) 17:01:04|NO.70840

 ありがとうござます
motchy
とスペースさんのコードを参考にさせてもらいます。



b

リンク

2015/8/17(Mon) 18:35:16|NO.70845

解決ms



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