RealBasic University

このコラムはStone Table Softwareのオーナーであり、またREALbasic Developerの編集者でもあるMarc Zeedar氏により書かれたものを、著者の許可を得て翻訳したものです。この翻訳はHREM Researchにより提供されています。この日本語版へのご意見はRBU-Jまでご連絡下さい。

URL: http://www.applelinks.com/rbu/058/
INDEXに戻る

SimplePaint:パート V

先週は、SimplePaintで画像を保存することができるようにしました。今週はユーザ・インターフェースをより洗練させることに専念しましょう。

ペイント・カーソルを加える

もうすでに気づいているとは思いますが、SimplePaintでひとつ問題なのはいつも矢印カーソルが表示されるということです。矢印はメニューを選択するのには役立ちますが、画像を描くには適していません。そういうわけで、そのカーソルを変更しましょう。

私はResEditで単純なドットの形をしたカーソルを作成し、カーソルリソースとしてそれを保存しておきました。ここから取ってくることができます。プロジェクトファイルにドラッグして、それをインストールしましょう。

カーソルを使ためには、適当な場所にコードを挿入しなければなりません。まずはじめに、paintCursorをデフォルト・カーソルとしたいので、paintWindowが開かれたときにそれをアクティブにしましょう。paintWindowのOpenイベントに次のコードを加えてください。

 self.mouseCursor = paintCursor 

さて次にControl領域まで行って、nodrawCanvasを見つけてください。そのmouseExitイベントで、先ほどと同じコードを入力しましょう。そしてmouseEnterイベントで次を入力してください。

 self.mouseCursor = arrowCursor 

それでプログラムが立ち上げられたときにpaintCursorがアクティブになり、ドット・カーソルと矢印カーソルが、ユーザがカラーパレットに移動したときに切り換えられます。簡単です!

効果音を加える

SimplePaintを使っていると、それがとても静かであることに気づくと思います。しかしながら、子供はさわがしいものです。彼らは音のするものが大好きです。だからプログラムをより楽しいものにするために、いくつかの効果音を加えましょう。

はじめに、鳴らしたい音のリストを作成しましょう。ひとつの簡単なアイデアは、キー・クリックの効果音を加えることです――子供がキーボード上のどのキーを押したときにでも音を鳴らします。もうひとつのアイデアは、爆発タイプの音です――それは現在の画像を消去するために子供がDeleteキーを押したときに鳴らすつもりです。次にSimplePaintでの効果音のいくつかのアイデアを挙げます (あなたの思いついたものを自由に加えてください):

キー・クリック音
ユーザがキーボードの文字コマンドを使用したとき。

爆発音
画像消去のためにDeleteキーが押されたとき。

保存音
画像を保存しようとするとき。

カラー変換音
ユーザが新しいカラーに変更するとき。

ブラシ拡大音
ペイント・ブラシが大きくされたとき。

ブラシ縮小音
ペイント・ブラシが小さくされたとき。

これで何のための効果音が必要なのか明らかになったので、次にそれに相応しい音を探さなければなりません。あなたはどこでそれを手に入れますか?あなたに適切な装置と方法があれば、オリジナルの効果音を録音することが出来ます。(それにはマイクロフォン、録音と音の編集のためのソフト、そして(Macによっては)音の入力装置が必要です。)

個人的な使用に限れば(つまり他人と共有したり、売ったりしないのであれば)、他のアプリケーションから自由に効果音を"盗用する"ことができます。プログラムのリソース・フォークを開いてSNDリソースを探すには、AppleのフリーソフトであるResEditを使用してください。

ゲームにはたくさんのかっこいいビープ音や、爆発音、それにレーザー光線の音が含まれています。しかしたいていどんなMacのアプリでも、いくつかの効果音があります。例えば、次のようにAdobe GoLive 4.0には銃声音があります(どうしてかは私に聞かないでくださいね)。

しかし大部分のデジタル化された音源は著作権が取得されているので、許可を取らずに他の誰かからちょっと音源を拝借して、あなたのアプリに使用するということはできません。

