#!ruby # -*- mode: ruby; coding: utf-8 -*- # Last updated: <2016/12/14 23:51:02 +0900> # # gosuを使ってBGMが鳴らせるかテスト。 # Songクラスを使わずに Sampleクラスを使ってみる。 # # 動作確認環境: # Windows10 x64 + Ruby 2.2.6 p396 mingw32 + gosu 0.10.8 # Ubuntu 16.04 LTS + Ruby 2.3.1 p112 + gosu 0.10.8 require 'gosu' class MyWindow < Gosu::Window def initialize super 320, 240, false self.caption = 'Sample (BGM) Play Test' @fnt = Gosu::Font.new(20) # BGMのoggファイルを読み込む @bgm = Gosu::Sample.new("tmp_loop01.ogg") @bgm_si = nil @play_msg = "" @pause_msg = "" end def update # 再生中? @play_msg = (@bgm_si and @bgm_si.playing?)? "Playing" : "Stopped" # ポーズ中? @pause_msg = (@bgm_si and @bgm_si.paused?)? "Paused" : "Not Paused" end def draw # 再生中/停止中, ポーズ中/非ポーズを表示 @fnt.draw("Push A:Play, Z:Stop, P:Pause", 4, 4, 0) @fnt.draw(@play_msg, 4, 30, 0) @fnt.draw(@pause_msg, 4, 50, 0) end # キーが押された時に呼ばれる def button_down(id) if id == Gosu::KbEscape close elsif id == Gosu::KbA if @bgm_si == nil or !@bgm_si.playing? @bgm_si = @bgm.play(1, 1, true) # 通常再生(ループ有効) end elsif id == Gosu::KbZ if @bgm_si @bgm_si.stop # 再生停止 end elsif id == Gosu::KbP if @bgm_si if @bgm_si.paused? @bgm_si.resume # ポーズ解除 elsif @bgm_si.playing? @bgm_si.pause # ポーズ end end end end # キーが離された時に呼ばれる def button_up(id) end def stop_bgm return unless @bgm_si @bgm_si.stop end def dispose_bgm @bgm_si = nil @bgm = nil end def bgm_playing? return false unless @bgm_si return @bgm_si.playing? end end wdw = MyWindow.new wdw.show # BGM停止を指示 wdw.stop_bgm # BGMが停止するまで待つ while wdw.bgm_playing? puts "BGM playing" sleep(1) end puts "BGM not playing" wdw.dispose_bgm wdw = nil GC.start exit