-- / --
--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

03 / 04
Tue

絵がうまく描けるようになりたい Ziphil です。

Java のアプレットなんかでよくこんなコードを見ます。 途中省略してます。

public class TestApplet extends Applet {
  public void paint(Graphics graphics) {
    graphics.drawImage(image, 10, 10, this);
  }
}

こういうものなんだなーってことで、 これまで気にしてなかったんですが、 やっぱり気になります。 この第 4 引数って何ですか。 Java の API に聞いてみると 「イメージオブザーバ」 だと言われますが、 何ですかそれ。

簡単に言ってしまえば、 イメージを観察するオブジェクトみたいです。 image observer ですから、 そりゃそうですね。 じゃ、 具体的に何をしてるんでしょうか。

まず、 getImage メソッドなどによって、 変数に Image オブジェクトが格納されたとしましょう。 この時点では、 画像はまだ読み込まれません。 次に、 drawImage メソッドが呼ばれたとしましょう。 ここで初めて、 画像本体が読み込まれ始めます。 しかし、 drawImage メソッドが呼ばれたときから読み込みが始まってしまっては、 この時点で画像を描画することはできません。 そこで、 イメージオブザーバが逐一イメージの読み込み具合を観察して、 それに応じて何度も画像を描画してくれるわけです。

「イメージオブザーバなんて考えるの面倒だから null で良いじゃん」 ということで、 null を指定してみるとどうなるでしょう。 イメージオブザーバがありませんから、 イメージの読み込み具合に応じて再描画してくれなくなります。 drawImage メソッドが呼ばれた瞬間は、 まだイメージは読み込まれ始めたばかりですから、 この時点では何も描画できず、 結果として最後まで何も描画されません。

では、 ゲームなどのループ処理によって、 何度も drawImage が呼び出される場合はどうでしょう。 1 回目のループで drawImage が呼び出された時点では、 何も描画することはできませんが、 ループで何度も drawImage が呼び出されるので、 結果としてきちんと画像が表示されます。

まあ、 ざっとですがイメージオブザーバはこんなことをする便利なやつです。

スポンサーサイト

comment ×0
コメント
管理者にだけ表示を許可する
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。