05.キーを離して,動く方向を変える(2002/03/31作成)
前回は,何かキーを押すと,4角形が動き始めるようにしました。
今回は,最初に押したキーを押しっぱなしの間は横に,キーを放すと下に移動するようにします。
では,OPLを立上げ,以下のように入力しましょう。
今回から,(英語力がないので)REM文に日本語を使ってみました。
PROC keyup:
LOCAL x%,y%
LOCAL t%
LOCAL event&(1)
REM -------Initialize-------
gBOX 160,160
x%=10
y%=10
gAT x%,y%
gFILL 5,10,0
GET REM Wait until Any Key is pushed
REM -------MOVE x-------
WHILE x%<=130
PAUSE 2
gFILL 5,10,1
x%=x%+5
gAT x%,y%
gFILL 5,10,0
REM -------Get KeyUp Event-------
t%=TESTEVENT REM イベントが発生したかチェック
IF t%=-1 REM t&=1なら,次の行に移る。違ったら一番下のENDIFの次に移動
GETEVENT32 event&(1) REM イベント情報を取得
IF event&(1)=&407 REM イベント情報が&407(キーを放した)だったら次の行へ。違ったら,一つ目のENDIFに移動
BREAK REM ループの外(ENDWHの下)に移動
ENDIF
ENDIF
ENDWH
REM -------MOVE y-------
WHILE y%<=140
PAUSE 2
gFILL 5,10,1
y%=y%+5
gAT x%,y%
gFILL 5,10,0
ENDWH
GET
ENDP
もう一歩
・TESTEVENT
イベントが発生しているか,チェックできます。
-1のときは発生,0のときは発生していません。
イベントとは,「キーを押した」とか,「離した」とか,「画面をタップした」とか,いろんな操作のことを言います(と思います)。
・IF...ENDIF
IFに続く条件式が正しいとき,ENDIFまでの処理を行います。
正しくないときは,ENDIFの次の行に移動します。
・GETEVENT32 event&(1)
イベント待ちをして,イベントが発生すると,イベント情報を,続く変数に返します。
event&(1)が変数で,ev&(1)でも,e&(1)でもいいです。
この変数に,キーが押されると「&406」,離されると「&407」が入力されます。
他にも,いろんなイベントに対応しています。
このGETEVENT32,もっといろんな情報を返してくれるのですが,よく分からないので省略します。
すいません。
・BREAK
ループ処理(WHILE...ENDWH)を終了します。
具体的には,ENDWHの次の行に移動します。
ここでは使っていませんが,もう一つのループ処理「DO...UNTIL」でも使えます。
プログラムの流れ
今回は,イベント処理(Get KeyUp Event)に重点を置いて,流れを追ってみます。
最初〜--Initialize--
各種変数の宣言,4角形の描画を行い,「GET」で,キーが押されるまで待ちます。
--MOVE x--
4角形を,右(x方向)に動かします。
ループ処理(WHILE...ENDWH)を用いており,これには「--Get KeyUp Event--」も含まれています。
--Get KeyUp Event--
「t%=TESTEVENT」:イベントが発生したとき,t%に-1を入力します
「IF t%=-1」:「t%=-1」(イベントが発生した)なら次の行に,違ったら2つ目のENDIFに移動します。
「GETEVENT32 event&(1)」:イベント情報を取得します。
「IF event&(1)=&407」:「event&(1)=&407」(キーを放した)なら次の行に,違ったら一つ目のENDIFに移動します。
「BREAK」:ループ処理(WHILE...ENDWH)から抜けます。
「ENDIF」:「IF event&(1)=&407」に対応する
「ENDIF」:「IF t%=-1」に対応する
「ENDWH」:「--MOVE x--」から続く,「WHILE x%<=130」に対応する
キーを放さなくても,x%が130より大きくなれば,ENDWHの次の行に移動します。
--MOVE y--
4角形を,下(y方向)に動かします。
IF文は,OPLに限らず,変数,ループに並ぶ重要なものです。
今回のように,IF分の中にIF文を入れること(入れ子)が可能です。
IF...ENDIFの中に,IFに続く条件式が正しくないときに実行する,ELSEIF,ELSEというコマンドも使えます。
これについては,ここでは解説しません。
OPL以外のプログラムでもよく使われるものなので,調べてみてください。
04.キーを押して,移動開始<-->06.4角形の表示位置をランダムに決定
OPLはじめの一歩
最初のページ