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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0406
Rookifとmouseについて11解決


Rook

リンク

2011/4/6(Wed) 18:39:12|NO.38176

ほとんど空けずの質問ですみません

マウスがある位置に移動した時にある場所に
メッセージを表示するプログラムを作っていて

repeat
if mousex>540&mousex<640&mousey>40&mousey<90:pos 10,300:mes "aa"
loop

こうしたところ、実行すると重すぎる(?)のかフリーズします。
原因と解決方法が分かる人がいれば宜しくお願いします。



この記事に返信する


Cookies

リンク

2011/4/6(Wed) 18:43:14|NO.38177

ループのし続けだと、CPUが独占され、他プロセスがCPUを使えづらくなります。
repeatとloopの間の必ず実行されるところにwaitを入れましょう。



Cookies

リンク

2011/4/6(Wed) 18:44:24|NO.38178

連レスすいません。
要は、
repeat
if mousex>540&mousex<640&mousey>40&mousey<90:pos 10,300:mes "aa" wait 10 loop
にしましょう。ということです。



字がキタナイ

リンク

2011/4/6(Wed) 18:45:05|NO.38179

repeat
loop

のなかに、waitがないから。



Rook

リンク

2011/4/6(Wed) 18:55:28|NO.38181

フリーズはしなくなったんですが…
  
pre
pos 540,40:objsize 100,50
button gosub "AA",*kaiten
repeat
if mousex>540&mousex<640&mousey>40&mousey<90:mes "aa"
wait 10
loop
/pre

上の時、ボタンにマウスを持っていっても表示されません。
どうしてですか?



ひらまる

リンク

2011/4/6(Wed) 19:22:04|NO.38183

予想ですが、オブジェクトの上ではmousexとmouseyは取得できないのではないでしょうか?
理由はまぁ、詳しくはわかりませんが多分違うウィンドウの上だからとかそんな感じだと思います。
ウィンドウの外の座標も取得できないので。

mousexとmouseyは直感的ですが、こういった不便なところが多いです。
マウスの座標を取得するなら、以下の方法をお勧めします。

pos 540,40:objsize 100,50 button gosub "AA",*kaiten WinFrameX = ( ginfo_sizex - ginfo_sx ) / 2 ;※ウィンドウの左フレームサイズ WinFrameY = ginfo_sizey - ginfo_sy - WinFrameX ;※ウィンドウの上フレームサイズ repeat WinMouseX = ginfo_mx - ginfo_wx1 - WinFrameX ;※マウスのX座標 WinMouseY = ginfo_my - ginfo_wy1 - WinFrameY ;※マウスのY座標 title "MouseX=" + WinMouseX + "MouseY=" + WinMouseY ;※マウスの座標をタイトルバーに表示 if WinMouseX>540&WinMouseX<640&WinMouseY>40&WinMouseY<90 :mes "aa" wait 10 loop *kaiten ;※ return ;※
※のある行が追加した行です。



Rook

リンク

2011/4/6(Wed) 20:11:54|NO.38185

ありがとうございました。
その場所から離れたとき、その表示されたaaだけを消去する方法はありますか?



Cookies

リンク

2011/4/6(Wed) 21:35:51|NO.38189

boxfで塗りつぶすか、おんなじ文字(aa)を白文字で書くかくらいしか僕にはわかりません。



info

リンク

2011/4/6(Wed) 21:35:57|NO.38190

ケースバイケースで と言いたいところですが
参考にしていただければありがたいです。


#include "user32.as" #enum IDWND_MAIN = 0 // メイン #enum IDWND_BKBASE // バックグラウンドベース #const wx 640 #const wy 480 // 背景用のウィンドウ bgscr IDWND_BKBASE , wx,wy gradf ,,,,0,0xFF7A00,0x7A7AFF rc = 100,100,200,200 color boxf rc ,rc.1,rc.2,rc.3 color 255,255,255 boxf rc +1,rc.1 +1,rc.2 -1,rc.3 -1 pos rc+1 , rc.1 +1 color mes " マウスポイ\nンタ乗せて下\nさい" // メインウィンドウ screen IDWND_MAIN , wx, wy title "メインウィンドウ" pos 0,0:gcopy IDWND_BKBASE,0,0,wx,wy *@ // ディスブレイの座標から // マウス座標に変換 // それが、判定する四角形の中に入っているか? pt = ginfo_mx , ginfo_my ScreenToClient hwnd,varptr(pt) PtInRect varptr(rc) , pt , pt.1 IsInRect = stat if (IsInRect) { // もし入っている場合 if (flg_viewthankyou ==0) { color pos pt , pt.1 mes "ありがとう!!" flg_viewthankyou=1 vtypos = pt , pt.1 , ginfo_mesx , ginfo_mesy } }else{ // 入っていない場合 if (flg_viewthankyou) { pos vtypos,vtypos.1 gcopy IDWND_BKBASE , vtypos,vtypos.1 , vtypos.2,vtypos.3 flg_viewthankyou=0 } } wait 10 goto*@b



Rook

リンク

2011/4/7(Thu) 20:33:26|NO.38212

boxfを使おうと思い
pre
repeat
if WinMouseX>700&WinMouseX<800&WinMouseY>40&WinMouseY<90 :pos 700,290:mes "aa"
if (WinMouseX<700)or(WinMouseX>800)or(WinMouseY<40)or(WinMouseY>90):color 250,250,250:boxf 700,290,800,340
wait 10
loop
/pre
としたのですが、今度は、aaが表示されなくなりました。



GENKI

リンク

2011/4/7(Thu) 21:45:47|NO.38227

mesで描かれる文字の色は何になっていると思いますか?
スクリプトを何ループか追いかけてみてください。


ところで、スクリプトの色が変わらないのはpreタグの使い方が間違っているからです。
「pre」は「<」と「>」で囲んでください。
また「/pre」も同様に「<」と「>」で囲んでください。
詳しくはこの掲示板の「使い方」を読んで下さい。



Rook

リンク

2011/4/8(Fri) 16:43:40|NO.38240

ありがとうございました。



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