情報処理2z(Java version) 課題8:オリジナルゲームへの準備 |
Java で音を鳴らすためには音のデータが入っているファイルが必要になります。
JDK1.0.2 では .au 型(かつモノラル)のファイルのみ対応しています。
いくつかのサウンドエディタソフトでこのファイルを作成することも可能ですが、
今回はこちらで用意したファイルから自分の使いたい音を見つけて
自分のプログラムで鳴らしてみましょう。
import java.applet.*; import java.awt.*; public class kadai801 extends java.applet.Applet implements Runnable { AudioClip wall_s, bar_s, miss_s; /* AudioClip 型変数の宣言 */ public void init(){ wall_s = getAudioClip(getDocumentBase(), "sound/utopia/u17.au"); /* au ファイルを対応させる */ bar_s = getAudioClip(getDocumentBase(), "sound/utopia/u10.au"); miss_s = getAudioClip(getDocumentBase(), "sound/utopia/u02.au"); } public void run(){ int i; while(true){ Thread.sleep(30); if(x < 10){/* 左の壁に跳ね返った時の処理 */ x = 10; dx= -dx; wall_s.play(); /* 音を鳴らす */ } else if(x > 160){/* ボールが右端に来た時の処理 */ if(y > bary - 10 && y < bary + 40){ /* バーで跳ね返したときの処理 */ x = 160; dx = -dx; bar_s.play(); } else{ /* ミスした時の処理 */ x = 50; y = 80; dx = 2; dy = 3; miss_s.play(); } } } } } |
画像の表示は音の鳴らし方と同様に行います。 宣言、ファイルの対応、描画を行います。
Image ballimg; /* Image 型変数の宣言 */ ‥‥ ballimg = getImage(getDocumentBase(), "ball.gif"); /* gif ファイルを対応させる */ ‥‥ ofscr_g.drawImage(ballimg, 30, 30, null); /* 画像の表示 */
Java では jpg, gif の画像ファイルを読み込み表示をすることが可能です。 音の au ファイルもそうですが、ネット上にたくさん落ちているファイルなので 使いたいファイルを探してプログラムで使ってみましょう。
このまま appletviewer を起動しても画像が出てこない場合と、 出てくる場合とがあります。 appletviewer の左上をクリックして restart を選ぶときちんと表示されます。 これには理由があります。それは画像ファイルのロードのタイミングです。
つまり、ファイルのメモリへの展開の前に drawImage が来てしまうと完全な描画ができないのです。 これを防ぐ方法があります。 こちらの意図的なタイミングでファイルロードを行うクラス MediaTracker を使います。
使用例は以下です。
import java.awt.*; public class mt extends java.applet.Applet { MediaTracker m; /* MediaTracker クラスのインスタンス(≒変数)を作る */ Image img; public void init() { img = getImage(getDocumentBase(), "back.jpg"); m = new MediaTracker(this); /* インスタンスの初期化 */ m.addImage(img, 0); /* MediaTracker の仕事リストに加える */ m.waitForID(0); /* 強制ロード */ } public void paint(Graphics g){ g.drawImage(img, 0, 0, this); } } |
画像のロードの操作をするには addImage(Image, ID) を使います。 これで MediaTracker にロードしたい仕事をためておいて、 最後に waitForID(ID) を使って一括にロードを行います。
複雑なゲームになってロードするファイルが多くなってきたら、 このロードを行っている時には "Now Loading..." などと表示させて、 プレイヤーに作業内容を知らせておいた方が良いでしょう。 さもないとブラウザで表示してる時など、 処理が止まっていると思われて他のページに飛んで行ってしまうかもしれません。
残念ながら MediaTracker でロードのタイミングを操作できるのは Image ファイルのみのようです。 AudioClip ファイルは最初のやり方でやって下さい。
To: report
cc: 自分のログイン名
Subject: 2z8
です。
画像や音声ファイルは添付せず、
プログラムのみをメールに張り付けて送ってください。
Subjectを間違えないよう注意しましょう。
このページでは、ゲーム作りにおける「音声ファイルの種類と作成方法」について説明します。 ◆ まずはじめに ゲームにおける音声として「効果音」と「BGM」の二つが挙げられますが、このページでは BGM自体の作成方法については触れません。 BGM=曲を作るためにはある程度の知識(コード理論など)と機材が必要不可欠ですので、かねてから自分で曲を作っている方以外は 下手に手を出さない方が賢明です。曲を作っている友達に作ってもらうか、著作権に引っかからない曲(主にクラシック)を自分で入手しましょう。最近の楽曲をそのまま使うと大抵著作権に引っかかりますので注意して下さい。 ◆ 音声ファイルの種類について まずは、代表的な各種音声ファイルの種類とその特徴について表にまとめましたのでご覧ください。
表を見てわかる通り、JDK1.02では.auファイル以外は使用できません。注意して下さい。 JDK1.2以降を使用しているなら、基本的に.wavファイルがオススメです。Windowsの標準フォーマットですので、マイクがついているラップトップなら、標準で入っているサウンドレコーダーにて録音が可能です。使い方も難しくありませんので、すぐ使えるはずです。 .midファイルは非常にデータが軽くなるのが特徴です。ただし、マシン自体が演奏することになりますので、あらかじめ用意された音以外は基本的に使えません。また、作成方法もある程度の専門知識が必要ですのでオススメはしません。扱える方のみ使用して下さい。 ◆ 音声ファイルの生成、変換 始めに、最も馴染み深い.wavファイルの生成方法について説明します。jdk1.02を使用されている方も、.wavファイルから.auファイルに変換しますのでよく読んでおいて下さい。 音声を作成する最も手っ取り早い手段は「サウンドレコーダーで録音」です。使い方もすぐに分かると思います。これで身近な音を色々拾ってみましょう。 また、「効果音素材サイト」も幾つかありますので、検索エンジンで探してみるのも手です。ただし、フリーで使える効果音素材サイトは意外と少なく、希望の効果音があるとは限りませんのでご注意を。 もちろん、効果音を自分で作ることもできます。作成ソフトはいろいろありますが、ここでは「SWave」というフリーウェアをお勧めします。→ ホームページ:さくらやまスクエア(http://homepage1.nifty.com/sakurayama/) 自分の希望通りの効果音を作るのは難しいですが、「ゲームらしい」音は簡単に作れるはずです。 さて、苦労して作成した(手に入れた)効果音ですが、JDK1.0.2を使用している方はそのままでは使えません。auファイルに変換する必要があります。変換ツールは「GoldWave」を推奨します。→http://www.goldwave.com このソフトはシェアウェアですが、いくつかの機能はお金を払わなくても使えます。 「GoldWave」を使ったwavファイル→auファイルへの変換手順は次の通りです。 1.[file]→[open]でファイルを開く 2.[file]→[save as]で同様に保存を指定 3.ファイル形式を以下のように指定(囲った部分に注目) ![]() これでauファイルへの変換は終了です。 |