14
自己紹介 Twitter: @akasata (株)Rmakeという会社をやってます ゲームを共有して作成するウェブサービス Rmake」を運営してます Rails2.3Ruby 1.8)と4.0Ruby2.0)が混在・・・orz 最近は提督業もやってます

mrubyでゲームを書いてみた

Embed Size (px)

DESCRIPTION

第一回kuniaki.rbで発表した資料です。 プレゼン中の実行可能なソースコードは以下にあります。 https://core.rmake.jp/projects/166 また、実際に試したい方は以下からダウンロードしてください。 https://core.rmake.jp/about

Citation preview

自己紹介

• Twitter: @akasata

• (株)Rmakeという会社をやってます

• ゲームを共有して作成するウェブサービス

「Rmake」を運営してます

– Rails2.3(Ruby 1.8)と4.0(Ruby2.0)が混在・・・orz

• 最近は提督業もやってます

mrubyでゲームを書いてみた

mrubyとは?

• まつもとさん作の新しいRuby処理系

• 組み込みに特化したRuby

–アプリケーション組み込み

– Embedded System

• 例:LEGO MINDSTORMS NXTにも搭載 – ROM 256KB、RAM 64KBの環境

mrubyの組み込みは簡単

mrb_state* mrb = mrb_open();

mrb_load_string(mrb, "puts 'hoge'");

mrb_close(mrb);

3行でrubyを組み込めます!

mrubyでゲームを書く

• 基本方針

–様々な環境で動かす

–パフォーマンスを落とさない

– Rubyらしい記述

様々な環境で動かす

• 高いポータビリティ

– mrubyはC99の範囲内で実装

• 小さな言語仕様

–でもmrbgemsを適用することで高機能化も

• mrbgems: ビルド時にライブラリを組み込む機構

• 停止時間の短いGC

• PC/スマホ/ブラウザで動かしたい

– (ブラウザはまだ・・・)

パフォーマンスを落とさない

• スマホでも動かしたい

• Rubyはグルー(糊)言語

–処理の大半はネイティブ(C/C++)で記述

• あたり判定

• アニメーション/モーション

–ゲームを構成する中核部分だけを

RubyをベースにしたDSLで記述

Rubyらしい記述

• 基本機能を簡単に記述するDSLを作る

–スプライト

–アニメ

–モーション

– イベント処理

–あたり判定

Rubyらしい記述 – スプライト

# スプライト「human」の定義 sprite_template :human do |st| st.texture :human_image st.src_size 32, 32 # 描画元のサイズ st.dest_size 32, 32 # 描画先のサイズ st.center_offset 32/2, 32/2 # 中心位置 end # 座標(450, 16)に「human」を表示 scene.add :image, :template => :human, :center_position => [450, 16]

Rubyらしい記述 – アニメーション

# 足踏みを定義する

# 16フレームごとに表示画像を切り替え

st.animation :down do |c|

c.loop true

c.copy_rect :frame => 16, :src => [0, 0]

c.wait_animation

c.copy_rect :frame => 16, :src => [1, 0]

c.wait_animation

end

Rubyらしい記述 – モーション

st.motion :default do |commands|

commands.proc_call do |sprite|

sprite.change_animation :down

end

# 座標(384, 209)に4px/frameの速度で移動

commands.move_to_v 384, 209, 4

end

Rubyらしい記述 – イベント処理

scene :start_scene do |scene| scene.on_init do scene.add :image, :name => :human1, :template => :human, :center_position => [450, 16] # スプライト「 :human1 」タップすると文章を表示 scene.event :human1, :on_click do speak "タップすると文章を表示します“ end end end

デモ

• シューティングゲーム

• クレーンゲーム

• 3マッチパズル

• 脱出ゲーム

• マップエディタ

宣伝 – デジゲー博出展

2013年11月17日(日) 11:00 ~ 15:00

スペース:A-31/32

大田区産業プラザPio 2F小展示ホール