アプリ版:「スタンプのみでお礼する」機能のリリースについて

マウスの左クリック判定があいまいに判定されます。
原因が不明なので教えて下さい。(初心者なので。。)

/* 初期化 */
screen 0,600,400
cls 4
/* MAIN */
*main
xx = mousex : yy = mousey

if (xx < 0):xx = 0
if (xx > 600):xx = 600
if (yy < 0):yy = 0
if (yy > 400):yy = 400

if (cc1 == 0){// cc1 カラー設定のフラグ
cc2++// cc2 カラー設定
if (cc2>254){
cc1=1
}
}
if (cc1 == 1){
cc2--
if (cc2==0){
cc1=0
}
}
getkey k1,2// 右クリック
getkey k2,1// 左クリック

wait 1

if ( k1 == 1){// 右クリック判定
cls 4
}
if ( k2 == 1){// 左クリック判定
flg = flg^0x01// ビット反転
}
if ((xx != xx2)||(yy != yy2)){// マウス移動確認
xx2 = xx
yy2 = yy
pos 0,0
color 0,0,0
boxf 0,0,110,20
color 255,255,255

print "xx="+xx+":yy="+yy // マウス位置情報
if (flg == 0):goto *move // 描画ルーチン
}
goto *main

*move
color cc2,cc2,cc2
line xx,yy,xx,yy+10// 四角を描画
line xx,yy,xx+10,yy
line xx+10,yy,xx+10,yy+10
line xx,yy+10,xx+10,yy+10
goto *main

A 回答 (2件)

あいまいに判定というのがいまひとつわからないですが、多分問題ないのではないかと思います。


処理が飛び飛びになるということだったら
コンピュータは無限のスピードを持っているわけでないので、処理にはある程度時間がかかります。その時間の経過するウチにマウスが動いてしまいます。
また、マウスの発するイベント(座標を返す)も無限に短い時間で起こっているわけではありません。(マウスの解像度ともいいます。どれだけの距離を動いたことを感知するか)
勘違いしたコメントだったらすみません。

この回答への補足

早速のお返事ありがとうございます。(^-^)ゞ

マウスを画面上で動かすと"□"の軌跡を表示するプログラムです。

右クリックした際は画面をクリアする処理です。
こちらは問題なく即座に反応します。
左クリックした際は"□"の軌跡を停止・開始させたいのですが開始したり停止したりして不安定なものになっています。

問題文章がわかりにくくてすいませんでした。m(。-_-。)m
できればコメント下されればありがたいです。
よろしくお願いします。(^人^)、オネガイッ!

補足日時:2005/02/16 18:14
    • good
    • 0

>開始したり停止したりして不安定なものになっています。


なるほど、それは、getkeyのタイミングに依るものだと思います。(実際には、HSPの作成者に聞いてみないとわかりませんが)
「左マウスがクリックされた」というのをどのタイミングで見つけているのか
2つ考えられると思います。
1)今まさにボタンが押されている状態である。
2)ボタンは押されて次の瞬間指は離されていて、現在はクリックされていない。
2の状態でプログラムにクリックされたということが伝わるなら問題ないですが、
1の様な場合、もう既に処理が終わっている(動作を切り替えている)のにまだ(ゆっくりクリックしていて)マウスが押されていて、次の処理(また切り替える、実質戻ってしまう)が行われてしまう。
のかもしれません。
多分、この1の場合なのでしょうね。
動作を確実なものにするためには、一端マウスがクリックされた(getkeyが1を返した)という状態からgetkeyがいったん0になるまで処理を再びしないようにするということが必要だと思います。

この回答への補足

またまた、ありがとうございました。(☆o☆)キラ~ン

*main
getkey k1,2
if (k1 == 1):print "OK"
wait 1
goto *main
stop

1回のクリックで6回もOKが表示されました。
・・・どうしよう┐(´~`)┌
もう少し考えてみます。
尚、もう少しこの問題を掲載しときます。謝謝

補足日時:2005/02/16 20:17
    • good
    • 0
この回答へのお礼

ヒントを貰い解決しました。
ありがとうございます。

*main
getkey k1,2
if (k1 == 1):print "OK"
wait 1
^^^^^^^^
(ここを wait 15に変更する)
goto *main
stop
ことでクリック判定が反復することがなくなりました。
もっと良い方法があるとは思いますがwait処理を入れる方法でいきたいと思います。

お礼日時:2005/02/17 01:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!