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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1002
あああああマウスでボタンを選択する4解決


あああああ

リンク

2010/10/2(Sat) 20:56:30|NO.35218

マススカーソルを、hspのウインドウ上にあるイラストに乗せるとカチという効果音が鳴り、
そのイラストの回りを四角で囲んで、カーソルを下ろすと、その四角が消えるというスクリプト
を作ってみたのですが、そのイラストよりカーソルが上に行くと四角が消えず、下に行くと消えます。
上に行っても、消えないようにするのはどうすればいいでしょうか?左右はどちらも消えません。
説明へたですいません。宜しくお願いします。

*a
if mousex>56:if mousex<331:if mousey>318:if mousey<358:pos 43,295 :gmode 2:gcopy 3,0,0,310,100 :else :pos 31,302 :gmode 0:gcopy 4,0,0,400,400
if mousex<56:if mousex>331:if mousey<318:if mousey>358:cls:pos 31,302 :gmode 0:gcopy 4,0,0,400,400



この記事に返信する


くうき

リンク

2010/10/2(Sat) 22:54:49|NO.35222

あのすみません
答えを返すわけじゃないんですが
言っていることが矛盾していませんか
>上に行くと四角が消えず
>上に行っても、消えないようにするのはどうすればいいでしょうか
上にカーソルが行っても消えないようにしたいんですよね
状況からそれであっているのでは?
スクリプトはまだきちんと見れていないのですが
どうも見る限りほかにウインドウID
に画像か何かを読み込んでそれをコピーしてきているのですか?
私的にはもう少しスクリプトの前後を載せてほしいのですが
あと回答にはなりませんが
スクリプトは<pre>~</pre>で囲むといいですよ<>実際は半角で
それとスクリプトのif文はこうするとすっきりするんじゃないかな
個人差はありますが

if mousex>56 and mousex<331{ if mousey>318 and mousey<358{ pos 43,295 gmode 2 gcopy 3,0,0,310,100 }else{ pos 31,302 gmode 0 gcopy 4,0,0,400,400 } } if mousex<56 and mousex>331{ if mousey<318 and mousey>358{ cls pos 31,302 gmode 0 gcopy 4,0,0,400,400 } }
わたしはこの書き方がすきなのですが
長いif文になるとコロンでは見にくくなってしまいますし



あああああ

リンク

2010/10/2(Sat) 23:23:32|NO.35223

すいません、間違ってました。正確には、
{上に行ったら消えるようにするのはどうすればいいでしょうか}です。


buffer 3:picload "sikaku.bmp":buffer 4:picload "icon.bmp"
goto *a
if mousex>56 and mousex<331{
if mousey>318 and mousey<358{
pos 43,295
gmode 2
gcopy 3,0,0,310,100
}else{
pos 31,302
gmode 0
gcopy 4,0,0,400,400
}
}

if mousex<56 and mousex>331{
if mousey<318 and mousey>358{
cls
pos 31,302
gmode 0
gcopy 4,0,0,400} }

await 10
goto *a

アイコンにカーソルを載せると、sikaku.bmpが表示され、はずすと、上からicon.bmpが上書きされるというスクリプトです。

たしかにif文を{にするといいですね。アドバイスありがとうございます。



くうき

リンク

2010/10/3(Sun) 01:26:12|NO.35224

今回のでは上はきちんと消えますが?
私のミスでしょうか
でもまぁ一応解決策は見つけましたので
全部に目を通してみてやっとわかりました(遅いよ俺(;;)
てことで解説なのですが

右左で消えない理由 xに10 yに350 と仮定                  if mousex>56 and mousex<331{     x が 10 だとここの処理はスキップされる if mousey>318 and mousey<358{            pos 43,295 gmode 2 gcopy 3,0,0,310,100 }else{               pos 31,302               gmode 0              gcopy 4,0,0,400,400               }            }                                                        if mousex<56 and mousex>331{  x が 10 で56以下なので下の処理へ                            if mousey<318 and mousey>358{  y が 350 で318以下ではないのでここの処理はスキップ cls         pos 31,302     gmode 0                   gcopy 4,0,0,400,400             }                        }                          結局何もしないままループ         ↓
これだと
もしマウスが xに10 yに350 あったとしますよね
最初のif判定でxは56以下で合っていないとみなされスキップされます
下のほうのif文は一見あっているように見えますが
今度はxは56以下で下の処理が実行されるんですが
yが318以上でスキップされてしまします
すると何の処理もしないまま一通り終わってしまい状況は変わらないのです
これを解決するには4つのifを1つにまとめて判定するというものです
1つでも条件に合っていなければその下の処理がスキップされelse命令が実行されるようにすればいいわけです

//一応画像を再現 //screen命令で一応可視にしておいた //baffer picload の組み合わせもいいが celload celput の組み合わせだと楽 screen 3 color 0,255,0 boxf 0,0,310,100 color 0,0,0 boxf 5,5,305,95 screen 4 color 0,0,255 boxf 0,0,400,400 gsel 0 //===========以下が問題のスクリプト *a      //repeat〜loopでも可 redraw 0   // ここから下の描画命令gcoppyなどは裏面(仮想的に描画される) if mousex>56 and mousex<331 and mousey>318 and mousey<358{ //4つの条件がすべて合っていないと偽の判定になる pos 43,295 gmode 2 gcopy 3,0,0,310,100 }else{                           //マウスが指定より外だった場合 color 255,255,255 boxf                           //clsは画面の初期化命令なのでboxfのほうが負荷が少ない pos 31,302 gmode 0 gcopy 4,0,0,400,400 } redraw 1 //さっきまで裏面(仮想的に描画していたもの)を表(自分たちが見ているウインドウ内)に描画 await 10 goto *a
説明が私も下手なので
すみません
//===========以下が問題のスクリプト
から下を使えば何ら問題なく使えます



あああああ

リンク

2010/10/3(Sun) 10:05:24|NO.35226

できました!親切にスクリプトまで書いていただき、ありがとうございます。



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