|
|
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 をええ感じに書き換えてみてください。(´ω`)
|
|
2015/8/17(Mon) 16:32:39|NO.70835
(´ω`)さんありがとうございます。
>pos mx, my をええ感じに書き換えてみてください。(´ω`)
このええ感じというところがわからないんですよ,..
|
|
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
こんなんでどうでしょうか?
けっこう雑にやったのでピッタリ真ん中ではないと思いますので、その辺はお好みで数字をいじってください。
|
|
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さんと被ったし一部コメントを変え忘れた・・・
|
|
2015/8/17(Mon) 17:01:04|NO.70840
ありがとうござます
motchy
とスペースさんのコードを参考にさせてもらいます。
|
|
2015/8/17(Mon) 18:35:16|NO.70845
解決ms
|
|