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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0224
プレ卒つらいキーを取得してメモ帳に保存する5解決


プレ卒つらい

リンク

2015/2/24(Tue) 23:11:03|NO.67509

心理学実験のためのプログラムを作成しています。
画像を提示→2択の質問→キーを取得→キーを保存という流れです。
一応動くことは動くのですがキーをおしていても
00000となってしまい正しくキーが取得できません
キーの取得がうまくいっていないのか、
保存が正確にできていないかのどちらかだと思いますが、
どうにも原因がわかりません。

初心者なもので初歩的なミスだとはおもいますがお力添え頂けると幸いです。

以下スクリプト

    n=1
    notesel ss
*hata1;練習施行中身
cls 4
x="練習/練習"+n+".JPG"
picload x
wait 100
cls 4
wait 100
onkey 0

answer(n)=2
if iparam=70 : answer(n)=0 ;fキー
if iparam=74 : answer(n)=1 ;jキー

gosub*hozon
n=n+1
if n<6 :goto *hata1
notesave "ss"
end
*hozon

if answer(cnt)=0: noteadd "0", cnt, 0
if answer(cnt)=1: noteadd "1", cnt, 0
if answer(cnt)=2: noteadd "2", cnt, 0
return



この記事に返信する


nepisat

リンク

2015/2/25(Wed) 00:55:17|NO.67514


N=0 notesel ss onkey gosub *hozon repeat 6 cls 4 color 255,255,255:mes "画像等" mes iparam:color //キーコード表示(確認用) wait 100 cls 4 wait 100 loop notesave "ss.txt" end stop *hozon if (iparam ==70) { noteadd "0",cnt,0 } if (iparam ==74){ noteadd "1",cnt,0 }else{ noteadd "Other",cnt,0 } return

間違っていたらすみません。
6回ループで終了
キーが推されたらキーコードを確認
fかjならば0か1を回数Indexに追加その他ならOtherを回数Indexに追加

これにはキーを押したときにwait処理が無視されるバグがあるのでonkey のOn/Offの切り替え処理を
repeat内に入れてください。



プレ卒つらい

リンク

2015/2/26(Thu) 18:08:29|NO.67544

Nepisatさん

お返事有り難うございます!本当に助かります(お返事遅くてすみません)。
この後試してみます!



プレ卒つらい

リンク

2015/2/26(Thu) 23:28:36|NO.67546

nepisatさん

私のやり方がまずいのかと思いますが、試してみたところうまくいきませんでした。
リピートからループの外にgosubがあったりキーを何も押さないと
メモが白紙になってしまいます。
ダメもとでリピートの中にgosubを置くとすべてotherになってしまいます。

キーを押さない場合はサブルーチンに行けないので
otherを記録させるためにほかの場所に書いた方がいいのでしょうか。


わかりにくくて申し訳ありません



ht_ask

リンク

2015/2/27(Fri) 00:48:08|NO.67547

軽く添削してみました。

n=1 notesel ss *hata1;練習施行中身 color : boxf : color 255, 255, 255 ; 間違いではないけど色々あってこの目的にclsは推奨されていない x="練習/練習"+n+".JPG" picload x wait 100 color : boxf : color 255, 255, 255 wait 100 onkey *on_key ; 0はキー入力の検知を停止するときに使うので意味がなく、ラベルを指定する stop ; onkeyは今後入力に応じてラベルに飛ぶというだけの命令なのでstopしないと素通りする *on_key answer(n)=2 if iparam=70 : answer(n)=0 ;fキー if iparam=74 : answer(n)=1 ;jキー gosub*hozon n=n+1 if n<6 :goto *hata1 notesave "ss.txt" ; 拡張子を付ける end *hozon if answer(cnt)=0: noteadd "0", n - 1, 0 ; cntはrepeat文の中でしか使えない if answer(cnt)=1: noteadd "1", n - 1, 0 if answer(cnt)=2: noteadd "2", n - 1, 0 return
それで、onkeyに限らず割り込みジャンプ系の命令はwait/awaitの待機中に起こる仕様なのでこれでもまだ駄目です。
説明も大変なので、代わりに我流のコードを書いておいたので参考にしてください。

onkey gosub *on_key notesel ss repeat 6 onkey 0 noteidx = cnt color : boxf : color 255, 255, 255 ;picload "練習/練習" + (cnt + 1) + ".JPG" pos 10, 10 : mes "問題" + (cnt + 1) wait 100 color : boxf : color 255, 255, 255 wait 10 onkey 1 keytyped = 0 repeat wait 4 ; ここのウェイトの間にonkeyが発動するようにする if keytyped = 1 : break loop loop notesave "ss.txt" end *on_key if iparam = 70 : noteadd "0", noteidx, 0 : title "f" if iparam = 74 : noteadd "1", noteidx, 0 : title "j" if iparam ! 70 & iparam ! 74 : noteadd "2", noteidx, 0 : title "other" keytyped = 1 return



プレ卒つらい

リンク

2015/2/28(Sat) 11:41:40|NO.67578

Ht_askさん

お返事遅くなりました。
なんとか取得、保存ができました!

本当にありがとうございました。
完成したスクリプトで実験頑張ります!!!



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