Androidアプリを作ってみる #20 -Surfaceview その3-

Surfaceviewを動かす その前に

run()の中身をいじるけどちょっと待て

前回以下のSurfaceHolder.CallbackとRunnableインターフェースのメソッドを定義した所で次はrun()メソッド(実際に描画処理を行うところ)の中身をいじっていこうって話をしました。

メリ
そうだっけ?
本Blogの内容を試して、トラブルや故障の原因になったとしても責任は負えません。そんな危ないことはしていませんが、自己責任でお願いしますね。

前回の記事

Androidアプリを作ってみる #19 -Surfaceview その2-

2017.01.22

run()内は、ぐるぐる回る必要がある

run()はスレッド(並列処理)として動作していますが、メソッドの性質は普通と変わらないのでこのまま実行してしまうと処理終了とともにメソッド自体を抜けてしまいます。でも、やりたいのは画面の描画です。当然一回描画しただけではキャラクターが動くこともできませんよね。

だから、このrun()メソッド内はループ処理をしなければなりません。ループというのはぐるぐる同じところを回っているイメージです。そのぐるぐるを作って毎回背景やら画像やらを更新していけばいいわけですね。

スポンサーリンク



制御構造 -while-

初めてプログラミングらしい

先ほどのぐるぐるをどのように作るか!?これはJAVAの制御構造「while」文で実現します。どのように書くのかというと…。

条件が成立すればtrueです

このwhile文ですが、()の中が「true(真)」の条件が成立するときに、その後に続く{〜}の中身を繰り返し実行します。

逆に「false(偽)」となるとこのぐるぐる(ループ)から抜けることになります。ですから上の記述だとずっとぐるぐるすることになります(無限ループ)。もちろんこの記述はあまり良くないのですが、便宜上わかりやすいのでこう書きました。

この()の中の条件ですが、当然trueとfalseの記述だけが認められているわけではありません。

JAVAというかプログラミング言語全般に言えることですが、条件の成立を真、それ以外を偽として扱います。ですから例えば「a < 10」という条件があってaが9とか8とか10より小さい限り「true(真)」が成立していることになります。こんな使い方もできるわけですね。(aが10以上になれば「false(偽)」となり、ループを抜けます)

これを実際にプログラム上で書いてみると

とりあえずintは整数を扱う変数aを用意しているとだけ覚えれば大丈夫です。あとは「a = a + 1;」記述です。これは意味的にはaの値に1を足してaにコピーしているということになります。

これと全く同じ意味になり、もっと簡単に書く方法に下の2つの書き方があります。

どちらを使っても同じ意味になります。

プログラミングでは「=」は等号という意味ではなく「コピー」を意味しています。これは慣れが必要ですね。

以上から、while文の中身は実行するたびにaが0,1,2,3,4,5,6,7,8,9,10…と変化していくことになりますね。ここにwhile文の条件がありますからaが10になって次のループ処理の条件を見て「false(偽)」になるのでaのとりうる値は0〜9ということがわかります。

これがどのように表示されるかというと…(架空の処理)。

となります。



無限ループを止めれるようにする

ぐるぐるしっぱなしはまずいでしょ

この無限ループですが、普通に考えてもホントの無限にしたらヤバイくらいのことは想像がつくでしょう。ま、やってもいいんですがあまりよろしくはありません。ってことでこれを制御する方法が欲しいですね。

にゃんこ
メリがやっとけよ。
メリ
??

while文の条件は先ほどの通り、trueとfalseの二つの値を取ります。JAVAの値の型(変数…数値を保存しておける箱の大きさ)には、このtrueとfalseの二つの値を格納できる「boolean」型というのがあるのでそれで出来そうです。

無限ループを止める方法

実際にコードを書いてみましょう。

isLoopの初期値がtrueなんですから、これが変わらない限りはずっとループし続けます。この変数「isLoop」をどこかで「false」に書き換えればこの無限ループが終わることになります。これで止めたい時に無限ループを止められますね。

ちなみに上記プログラムのboolean型の宣言場所は問題があります。これをやりたいのであれば本体はrun()メソッドの外側に書かなくてはいけません。ま、それはややこしいのでここではやめておきましょう。

長くなったのでまた次回。次回こそ何か画面を表示したい…。

にゃんこ
あ、そういえばandroidやってるんだっけ?忘れかけてた。

次の記事

Androidアプリを作ってみる #21 -Surfaceview その4-

2017.03.20

前回の記事

Androidアプリを作ってみる #19 -Surfaceview その2-

2017.01.22