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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0407
GOTOU何もしないを命令するには4解決


GOTOU

リンク

2008/4/7(Mon) 22:12:34|NO.14960

下記のスクリプトで、
左円の範囲をクリックした時は、respに1を、
右円の範囲をクリックした時は、respに0を代入し、
それ以外(空白)をクリックした時は、
respに値を入れないようにしたいのですが、
上手く行きません。
elseの使い方が誤っているのでしょうか・・・

respに値を代入しているところに、
dialogを入れて見ると、範囲外の時はdialogを表示しないのですが、
respはクリックした数だけ何らかの値が入ってしまいます。


screen scrExp, ginfo_dispx, ginfo_dispy, 4, 0, 0 notesel data num = 6 sdim resp,num data ="" endloop = 0 scrWidth = ginfo_dispx scrHeight = ginfo_dispy poscircleX = (scrWidth / 2 - 100) poscircleY = scrHeight * 6 / 10 size=100;円の大きさ xleft=poscircleX-250;left yleft=poscircleY-200 xright=poscircleX+350;right yright=poscircleY-200 color 255,150,150 circle xright,yright,xright+size,yright+size;right circle xleft,yleft,xleft+size,yleft+size;left while endloop = 0 repeat await 1 stick in,0,1 if in &256{ break } loop await 1 posX=mousex posY=mousey if (posX > xleft and posX <= (xleft+size)) and (posY >= yleft and posY <= (yleft+size)){ resp = "1" ; dialog "L" }else{ if (posX > xright and posX <= (xright+size)) and (posY >= yright and posY <= (yright+size)){ resp = "0" ; dialog "R" }else{ } } data += resp onexit gosub *exi wend *exi notesel data notesave "data.txt" end



この記事に返信する


SYAM

リンク

2008/4/7(Mon) 22:33:38|NO.14961

ループの最初に戻っても、respはrespです。
内容を忘れたりしません。



GOTOU

リンク

2008/4/7(Mon) 23:12:29|NO.14967

SYAM様

 的確なご指摘有り難うございます。
 確かに、最初に空白をクリックした場合は、
 respには何も代入されず、
 例えば、左をクリックして1が代入された後には、
 respに1が代入されていました。


}else{ resp = "" }

 と代入しておけば、respには何も代入しない(空白を代入)、
 という命令になりますでしょうか。
 (出力したdataには、この空白は反映されません)



naznyark

リンク

2008/4/8(Tue) 03:13:39|NO.14973

> respには何も代入しない(空白を代入)、という命令になりますでしょうか。

流れから言いたいことは想像がつくので『なります』と答えておきます。

が、上記の文は言葉の使い方がおかしいのでこの文だけでは
言いたいことが他人に正しく伝わりません。


> respには何も代入しない(空白を代入)

『何も代入しない』ということは resp = xxx という処理が
『行なわれない』ことを言います。
resp = xxx という処理が行なわれる以上は代入する値が何であれ
『何かが代入される』ことになります。
(『xxx を代入』のほうが適切です。ただし下記参照。)

> 空白

この場合はヌル文字列・空文字列といったような単語でなければなりません。
空白というのは半角スペースとタブ文字、全角スペースなどの
画面には表示されなくても確実に存在する文字のことをいいます。

> という命令

プログラムで『命令』といった場合は『命令語』を意味する場合が
多いのでこの場合は『処理』が適切でしょう。



GOTOU

リンク

2008/4/8(Tue) 21:08:34|NO.15001

naznyark 様

分かりやすい説明を頂き、有難うございます。
respに代入する処理もさることながら、
repeat〜loopの範囲と、breakの場所が原因でした。

説明の仕方に慣れず、分かりにくい説明で申し訳ございません。
下記のように書き直したところ、無事に解決出来ました。


;前略 while endloop = 0 repeat resp = "" await 1 stick in,0,1 if in &256{ await 1 posX=mousex posY=mousey if (posX > xleft and posX <= (xleft+size)) and (posY >= yleft and posY <= (yleft+size)) or (posX > xright and posX <= (xright+size)) and (posY >= yright and posY <= (yright+size)){ break } } loop if (posX > xleft and posX <= (xleft+size)) and (posY >= yleft and posY <= (yleft+size)){ resp = "1" } if (posX > xright and posX <= (xright+size)) and (posY >= yright and posY <= (yright+size)){ resp = "0" } data += resp onexit gosub *exi wend *exi notesel data notesave "data.txt" end



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