API (Application Program Interface) VB6 | |
音を出す |
サンプル
新規フォームを用意する。メニューから [プロジェクト(P)] → [標準モジュールの追加(M)] を選択して、標準モジュールを追加する。
標準モジュールのウィンドウをアクティブ(使える状態)にしておき、APIビューアを起動して、データファイルWin32apiを読み込み準備する。
種類@から「関数」を選択する。検索Aに"sn"と入力すると有効な項目Bに"sndPlaySound"が表示されるので選択し、[追加(A)]ボタンをクリックする。
種類@から「定数」を選択する。検索Aに"sn"と入力しなおすと有効な項目Bに"SND"で始まる定数が表示されるので、"SND_ASYNC"を選択し、[追加(A)]ボタンをクリックする。
最後に、[挿入(N)]ボタンをクリックすると標準モジュールにコピーされる。
フォームにコマンドボタン(Command1)を1つ用意して次のプログラムをForm1のコードウィンドウに入力する。
・プログラムリスト
Private Sub Command1_Click() Dim rr As Long rr = sndPlaySound("chord.wav", SND_ASYNC) End Sub
sndPlaySoundとSND_ASYNCをすべて小文字で入力してもよい。自動的に宣言通りになる。
音のファイル"chord.wav"はWindows 98の場合、C:\WINDOWS\MEDIA\にあるので、プログラムと同じフォルダに保存しておく。
「ゲームの作成」で制作した"UFO Shooting"に追加する
自機弾を発射したときには"ir_end.wav"で、敵が爆破したときには"chord.wav"で音を出す。2つの音のファイルはWindows 98の場合、C:\WINDOWS\MEDIA\にあるので、UFO Shooting のプログラムと同じフォルダに保存しておく。
(a) 自機弾を発射したときに音を出す関数を追加する。
・プログラムリスト
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Dim n As Integer Dim r As Long '関数の返却値受け取り用 '自機の移動(←、→) << 省 略 >> '- - - - - - - - - - - - - - - '自機弾発射 スペースキーON and 自機弾 表示ON For n = 0 To MaxTama '自機弾数分調べる If KeyCode = vbKeySpace And imgTama1(n).Visible = False Then With imgTama1(n) '自機弾発射 .Left = imgTaihou.Left + imgTaihou.Width / 2 .Top = imgTaihou.Top .Visible = True '自機弾表示ON End With r = sndPlaySound("ir_end.wav", SND_ASYNC) '音を出す Exit For '1発だけ発射してforを抜け出す End If Next n End Sub
sndPlaySound関数はIf文の次行(With文の前行)でもよい。sndPlaySound関数の返却値を受け取るため変数rをLong型で宣言している。
ここで実行すると、スペースキーを押して自機弾を発射すると音が出る。
(b) 敵が爆破したときに音を出す関数を追加する。
・プログラムリスト
Private Sub AtariHantei() '当たりの判定 Dim flag As Integer Dim n As Integer, nn As Integer Dim r As Long '- - - - - - - - - - - - - - - '自機弾が敵に当たる(敵爆破フラグBakuF()を2に設定する) For nn = 0 To MaxTama '自機弾数(MaxTama個分)を調べる If imgTama1(nn).Visible = True Then '自機弾表示ON For n = 0 To MaxTeki '敵の数(MaxTeki個分)を調べる '敵表示ON かつ 当たり ならば 爆破設定 If imgTeki(n).Visible = True And isAtari(imgTeki(n), imgTama1(nn)) = True Then imgTeki(n).Picture = imgBakuha.Picture '爆破表示 BakuF(n) = 2 '爆破表示(時間)設定 imgTama1(nn).Visible = False '自機弾表示OFF lblTokuten.Caption = Str(Val(lblTokuten.Caption) + 100) '得点加算 r = sndPlaySound("chord.wav", SND_ASYNC) End If Next n 'UFO表示ON かつ 当たり ならば 爆破設定 If imgUFO.Visible = True And isAtari(imgUFO, imgTama1(nn)) = True Then imgUFO.Picture = imgBakuha.Picture '爆破表示 UFOf = 2 'UFO爆破表示(時間)設定 imgTama1(nn).Visible = False '自機弾表示OFF lblTokuten.Caption = Str(Val(lblTokuten.Caption) + 500) '得点加算 r = sndPlaySound("chord.wav", SND_ASYNC) End If End If Next nn '- - - - - - - - - - - - - - - '適または適弾が自機に当たる << 省 略 >> End Sub
sndPlaySound関数はIf文〜End If文の間であればよい。sndPlaySound関数の返却値を受け取るため変数rをLong型で宣言している。
ここで実行すると、スペースキーを押して自機弾を発射すると音が出る。自機弾が敵を爆破すると音が出る。
ただし、音は同時にひとつしか出ないので、発射と爆破が重なると一方の音が中断する。
音を出す | |
Copyright © 2002 Hiroshi Masuda |