ここから本文です

現在JAVAでゲーム制作をしているのですが

花丸さん

2010/9/3020:07:50

現在JAVAでゲーム制作をしているのですが

描画処理についての質問です。

今使用している描画方法は、矩形コンポーネント内を全て再描画させているのですが
その場合、コンポーネントが重なると再描画したくない画像も再描画されてしまいます。
(画像参照)

調べてみたのですが、画像描画方法としてスプライト処理という技法があることを知りました。
しかし、ネットで中々分かりやすい説明が無く、画像が重なった場合の状況がいまいちよく分かりません。

この処理で重複した画像がどうなるのか、という事が分かる方、資料やサイトを知っているという方が居れば是非教えてください。

よろしくお願い致します。

補足現在はノベル形式のシステムを作っているので画像が重なった場合、
他のコンポーネントを非表示にしたり、アニメーションを無くせば問題は無いのですが、
格闘ゲーム等では画像が重なった時、矩形範囲ではなくそのキャラクターのみ再描画されています。
あれはどうやって描画されているのかが知りたいです。

描画,矩形コンポーネント内,BufferStrategy,スプライト処理,ダブルバッファリング,描画処理,分かりやすい説明

閲覧数:
1,022
回答数:
4

違反報告

ベストアンサーに選ばれた回答

許してさん

編集あり2010/10/215:48:54

キャラクター画像の変化したピクセルのみを再描画させ、それ以外は処理させない、という理解で良いでしょうか?

ああいうのは、ハードウェア実装されてたりするって話ですけどね。
Javaで実装しようとしたら、RepaintManagerを使って全てのpaintを取得して、graphicsのclipを新しく描画する画像と、元の画像の合計領域にしてみるとかですかね。
もしくは、コンポーネントを使ったレイヤーに頼るのではなく、全部自前でレンダリングした画像を一枚のコンポーネントに描画するって事も考えられます。こっちは普通にコンポーネントを使った描画では不可能な演出とかもできそうですね。

どちらにせよ、作るのはちょっと大変だと思います。

質問した人からのコメント

2010/10/7 22:40:52

降参 自分がやろうとしていた処理は、この回答だったので今の自分の能力では作成不可能だと分かりました。
全画面を再描画する事でうまく動いてくれたので、そちらの手法を使っていきたいと思います。
回答してくれた皆様有難うございました。

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

al_********さん

2010/10/504:04:42

javaでゲームを作る事がありますが、処理速度を気にしないものであれば全画面再描画しています
ノベル形式のシステムとのことですので、単純に
1.背景描画
2.人物描画(奥から)
3.メニュー描画
という順番で毎回描画してあれげれば良いのではないでしょうか?

人物をアニメーションさせたいのであれば、人物用のクラスを作成し
アニメーションパターンをそのクラスI/Fに持たせてあげれば
1つ作れば複数人物の、様々なアニメーションをさせる事ができます

格闘ゲームなどのイメージで云えば、背景+人物を分けて管理すればよいかと
背景の矩形範囲を再描画した後に、人物を追加すればよいのですが・・・

・・・認識が違っていたらごめんなさい。

ISLeさん

2010/10/216:54:22

> 格闘ゲーム等では画像が重なった時、矩形範囲ではなくそのキャラクターのみ再描画されています。

FrameあるいはCanvasにGraphics#drawImageなどを使って毎フレーム全画面更新するのがふつうです。

sil********さん

編集あり2010/10/220:14:36

Java でゲームを制作する場合、以下の書籍が参考になります。

長久 勝 (著) Javaゲームプログラミング アルゴリズムとフレームワーク
http://www.amazon.co.jp/Java%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3...

「第2章 スプライトシステムを作ろう」を読めば、Java による画像処理の基本を理解できると思います。
画像処理以外にも色々と載っているので、ゲーム制作の基本書として買ってみてはどうでしょうか。

【追記】
生噛りの知識ですみませんが、ゲームにおける画像処理について軽く追記します。

FPS (Frame Per Second) って聞いたことないですか?
FPS とは、秒間何度画面が更新されるかを表す指標です。
ゲームの画面は、アニメのように秒間数十回の再描画を繰り返しています。(すべてがそうかは知りませんが。)
例えば、60fps であれば、秒間におおよそ60回の再描画を行っています。
表示するイメージ(プライマリ)と組み立て用のイメージ(セカンダリ)を交互に再描画することで、アニメーションさせているのです。
FPS が低いと、交互に表示するのが遅いので画面がチラつきます。(動きの激しいゲームで見たことないですか?)
イメージを交互に切り替える処理を、ダブルバッファリングと言います。(切り替えるイメージの数によってトリプルバッファリングというのもありますが。)
質問者さんがどんな感じでゲームを制作しているのか分かりませんが、描画に関する問題はスプライトとダブルバッファリングを実装すれば解決しそうな気がします。
ちなみに Java では、BufferStrategy クラスを使うことで、簡単にダブルバッファリングを実現できます。

BufferStrategy クラス:
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/image/BufferSt...

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる