新着情報、『9/22(土) Rubyビジネス・コモンズが「【RBC Tech Saturday】MobiRubyでiOSアプリをつくろう ~スマホアプリ開発にmrubyがやってきた~」を開催します』でお知らせしておりますとおり、明日、引越し前の弊社新オフィスでRBCのMobiRubyイベントを開催します。まだ参加枠あります。ぜひ!
さて、本題。このイベント用に簡単なサンプルを作成しました。
起動するとBGMを演奏、中央にキャラクターを表示。画面をタッチすると効果音をならしてタッチ先にキャラクターがアニメーションで移動します。
再生すると音がでます。
BGMと効果音はユウラボ8bitサウンド工房のものを使用させていただいています。
ソースコード(roundnyaabe.rb)を貼ります。
samegame用のext.rbを使わせてもらっているので頭でrequireしています。
require 'ext'
def CGPointMake(x, y)
point = Cocoa::Struct::CGPoint.new
point[:x], point[:y] = x.to_f, y.to_f
return point
end
class Cocoa::MyViewController < Cocoa::UIViewController
define C::Void, :viewDidLoad do
#背景(黒)
screen_rect = Cocoa::UIScreen._mainScreen._bounds
background_view = Cocoa::UIView._alloc._initWithFrame(screen_rect)
background_view._setBackgroundColor(Cocoa::UIColor._blackColor)
self._view._addSubview(background_view)
#にゃ〜ぶ登場
@nyaabe_image_view = Cocoa::UIImageView._alloc._initWithFrame(CGRectMake(0, 0, 50, 50))
@nyaabe_image_view._setImage(Cocoa::UIImage._imageNamed(_S("nyaabe_iphone.png")))
point = Cocoa::Struct::CGPoint.new
point[:x] = (screen_rect[:size][:width] / 2).to_f
point[:y] = (screen_rect[:size][:height] / 2).to_f
@nyaabe_image_view._setCenter(point)
self._view._addSubview(@nyaabe_image_view)
end
def calcPosition(touches)
touch = touches._anyObject
location = touch._locationInView(self._view)
x = location[:x]
y = location[:y]
return [x, y]
end
define C::Void, :touchesBegan, Cocoa::Object, :withEvent, Cocoa::Object do |touches, event|
(@touchesBeganLock ||= Mutex.new).block do
x, y = calcPosition(touches)
C::call C::Void, "AudioServicesPlaySystemSound", $tap_se
p ":touchesBegan x:#{x}, y:#{y}"
nyaabe_move_to(x, y)
end
end
def nyaabe_move_to(x, y)
#アニメーション
context = C::call(C::Pointer, "UIGraphicsGetCurrentContext")
Cocoa::UIView._beginAnimations nil, :context, context
Cocoa::UIView._setAnimationDuration C::Double(0.2)
Cocoa::UIView._setAnimationCurve Cocoa::Const::UIViewAnimationCurveLinear
point = CGPointMake(x, y)
@nyaabe_image_view._setCenter(point)
Cocoa::UIView._commitAnimations
end
end
#BGM
bgm = AudioPlayer.new("sht_a05", "mp3")
bgm.loops = -1
bgm.volume = 0.25
bgm.play
#効果音初期化
soundPath = Cocoa::NSBundle._mainBundle._pathForResource _S("se_byuin"), :ofType, _S("mp3")
soundURL = Cocoa::NSURL._fileURLWithPath soundPath
$tap_se = C::Int(0)
C::call C::Void, "AudioServicesCreateSystemSoundID", soundURL, $tap_se.to_pointer
screen_rect = Cocoa::UIScreen._mainScreen._bounds
$window = Cocoa::UIWindow._alloc._initWithFrame screen_rect
$viewController = Cocoa::MyViewController._alloc._init
$window._addSubview $viewController._view
$window._makeKeyAndVisible
今日は福岡で開催されるmrubyのセミナーに参加するのでこれから福岡に移動です。
mrubyのことがわかったらMobiRubyのことがもっとわかるはず。たのしみ!