user icon

MobiRubyのサンプル作りました(動画付)

新着情報、『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のことがもっとわかるはず。たのしみ!

Facebooktwitterlinkedintumblrmail

タグ: , ,

名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)