しかしながら、ロイヤルティー(配布したプログラムひとつひとつについての使用料)を払う必要がなく、プロジェクトに使うことのできるフリーの音源、あるいは購入できるサウンド・クリップ集もあります。私はたまたまそのようなものを持っていましたので、ここに含まれている効果音は古いライブラリー(もう販売されていません)からのものです。

私の場合は効果音のコレクションがあるので、必要に沿った効果音をその中から探し出さなければなりません。キー・クリックや爆発音のようなものは簡単ですが、"保存"の音というものはどんなものなのでしょう?

そこであなたの想像力の働かせどころす。抽象的なイベントに対してどんな効果音が適当か想いをめぐらしましょう。他にも入手可能な効果音すべてについて検討する必要があります(私の場合は、自分のライブラリーに限定されていますが)。それに効果音の用途をひとつに限定させるべきではありません――効果音は多くの場合にそれ以外の用途でも使用できます。例えば、柔らかな銃声音は警告あるいはキー・クリック音として使うことができるでしょう。私はSimplePaintで、キーがロックされたときの音でもともとは"Key turn"と呼ばれていた効果音を、"colorswitch"音として使用することにしました。"保存"音については、私はそれなりに意気揚々としている単純なオーケストラのコード音を使用することにしました。

効果音コレクションはここから入手することができます(それは今週のプロジェクト・ファイルにも含まれています)。

いったん効果音を解凍してプロジェクトのフォルダーにコピーすれば、あとはREALbasicのプロジェクト・ファイルのウィンドウにそれをドラッグするだけです。そのウィンドウは次のようになるでしょう。

音はイタリックで表示されていることに気づくと思いますが、それはプロジェクトに埋め込まれていないことを示しています(オリジナルを削除してはいけません)。

音を鳴らすには、その名前を入力してピリオド、playと付け加えるだけです。それは次のようになります。

 keyclick.play 

Quick Tip 1:プロジェクト・ウィンドウからコード・エディタへサウンド・アイコンをドラッグすれば、RBは適切な演奏コードを挿入してくれます。

Quick Tip 2:プロジェクト・ウィンドウ内のサウンド・ファイルをダブルクリックすれば、それを鳴らすことが出来ます。どんな音だったか思い出せないときに役に立つでしょう。

それでは効果音が使えるようにしましょう。paintWindowのコード・エディタを開いて、KeyDownイベントを見つけてください。ここでそれぞれのイベントに合った適切な効果音を鳴らすため、行間にコードを挿入しましょう。完成したルーチンは次のようになります。

   if key = "S" then 
save.play
savePict
end if

if key = chr(8) then
// Erase all
blast.play
p.graphics.clearRect(0, 0, self.width, self.height)
self.refresh
end if

// Eraser
if key = "E" then
changeColor(rgb(255, 255, 255)) // white
end if

// Swap colors
if key = " " then
changeColor(oldC)
end if

if key = "4" then
down.play
xWidth = xWidth - 3
if xWidth < 3 then
xWidth = 3
end if
shapeCanvas.refresh
end if

if key = "6" then
up.play
xWidth = xWidth + 3
if xWidth > 30 then
xWidth = 30
end if
shapeCanvas.refresh
end if

if key = "2" then
down.play
yWidth = yWidth - 3
if yWidth < 3 then
yWidth = 3
end if
shapeCanvas.refresh
end if

if key = "8" then
up.play
yWidth = yWidth + 3
if yWidth > 30 then
yWidth = 30
end if
shapeCanvas.refresh
end if

if key = "-" then
down.play
xWidth = xWidth - 3
yWidth = yWidth - 3
if xWidth < 3 then
xWidth = 3
end if
if yWidth < 3 then
yWidth = 3
end if
shapeCanvas.refresh
end if

if key = "+" then
up.play
xWidth = xWidth + 3
yWidth = yWidth + 3
if xWidth > 30 then
xWidth = 30
end if
if yWidth > 30 then
yWidth = 30
end if
shapeCanvas.refresh
end if

