・iPhone/iPad/Android 向けのアプリケーションを作成できる
・Lua 言語で記述 (AS2 に似てるらしい)
・開発環境は Mac OS X か Microsoft Windows
・UI の API は OpenGL ベース
# 残念ながら linux は未対応です。
・自分の端末に入れるだけならばトライアル(無料・無期限)で使える
・商用としてiPhone/Androidマーケットに登録するアプリをビルドするときに商用ライセンス(一年)が発生する
■ 参考サイト
・日本 Android の会定例(2011年3月)の木村君の講演
・Ustream 録画
・スライド
・面白法人カヤックのFlashチームのブログ
・Corona で スマートフォン アプリ開発をしよう。インストール編 | エントリー | _level0.KAYAC | flash ActionScript blog -
・Corona で スマートフォン アプリ開発をしよう。HelloWorld 編 | エントリー | _level0.KAYAC | flash ActionScript blog -
・Corona で スマートフォン アプリ開発をしよう。開発編 | エントリー | _level0.KAYAC | flash ActionScript blog -
■ 事前準備
* Android の apk を出力するには、JDK をインストールして PATH を通しておく
■ Corona SDK のインストール
* http://www.anscamobile.com/corona/ の Download からダウンロード
* メールとパスワード設定
* registering メールが来るので、validate リンクをクリック
* Mac or Windows の Corona SDK をダウンロードし、インストーラを起動
■ Corona Simulator
* Corona SDK をインストールすると、スタートメニューに Corona SDK というのができるので、この中の Corona Simulator を起動
* [Window] - [View As] で端末のスキンを変えられる (Droid, NexusOne, myTouch, GalaxyTab)
■ 端末にインストールできる実行ファイル(Android だと apk)の作成
* Corona Simulator で [File] - [Build...] から Build for Android ダイアログを開く
* Application Name, Version, Package, Target OS Compativility, Save to Folder などを設定
* 出力先に apk ファイルが作成される
■ Hello Corona
画像を表示
local sky = display.newImage("sky.jpg")
local sky = display.newImage("sky.jpg")
local cloud = display.newImage("cloud2.png")
cloud.x = 0
cloud.y = 0
x, y は画像の中心位置っぽい
local sky = display.newImage("sky.jpg")
local cloud = display.newImage("cloud2.png")
-- display 480x800
cloud.x = 240
cloud.y = 600
local sky = display.newImage("sky.jpg")
local cloud = display.newImage("cloud2.png")
-- display 480x800
cloud.x = 240
cloud.y = 600
local star = display.newImage("star.png")
star.x = 180
star.y = 200
star.rotation = 20
-- 物理エンジンを使う
local physics = require("physics")
physics.start()
local sky = display.newImage("sky.jpg")
local cloud = display.newImage("cloud2.png")
-- display 480x800
cloud.x = 240
cloud.y = 600
-- 物理エンジンの対象に追加
-- friction : 摩擦
physics.addBody(cloud, {friction = 0.5})
-- cloud を背景に固定
cloud.bodyType = "static"
local star = display.newImage("star.png")
star.x = 180
star.y = 200
star.rotation = 20
-- 物理エンジンの対象に追加
-- density : 密度
-- bounce : 跳ね返り係数
physics.addBody(star, {density=2.0, friction=0.5, bounce=0.5})
-- 物理エンジンを使う
local physics = require("physics")
physics.start()
local sky = display.newImage("sky.jpg")
local cloud = display.newImage("cloud2.png")
-- display 480x800
cloud.x = 240
cloud.y = 600
-- 物理エンジンの対象に追加
-- friction : 摩擦
physics.addBody(cloud, {friction = 0.5})
-- cloud を背景に固定
cloud.bodyType = "static"
-- 星の生成を関数にする
-- math.random(hoge) : 0 ~ hoge - 1
local function createStar()
local star = display.newImage("star.png")
star.x = math.random(480)
star.y = -100
star.rotation = 20
-- 物理エンジンの対象に追加
-- density : 密度
-- bounce : 跳ね返り係数
physics.addBody(star, {density=2.0, friction=0.5, bounce=0.5})
end
-- 500ms 毎 createStart() を 10 回呼び出す
timer.performWithDelay(500, createStar, 10)
■ Hello Corona2
テキストを表示
local sky = display.newImage("sky.jpg")
local hello = display.newText("hello", 0, 0)
local hello2 = display.newText("hello world", 50, 50, native.systemFont, 40)
local hello3 = display.newText("hello corona", 0, 0, native.systemFont, 80)
hello3.x = display.contentWidth / 2
hello3.y = display.contentHeight / 2
hello3:setTextColor(0, 0, 128)
■ Eclipse プラグイン
LuaForge: LuaEclipse: Project Filelist
luaeclipse-1.2.0.zip をダウンロードし、解凍すると features, plugins フォルダができるので、中のファイルを eclipse.exe と同じディレクトリの features, plugins フォルダ内にコピーする。
Eclipse を起動して、
[Help] - [Install New Software...]
Add ボタンをクリックして以下を追加
LuaEclipse Update Site
LuaEclipse 1.2 にチェックマークつけてインストール
# 真ん中を除かないとエラーが消えなかった
■ Lua インタプリタ
Lua Binaries Download
* Windows の場合
lua5_1_4_Win32_bin.zip
をダウンロードして解凍
Eclipse を起動して
[Window] - [Preferences] - [Lua] - [Installed Interpreters]
を開いて Add ボタンをクリックして、Path に解凍したフォルダ内の lua5.1.exe を指定する
チェックマークにチェックを入れて OK を押す
■ Eclipse で lua
[File] - [New] - [Project...]
Lua から New Lua Project を選択して Next
Project name: を入力して Finish
■ PhysicsEditor (http://www.physicseditor.de/)
* 透過 png からアウトラインを抽出して .lua ファイルにエクスポートしてくれるツール
■ Hello Corona with PhysicsEditor
local screenW, screenH = display.contentWidth, display.contentHeight
local sky = display.newImage("sky.jpg")
local physics = require("physics")
physics.start()
-- display.setStatusBar( display.HiddenStatusBar )
local droid = display.newImage("androids2.png")
droid.x = screenW / 2
droid.y = 720
physics.addBody(droid, "static", {friction=0.5, bounce=0.3})
local scaleFactor = 1.0
local physicsItem1 = (require "cupcake").physicsData(scaleFactor)
local physicsItem2 = (require "donut").physicsData(scaleFactor)
local physicsItem3 = (require "eclair").physicsData(scaleFactor)
local cupcake = display.newImage("cupcake.png")
cupcake.x = screenW / 2 - 100
local donut = display.newImage("donut.png")
donut.x = screenW / 2
local eclair = display.newImage("eclair.png")
eclair.x = screenW / 2 + 100
physics.addBody( cupcake, physicsItem1:get("cupcake") )
physics.addBody( donut, physicsItem2:get("donut") )
physics.addBody( eclair, physicsItem3:get("eclair") )
--cupcake.x = screenW / 2;
--cupcake.y = cupcake.height / 2;
local function addItemTouch( event )
local s = display.getCurrentStage()
if "began" == event.phase then
local scaleFactor = 1.0
local id = math.random(3);
local physicsData;
local item;
if id == 1 then
physicsData = (require "cupcake").physicsData(scaleFactor)
item = display.newImage("cupcake.png")
physics.addBody( item, physicsData:get("cupcake") )
elseif id == 2 then
physicsData = (require "donut").physicsData(scaleFactor)
item = display.newImage("donut.png")
physics.addBody( item, physicsData:get("donut") )
else
physicsData = (require "eclair").physicsData(scaleFactor)
item = display.newImage("eclair.png")
physics.addBody( item, physicsData:get("eclair") )
end
item.x = event.x
item.y = event.y
item.isFocus = true
item.id = event.id
end
end
local xyText = display.newText( "Tap Screen!", 0, 0, native.systemFont, 40 )
xyText.x = screenW / 2
xyText.y = 40
xyText:setTextColor(255, 255, 255)
system.activate( "multitouch" )
Runtime:addEventListener( "touch", addItemTouch )
遊んでみたい方はこちらから。(Android 2.2 以上 : スペック低いと厳しいかも)
DroidFall.apk
■ SpriteDeck (http://www.spritedeck.com)
* Visual Game Designer for Corona SDK
* Corona で使える画面を作成できるツール
* 画面を作成してエクスポートすると **.lua と _**.lua が作成される
* _**.lua : アプリケーション画面
* **.lua : アプリケーションロジック
* ライセンスを購入しないとファイルが保存できない(トライアルあり)
■ Hello Corona with SpriteDeck
* SpriteDeck を使って作ってみた。
* 感想
* いまいちなところ
* Hello Corona! って表示されるだけのアプリの容量が 1.8M
* SpriteDeck では、円、矩形、テキスト、ボタン くらい
* グラデーションなどは指定できない
* いいところ
* 座標は数値指定で細かく調整できる
* サイズを変えたり、配置を換えたりが簡単
* テキストの Font は変えられない
* Physics Body, Body Type, Sensor などが GUI から設定できる
* Density, Bounce, Friction も GUI から設定できる
* その他
* 無料版だとプロジェクトが保存できないので、実質あまり使えない
■ Lua 言語
* Lua 5.1 リファレンスマニュアル
* ドキュメント
* デモ
* Lua アプリケーションコードは main.lua から実行される
* 追加のコードは require 関数でファイル名を指定
* 変数名を数字からはじめることはできない
* 大文字小文字を区別する
* 1.2e-2, 0xff などの表記が可能
* 変数の型を宣言する必要はない
* 基本的な型 : nil, boolean, number, string, function, table
* table : 連想配列、nil 以外の任意の値をインデックスとして使用可能
* フィールドにメソッドを保持することが可能
* t = {} のように記述して table 作成
* コメントは -- (ハイフン2つ)
* ブロックをコメントアウトするときは [[ hoge ]]
-- ここはコメント
--[[
ここはコメント
--]]
---[[
ここはコメントではない
--]]
* if文
if hoge == true then
fuga()
end
* 1行に2文書くときは ; を付ける?1行ならいらない
* インクリメント (++) は使えない hoge += 1 のように書く
* 文字列連結は + ではなく ..
* オブジェクトの主なプロパティ
* object.x
* object.y
* object.width
* object.height
* object.rotation
回転角度
360 以上もあり
* object.alpha
透過率 : 0 - 1.0
1.0 を超えるとエラーになる
* object.isVisible
* object.xScale
* object.yScale
* object.contentWidth
* object.contentHeight
画像の位置の基準点に関してはobject:setReferencePoint(display.TopLeftReferencePoint)とかobject.xReference / yReferenceなどで変えれるですよー
返信削除DroidFallのモチーフはいいですね、さすがです。進化が楽しみです。
返信削除デフォルトが真ん中ってだけなんですね。 > 画像の位置の基準点
返信削除なれると真ん中の方が楽かも。