とても簡単でしたが、"eraser"と"color swap"コマンドへの効果音をまだ加えていないことに気がついたでしょうか。なぜでしょう?それはchangeColorメソッドへコードを挿入するほうがやさしいからです(その方法ではある場所に一行のコードを加えるだけで済みます)。

   dim tempC as color 

tempC = newColor

if tempC <> c then
colorswitch.Play
oldC = c
c = tempC
colorCanvas.refresh
shapeCanvas.refresh
end if

さあ、ではプログラムを実行してみましょう――とてもやかましいです!これで子供は大喜びですね。

結局のところ、キー・クリック音は使用しませんでした。それを使うか、使わないかはあなたが決めてください。

今週のレッスンはここまでです。今週のチュートリアルの完全なREALbasicプロジェクト・ファイル(リソースを含む)を入手したい場合は、ここからダウンロードしてください。

次週

あと2、3の点を強化し、独自のバリエーションを加えてSimplePaintを仕上げます。

Letters

今週の手紙は、徹夜で観たワールドカップで3-2でUSAがポルトガルに勝った興奮から覚めるまではお休みです。トニー・サネーのようなランク入りしていないU.S.の選手たちが、年間最優秀選手のルイス・フィーゴ(また彼は世界で一番高額のサッカースター)を阻止するのを観るのはなんとも異様でした。信じられません。

ほとんどのアメリカ人は、サッカーへの関心はティドリー・ウィンク〔ドミノ遊びの一種〕と同程度です(私はその例外であることをうれしく思います)。アメリカ人の多くは、今回の出来事の大きさに気がついているのか私は疑問に思います。サンフランシスコのラジオ局の男性が、そのことをワールドシリーズ(意味合いは違いますが)でポルトガルの野球チームがニューヨーク・メッツを打ち負かしたことに例えていました。しかし正確にはメッツではなく、最優秀アメリカ人選手すべてを選抜したオールスターチームの場合の方が近いでしょう。

それがワールドカップというものです。一ヵ月にもわたって、それぞれの国の選抜選手が戦いを繰り広げます。オリンピックさえ小さく見えてしまうワールドカップほど偉大なものはありません(たいていの人は、夏冬あわせて十年間のオリンピックよりは、1回のワールドカップを観戦します。そして今年のワールドカップは本当にすばらしいものでした。すでに二度の大金星があり、もう一試合は0対0のドローで、平均得点は一試合3点近くあります。生放送の時間帯はお話になりませんが、そのためにTivo〔PVR(Personal Video Recorder)の製造会社。ここではハードディスクレコーダを指す〕やVCRがあるようなものですね。私はみなさんに次のアメリカチームの二試合を観戦(録画)して、弱小チームに声援を送るようおすすめします!〔訳注:これは2002年6月7日のコラムです〕

  DATE     EVENT                               TIMES                           CHANNEL 
日付 イベント 時間 チャンネル
6月10日 韓国 vs. USA     2:25 a.m. ET / 11:25 p.m. PT ESPN2
 6月10日 韓国 vs. USA (再放送) 2:00 p.m. ET / 11:00 a.m. PT ESPN2
6月11日 韓国 vs. USA (再放送) 1:00 p.m. ET / 10:00 a.m. PT Classic
6月14日 ポーランド vs. USA 7:25 a.m. ET / 4:25 a.m. PT ESPN
6月15日 ポーランド vs. USA (再放送) 1:00 p.m. ET / 10:00 a.m. PT ABC
 

ところで社会学の学生で、アメリカで盛んなスポーツとその他の地域のスポーツとの間の大きな人気格差に興味がある人は、Andrei Markvovits氏の優れた本であるOffside: Soccer and American Exceptionalism (リンク先は私のレビューです)に目を通すといいでしょう。そこには、サッカーは他国ではいちばん人気のスポーツであるのに、なぜアメリカでは社会から取り残されたのかについてを中心に、スポーツ一般の興味深い歴史が書かれています。サッカーに興味がなくても一読の価値はあります。


RBU-Jの通知サービス!コラムが発表されるたびに日本語版REALbasic Universityのお知らせの emailがあなたに届きます。登録・削除は ここ から。

INDEXに戻る