
ãæšæ¶ïŒ ããã«ãã®èŠåºãããaã³ããŸã-ç§ã¯ãã®äžã«å€ããäŒãããã£ãã®ã§ãããé·ãããŸããã
ã¹ããŒãªãŒã¯ãCorona SDKã䜿çšããŠäœæãããç§ã®ã²ãŒã ïŒ
iOS ã
Android ïŒãã¯ã©ãŠã³èªäœãšãã®éçºãã48æéã§ã²ãŒã ãæžããã³ã³ãã¹ããæè¿ã®DevConfããã³Goèšèªã«ã€ããŠã§ãã
ã¯ããã«
ç§ã¯é·ãéçå ã®ããã¿ã¯ãŒãã£ãã§ã³ã¹ã²ãŒã ãéçºããŠããŸããããã²ãŒã ãçã®é«å質ã«ãªãã«ã¯èšå€§ãªæéãèŠããé«å質ã®ã²ãŒã ã¯æåãžã®éã®ç¬¬1äœã§ãïŒç¬¬2äœã¯èª°ããããªããã°ããŒã±ãã£ã³ã°ã®ããã®å€§éã§ãã³ãŒã¹ïŒã ãããã£ãŠãç§ã¯é·ãéãå°ããªãã®ã§ã¯ããããç§ã®ãã®ã§ãããçæéã§äœããããããšæã£ãŠããŸããã
ã泚æã ãã¬ãã«ãïŒã
ã®ã°ãžã£ã 48
ãŸãã5æäžæ¬ã«ã¯ãå°ããªã¹ã¿ãžãªGlitch GamesãšCorona Labsã48æéã§ã²ãŒã ãéçºããããã®ã³ã³ãã¹ããéå¬ããŸãã Ludum Dareãšåæ§ãCorona SDKã®ã¿ã ç§ã¯ããºã«ãäœããã¢ã€ãã¢ãéçºãã2ã€ã®ã»ãšãã©ç ããªãå€ãäœãããã£ãã®ã§ãç§ã¯ã²ãŒã Laser Flow-Experiments with LasersãäœããŸããã ãã®åŸãåã«ã¬ãŒã¶ãŒå®éšãšãåŒã°ããŸããã ãã®ãããªã²ãŒã ã¯ã»ãšãã©ãªããç§ã®ãã®ã¯é©åãªå¶åŸ¡ãè²ã®æ··åãç¹åŸŽã§ãããç®ãšè³ã«å¿å°ããããšãé¡ã£ãŠããŸãã ç§èªèº«ãæ¬åœã«æ°ã«å
¥ã£ãŠããŸãã ãããã競äºã®çµæã«ãããšãæ®å¿µãªãããç§ã®æèŠã¯ju審å¡ã®æèŠãšäžèŽããŸããã åèšã§çŽ35人ã®åå è
ãã23ã®ã²ãŒã ããããŸããã
ã²ãŒã ã®ã¡ã€ã³ç»é¢ãäœæããŠã審æ»å¡ã«å°ãæéãäžããŸããã ã»ãšãã©ã®æéã¯ããã©ãŒããã®ã¬ãŒã¶ãŒã®åå°ãš1ã€ã®ã»ã«ãééããã¬ãŒã¶ãŒã®å
±åééã«é¢äžããã³ãŒãã«è²»ããããã®ã§ãã¬ãŒã¶ãŒã¯éãªãåãããäžç·ã«æ©ããŸãã ãããå®å
šã«åé¿ããããšã¯ã§ããŸããã§ããããçŸåšãããã€ãã®ã¬ãã«ã§ã¯ãç°ãªãã¬ãŒã¶ãŒããªãŒããŒã©ããããããã«ãã©ãŒãé
眮ããããšãå¯èœã§ãã ããã§ã²ãŒã å
šäœãæãªãããªãããšãé¡ã£ãŠããŸãã
ã²ãŒã ãéä¿¡ããåŸãçµæã®æ°ãŸããæåŸ
ãå§ãŸããŸããã æ¥ãéããããçµæã¯ãªãã£ãã ãã®åŸã審æ»å¡ãè©äŸ¡ããã®ã«æ°é±éããããšçºè¡šãããæŽåã¯#Corona IRCã«ãŒã ã§å§ãŸããŸãã...
倧å€ãªææã§ããã çµæã¯æçµçã«1ãæ以äžåŸ
ããªããã°ãªããŸããã§ããã
ã¡ãªã¿ã«ãããã¯ã²ãŒã ã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãã³ã³ãã¹ãã«éä¿¡ãããŠããã©ã®ããã«å€åãããã瀺ããŠããŸãã


DevConf 2013
5ææ«ã«ãDevConfãªãŒã¬ãã€ã¶ãŒããé£çµ¡ããããã¬ããŒãã³ã³ããžã®åå ãç³ãåºãŸããã Corona SDKãšGoã®2ã€ã®ãããã¯ãææ¡ããŸããã 圌ãã¯äž¡æ¹ã®å ±åãåããŸããããç§ã¯ãšãŠãåãã§ããŸãã ç¡æã®æ
è¡ãéšå±ãšé£äºã®ããã«ãããã®ããã®äž»å¬è
ã«æè¬ããŸãã
äŒè°çšã®ã²ãŒã ãçµäºããŠãªãªãŒã¹ããããã«å®äŸã«ã€ããŠè¬çŸ©ãã人ã
ãããŠã³ããŒãããŠãã¬ã€ã§ããããã«ããããšã¯çŽ æŽãããããšã ãšæããŸããã ãŸããå°ããªç«¶äºãèšç»ããŸãã-ä»ãããæ©ãç§å¯ã®ã¬ãã«ã決å®ããã²ãŒã ã®ããŽïŒã¢ã€ã³ã³ïŒãä»ããTã·ã£ããæã«å
¥ããŸããã ãããã第äžã«ãã·ã§ããã³ã°ãã°ã®ãããç§ã®ã¢ããªã±ãŒã·ã§ã³ã¯æåŠãããäŒè°ã®2æ¥ç®ã«ã®ã¿ãªãªãŒã¹ãããŸããã第äºã«ã圌ãã¯ç§ãå¿
èŠãšããè²ïŒç¹å¥ãªCMYKãããã¡ã€ã«ïŒã®Tã·ã£ããå°å·ã§ããŸããã§ããã ãšããã§ãTã·ã£ãã«20x20cmã®åçãå°å·ããã«ã¯ã1024x1024ãã¯ã»ã«ã§ååã§ãã
ã²ãŒã ãçµäºããã®ã«1ãæ以äžããããŸããã
ç§ã¯èªå®
ã§ã¬ããŒãçšã®ã¹ã©ã€ããäœæãå§ããé£è¡æ©ã«ä¹ãç¶ããããã«ã§ãã§ã«çµäºããŸããã ããªããiPadããã³Asus Eee Pc 701 4Gã§louboutaãšãšãã«äœ¿çšãããŸãã ã¿ããã¹ã¯ãªãŒã³ããã«ãŒãã¥ãŒã¹ãSDçšã®è¿œå ã¹ããããåãããã®ã ã¢ãã ãåãå€ãå¿
èŠããããŸããã ã¹ã©ã€ãèªäœã¯LibreOfficeã§äœæãããŸããã
ã²ãŒã ãåã³ã³ãã€ã«ããäºæããªããªãã€ã¬ã¯ãåŸã«App Storeã«éä¿¡ããããã®MacBookãæäŸããŠãããã«ãŒã ã¡ã€ãã®Pavelã«æè¬ããŸãã å¥åŠãªããšã«ãä»åã¯ã²ãŒã ãæ¿èªãããã®ã«ååã§ããã
äŒè°ã¯ééããªãèå³æ·±ããã®ã§ãããå€ãã®äººãããŠãããã€ãã®ã¬ããŒããéåžžã«å€ãã®ãªã¹ããŒãéããå
šå¡ã«ååãªæ€
åããããŸããã§ããã Mobiã»ã¯ã·ã§ã³ã¯å®éã«ã¯ããã»ã©äººæ°ãââãããŸããã§ããã
ç§ã®ã¬ããŒãã¯ã°ãªããäžã§æåŸã§ãããççŽã«èšã£ãŠãæ°äººã®ãªã¹ããŒãéããŸããã æéã®çµéãšãšãã«æ€èšŒããã埮åŠããããã€ãã®ãã¹ããã©ã¯ãã£ã¹ãããã³ãã³ãã瀺ãèšç®ãå«ãã¯ã©ãŠã³ã«é¢ããã¬ããŒããäœæããŸãããããã«ãããã¬ããŒãããµã€ãã®ã¡ã€ã³ããŒãžãšããã¥ã¡ã³ãã®ãã©ã€ãªããŒã«ã«ãªããªãããã«ãã¬ããŒããæ¬åœã«äŸ¿å©ã«ãããã£ãã®ã§ãã ãããããªã¹ããŒã®èª°ãçå ãã«ã¢ãç¥ããŸããã§ããã äºå®ã«è¿ãã¬ããŒããåæ§ç¯ããã¯ã©ãŠã³ãäœãã§ããã®ãã瀺ããLuaã«äœããã®çŽ¹ä»ãããªããã°ãªããŸããã§ããã
æããããªãããšã«ãå ã«ã€ããŠè©±ããŠããéãäŒè°ã®åæ¥ã¯çµãããŸããã Goã®ã¬ããŒãã¯ãŸã éå§ããŠããŸããã ç°¡åãªäžè«èª¿æ»ã§ã¯ãèŽè¡ã¯ãã®å ±åãåŸ
ã£ãŠããããšãããããããã«ã®1éã«é²ãããšã«ããŸããã ç§ãã¡ã¯ã»ãšãã©ããŸããã§ããã倧ç»é¢ã®ã©ãããããããããŸããïŒããããšãïŒïŒæ®å¿µãªããšã«ããããžã§ã¯ã¿ãŒã®ä»£ããã«ã誰ããå¿«é©ã«åº§ã£ãŠããããã§ã¯ãªãã誰ããæ®éã«èŠããããã§ã¯ãããŸãããã倧äžå€«ã§ãã ããŠã³ããŒããå¿
èŠãªãã¹ãŠã®äººã«ãã¹ã©ã€ãããµã€ãã«æçš¿ããŸããã è¬æŒã®åŸãGoã«ã€ããŠããã®å±æãç§ãã¡å
šå¡ãã©ã®ããã«æ°ã«å
¥ã£ãŠãããããããŠãã®èšèªã«é¢ããæ¬ããªã¹ããŒã®1人ã«èŽãããŸããïŒç§ããããïŒïŒ
2æ¥ç®ã«ã¯ãé«è² è·ã«é¢ããéåžžã«èå³æ·±ãã¬ããŒãããããŸããã
äŒè°ãããç§ã¯ãŸã ãDevConfã®ããŽãããŒãããã³ããããžãããã«ã®ããæ¯ãã©ã·ãå
¥ã£ãéçåžœãæã£ãŠããŸãã DevConfã®ãã¹ãŠã§ãã ãããã£ãã
ã¬ããŒãã®ã¹ã©ã€ãã¯ããµã€ãããããŠã³ããŒãã§ããŸãã ãããã¯ã®äžéšã«ãããªã³ã¯ã
ã³ããSDK
çå ã¯è¯ãã§ãã ããã¯ãã²ãŒã éçºãã¬ãŒã ã¯ãŒã¯ã䜿çšããã®ãæãç°¡åã§ãæè¿ç¡æçãååŸãããããæ
£ããã®ã«éåžžã«ãå§ãã§ãã PythonãšPHPãç¥ã£ãŠããã®ã§ãLuaãç¿åŸããã®ã«æ°æ¥ããããŸããããŸããèšèªãOOPãã³ããAPIã®äž»èŠéšåã®æŠå¿µã®ã»ãšãã©ãç解ããã®ã«1é±éããããŸããã
Luaã«ã¯äŸ¿å©ãªæ©èœããããŸããããšãã°ãè«çæŒç®ãæ©èœããæåŸã®èŠçŽ ãè¿ããŸããåæ§ã®æ§æãè¡ãããšãã§ããŸãããªããžã§ã¯ããååšããå Žåã¯ã¢ã¯ã»ã¹ããååšããªãå Žåã¯ããã©ã«ãå€ãæå®ããŸãã
local txt = a and a.text and a.text:lower() or 'default'
圌ãã¯ã³ãŒã«ããã¯ã䜿çšãããšãã«ãã°ãã°ééããç¯ããŸãã
local function myFunc() print('Nya') end timer.performWithDelay(1000, myFunc(), 1)
ãã®å Žåãé¢æ°ã¯ã¿ã€ããŒã«æž¡ããããå®è¡çµæïŒnilïŒã«æž¡ãããŸãã é¢æ°åã®åŸã®æ¬åŒ§ãåé€ããã ãã§ãã
äžåºŠãæå®ãããæéã®åŸã ãã§ãªããä»ããã«ã¿ã€ããŒãæ©èœãå®è¡ããããã«äŒããæ¹æ³ãIRCã«å°ããŸããã çã-ã¿ã€ããŒãäœæããã®ãšåãå Žæã®ã³ãŒãã§åŒã³åºããŠãã ããã
ããã«å€ãã®Luaã«ã¯ç ç³ãä»å±ããŠããŸãã
object.property -> object['property'] local function nya() -> local nya = function() object:method(params) -> object.method(object, params) someFunction{name = 'Someone'} -> someFunction({name = 'Someone'}) .
Luaã®OOP
OOPã¯ãã¡ã¿ã¡ãœããïŒPHPã®éæ³ã®ã¡ãœããã®é¡äŒŒç©ïŒã䜿çšããŠãæ¬äŒŒã¯ã©ã¹ã«åºã¥ããŠç·šæã§ããŸãã ãŸãã¯ãåçŽãªããŒãã«ã«åºã¥ããŠæ§ç¯ãããéåžžã«è¯ããããããŸããã ããã«ããã©ã€ããŒãã§ããããªãã¯ã§ããä¿è·ãããŠããŠããåé¡ãªãç·šæã§ããŸãã
OOPã³ãŒãã衚瀺空ã®ãªããžã§ã¯ãã䜿çšããæãç°¡åãªãªãã·ã§ã³ïŒ
local function newObject() local object = {} return object end local myObject = newObject()
ãããªãã¯å€æ°ãè¿œå ããŸãã
local function newObject() local object = {} object.somePublicVar = 100 return object end local myObject = newObject() print(myObject.somePublicVar)
次ã«ãã¡ãœãããè¿œå ããŸãã
local function newObject() local object = {} object.somePublicVar = 100 function object:setName(name) self.name = name end return object end local myObject = newObject() myObject:setName('Nyashka') print(myObject.name)
ã³ãã³ã®äœ¿çšã«æ³šæããŠãã ããã ãã®å Žåãç¹å¥ãªå€æ°selfãé¢æ°ã¡ãœããå
ã«è¡šç€ºãããŸããããã¯ããªããžã§ã¯ãèªäœãžã®åç
§ã§ãã ãã®ãããªã¡ãœããã¯ãã³ãã³ãŸãã¯1ã€ã®ãããã§åŒã³åºãå¿
èŠããããŸãããæåã®åŒæ°ãšããŠãªããžã§ã¯ããæå®ããŸãã
moneyãªã©ã®ãã©ã€ããŒãå€æ°ãè¿œå ããŸãã
local function newObject() local object = {} object.somePublicVar = 100 local money = 0 function object:setName(name) self.name = name end function object:addMoney(amount) money = money + amount end return object end local myObject = newObject() myObject:setName('Nyashka') myObject:addMoney(50) print(myObject.money)
ãã€ã³ããä»ããŠãéã«ã¢ã¯ã»ã¹ããããšãããšããã®å€æ°ã¯ããŒãã«ãªããžã§ã¯ãèªäœã§ã¯ãªãããã®ãªããžã§ã¯ããäœæããé¢æ°ã®ã¹ã³ãŒãå
ã«ãããããnilã«ãªããŸãã ãããã£ãŠããã®å€æ°ã¯addMoneyïŒïŒã¡ãœããã§è¡šç€ºãããŸãã
ç¶æ¿ïŒ
local function newObject() local object = {} object.somePublicVar = 100 local money = 0 function object:setName(name) self.name = name end function object:addMoney(amount) money = money + amount end return object end local function newChild() local object = newObject() return object end local myChild = newChild()
ãã®å Žåããªããžã§ã¯ãã¯ç©ºã®ããŒãã«{}ã«ãã£ãŠã§ã¯ãªããå¥ã®ããŒã¹ãªããžã§ã¯ãã«ãã£ãŠäœæãããŸãã ãããã£ãŠãnewChildé¢æ°ã§ã¯ããªããžã§ã¯ãã®ããããã£ãšã¡ãœãããè¿œå ããããããããåå®çŸ©ãããã§ããŸãã
Protectedã¯ããå°ãèå³æ·±ãå®è£
ã§ãã ãã¹ãŠã®ä¿è·ãããå€æ°ãé
眮ãããã©ã€ããŒãããŒãã«ãäœæããreturnãä»ããŠäœæããããªããžã§ã¯ããšäžç·ã«è¿ããŸãã çžç¶ã«ãã£ãŠãéã転éããããšããŸãã
local function newObject() local object = {} object.somePublicVar = 100 local protected = {money = 0} function object:setName(name) self.name = name end function object:addMoney(amount) protected.money = protected.money + amount end function object:getMoney() return protected.money end return object, protected end local function newChild() local object, protected = newObject() function object:spendMoney(amount) protected.money = protected.money - amount end return object end local myChild = newChild() myChild:addMoney(100) myChild:spendMoney(60) print(myChild:getMoney())
ã¡ãœããããªãŒããŒã©ã€ãããå¿
èŠãããå Žåã¯ããŸã£ããåãæ¹æ³ã§å®£èšãããŸãã æ°ãããã®ã¯å€ããã®ãæ¶å»ããŸãã ã©ãããŒãäœæããå¿
èŠãããå Žåãå€ãã¡ãœãããæåã«å€æ°ã«ä¿åããã次ã«æ°ããã¡ãœããããåŒã³åºãããŸãã
local function newObject() local object = {} object.somePublicVar = 100 local protected = {money = 0} function object:setName(name) self.name = name end function object:addMoney(amount) protected.money = protected.money + amount end function object:getMoney() return protected.money end return object, protected end local function newChild() local object, protected = newObject() function object:spendMoney(amount) protected.money = protected.money - amount end local parent_setName = object.setName function object:setName(name) name = 'Mr. ' .. name parent_setName(self, name) end return object end local myChild = newChild() myChild:setName('Nyashka') print(myChild.name)
ç»é¢ã«è¡šç€ºããããªããžã§ã¯ãã®å Žåãã°ã©ãã£ãã¯ãªããžã§ã¯ããè¿ãCorona SDK APIããé¢æ°ãåŒã³åºããŠãªããžã§ã¯ããäœæãããšãã«ã空ã®ããŒãã«{}ã眮ãæããã ãã§ååã§ãã display.newImageïŒïŒãdisplay.newRectïŒïŒããŸãã¯ã»ãšãã©ã®å Žådisplay.newGroupïŒïŒã°ã«ãŒãã䜿çšã§ããŸãã ã°ã«ãŒãã䜿çšããå Žåããã®ãããªãªããžã§ã¯ãã¯ä»ã®ã°ã©ãã£ãã¯èŠçŽ ã§éåžžã«ç°¡åã«å±éã§ããŸãã ãã ããã°ã«ãŒãã®æ°ãå€ããããšããã©ãŒãã³ã¹ãäœäžãããããã³ãŒãã®é床ãäœäžãå§ããå Žåã¯ãã§ããã ãã°ã«ãŒãã䜿çšããªãããã«ããŠãã ããã
ã¢ãžã¥ãŒã«ã¯ããŒãã«ã§ãããããªããžã§ã¯ãã§ããããŸãã OOPãšåãååã«åŸãããšãã§ããŸãã 以åã¯ãã¢ãžã¥ãŒã«ã¯ããŒã¯ãŒã/æ±çšã¢ãžã¥ãŒã«ïŒïŒã䜿çšããŠèšè¿°ãããŠããŸããã 圌女ã«ã¯äœæäžã®ã¢ãžã¥ãŒã«ã®ååãäžããããã¹ã¯ãªããç°å¢ãèªåã®ããŒã«ã«ã«çœ®ãæããããããããŒã«ã«ãã®æãæžãå¿
èŠããªãããã¹ãŠã®å€æ°ãšé¢æ°ã¯ãã®ããŒã«ã«ç©ºéã«çœ®ãããŸããã ãããŠããã¹ãŠãããŸããããŸãããåæã«ã¢ãžã¥ãŒã«å
ã§ã¯ãå°å·ãªã©ã®ã°ããŒãã«æ©èœã«ã¢ã¯ã»ã¹ã§ããŸããã§ããã ãã®åŸã圌ãã¯ãã¢ãžã¥ãŒã«ïŒïŒé¢æ°ã®2çªç®ã®åŒæ°ãšããŠç¹å¥ãªé¢æ°ãè¿œå ãããšããã¹ãŠã®ã°ããŒãã«ãªãã®ãã©ãã«ãããïŒ_Gå
ïŒã§æ€çŽ¢ããããšããã¢ã€ãã¢ãæãã€ããŸããã ãã®ç¹å¥ãªé¢æ°package.seeallããããæ
åœããŸããã ããããå®éã«ã¯ããã¹ãŠã®ã°ããŒãã«é¢æ°ãšå€æ°ããã¹ãŠã®ã¢ãžã¥ãŒã«å
ã«è¡šç€ºãããã ãã§ãªããã¢ãžã¥ãŒã«ã¯ã¢ãžã¥ãŒã«é¢æ°ã«ãã£ãŠäœæãããã°ããŒãã«åå空éã«é
眮ãããŸãã ãridgeã æã®ãporã ã°ããŒãã«ã ãŒã³ããªããžã
ãµã³ãã«ã¢ãžã¥ãŒã«ãpastebinã§æ¿å
¥ããŸãïŒ
ã¢ãžã¥ãŒã«ããŒãã«ãäœæãããã³ãã«ã®ããå
容ãå
éšã«é
眮ããŸãã ãã¹ãŠã䟿å©ã§ããã¹ãŠãçŽ æŽãããã§ãã
ãã¡ã€ã«ã®æåŸã«ãå¿
ãreturn _Mãèšè¿°ããŸãã ããã§ãªãå Žåãã¢ãžã¥ãŒã«ã¯requireãä»ããŠããŒããããŸããã
Corona SDKã®ãã®ä»
3ã€ã®ããã...ã¯ãçŸåšã®é¢æ°ã®å¯å€åŒæ°ãªã¹ããæå³ããããšãç¥ã£ãŠããŸããïŒ ããã«ãããã©ãããŒãŸãã¯å€æ°é¢æ°ãç°¡åã«äœæã§ããŸãã
local function my_warning_print(...) print('Warning:', unpack(arg)) end
Luaã®é床ã¯Cã®çŽ20åé
ããªããŸããLuaJITã¯æ°åé
ãã ãã§ãããiOSã§ã®ãªã¢ã«ã¿ã€ã ã³ã³ãã€ã«ã¯çŠæ¢ãããŠããŸãã ãã«ã«ã«ã Androidã§ã³ã³ãã€ã«ã§ããŸãããã¯ã©ãŠã³ã§ã¯ããã¯å®è£
ãããŠããŸããã 幞ããªããšã«ãLuaãããã«ããã¯ã«ãªãããšã¯ã»ãšãã©ãããŸããã éäžçãªèšç®ã®ã¿ã
éçºé床ã¯éåžžã«éèŠã§ãã ãããŠããã®ããã ãã«çå ãèš±ãããšãã§ããŸãã
ããŒã«ã«ã§ã¯ãªããã®ã¯ãã¹ãŠã°ããŒãã«ã§ãã 䟿å®äžãå€æ°ãããŒãã«ã«ä¿åããŸãã
ãµãŒãã¹ã®å¯èŠæ§ããŒãã«ã§å€æ°ãæ€çŽ¢ããã®ã«å€ãã®æéãè²»ããããŸãã ãŸããçŸåšã®ãããã¯ãŸãã¯é¢æ°ã®å¯èŠæ§ã次ã«ãã§ãŒã³ã_Gèªäœã«ç§»åããŸãã ããã¯ãã°ããŒãã«å€æ°ã®å Žåã«çºçããŸãã ãããã£ãŠã圌ãã¯é
ãã§ãã ç¹å®ã®å Žæã§ããã©ãŒãã³ã¹ãåäžãããããã«ããã¹ãŠã®å€æ°ãšé¢æ°ãããŒã«ã«ã«ãã£ãã·ã¥ããŸãã ããããç¡çãããªãã§ãã ããã ã»ãšãã©ã®ã³ãŒãã§ã¯ããã®ãããªãã£ãã·ã¥ã䜿çšããŠãé床ãç®ç«ã£ãŠåäžããããšã¯ãããŸããã éåžžã«é »ç¹ã«åŒã³åºãããå Žæã®ã¿ãæé©åããŸãã ç¡éã¿ã€ããŒå
ã®é¢æ°ããŸãã¯ãã¬ãŒã ããšã«åŒã³åºãããã€ãã³ããã³ãã©ãŒenterFrameãæå®ã§ããŸãã LuaãçŸåšã®ãã¬ãŒã ã®ãã¹ãŠã®ã³ãŒãã®åŠçãå®äºãããŸã§ãCoronaã¯ã¬ã³ãã©ãŒãèµ·åããŸããã ãã©ã¡ãŒã¿xãå€æŽããå Žåãé¢æ°å
ã§ç»é¢äžã®ç»åãäœåºŠãå€æŽãããšãæåŸã®å€ã®ã¿ãç»é¢ã«åæ ãããŸãã
math.randomãtable.insertãiparsãpairããã®ä»ã®çµã¿èŸŒã¿é¢æ°ãªã©ããã£ãã·ã¥ããŸãã
ã°ããŒãã«ãªå¯èŠæ§ã®åéã§ãã¿ãæšãŠãªãã§ãã ãããäœããå£ãããšãã§ããŸãã ãŸãã¯ãåã«ã¡ã¢ãªãªãŒã¯ãçºçããŸãã
_Gã«ãããã¹ãŠãåå®çŸ©ããããšã¯å¯èœã§ãããããã¯ç¢ºãã«æšå¥šãããŸããã ããã«ãããã®ãèŠãã«ã¯ããã®äžã«ããå°å·ç©ãèŠãŠãã ããã 衚瀺ãããå€æ°ãèŠããŠã決ããŠäœ¿çšããªãã§ãã ããã 決ããŠ_Gã«äœãå
¥ããªããšèšã人ãããŸãã ããããããã¯å€ãããŸãã ã¢ãžã¥ãŒã«ã®ããŒãã«ïŒåå空éãããšãã°ãappããªã©ïŒãæ§æããŸãã¯åã«çµã¿èŸŒã¿ã¢ãžã¥ãŒã«ã®ããã«ãåã·ãŒã³ã«å¿
èŠãªãã®ãããããæžããªããŠãããããã«ãããã€ãã®èŠçŽ ãèªåã§æã€ããšã¯ã°ããŒãã«ãªå¯èŠæ§ã«ãããŠéåžžã«æ®éã§ãã
ããã©ãŒãã³ã¹ã«ã€ããŠèãããšããFPSããã¯ã¹ãã£ã¡ã¢ãªãããã³Luaã¡ã¢ãªãç£èŠããããã®ã¢ãžã¥ãŒã«ãè¿œå ããŸãã ãã®ãããªã¢ãžã¥ãŒã«ã®è¿œå åŸåããŠã誰ããããã®ãããªã¡ã¢ãªãªãŒã¯ã¯ã©ãããæ¥ãã®ãããããã¯ã«é¥ããŸããã å®éãã¡ã¢ãªæ¶è²»ã®ã¹ã ãŒãºãªå¢å ã¯æšæºã§ããã1ç§ãããæ倧çŽ10kBã§ãã ã¬ããŒãžã³ã¬ã¯ã¿ãŒã次ã«åŒã³åºããããšãã¡ã¢ãªã¯æå°å€ã«æ»ããŸãã ã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯ãã¢ã«ãŽãªãºã ã«ç
©ããããå Žåã«æ§æã§ããŸãã ããšãã°ãèšç®ãé
ããªããªãããã«ãèšç®ã®å®äºåŸã«èªåã§å®è¡ããŸãã
å®éã®Luaã¡ã¢ãªãŒã¯ãæ°ã¡ã¬ãã€ããè¶
ããŸããã äž»ãªããªã¥ãŒã ã¯ãã¯ã¹ãã£ã§ãã ããããæé©åããããšãæãŸããã ãããªãããå
ã§ã¯ããã¹ãŠã®ãã¯ã¹ãã£ïŒä»»æã®ç»åãæå³ããïŒã¯2ã®çŽ¯ä¹ã§æŽåãããŸãã ãããã£ãŠãæè¯ã®çµæãåŸãã«ã¯ããã¡ã€ã«ã®2ã®ã¹ãä¹ãå³å®ããŠãã ããã
ã³ããã§ã¯ã1ç§ãããã®ãã¬ãŒã ã¬ãŒãã30ãŸãã¯60ã«èšå®ãããŠããŸããåžžã«60ã䜿çšããããã«ããŠãã ãããã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¿ãŒãã§ã€ã¹ãã¯ããã«æ»ããã§èŠããããªããŸãã
ãã¹ãŠãã¢ãã¡ãŒã·ã§ã³åããŸãã ã¢ããªã±ãŒã·ã§ã³ã®èšèšã§é©åãªã«ãŒã«ãé å®ããŠããå Žåããããå®çŸããã®ã¯éåžžã«ç°¡åã§ãã ãã¹ãŠã«ãªããžã§ã¯ãã䜿çšããŸãã å°ãªããšãã©ãããŒã¯ãnewImageãªã©ã®æšæºé¢æ°ã«å¯ŸããŠãæ©èœããŸãããã®å Žåããªããžã§ã¯ãã®ãžã§ãã¬ãŒã¿ãŒã§ã¢ãã¡ãŒã·ã§ã³ã1åè¿œå ããã ãã§ãã¢ããªã±ãŒã·ã§ã³å
šäœã«ããã«è¡šç€ºãããŸãã ãã ã圌ããšè¡ãéããªãã§ãã ããã ãŠãŒã¶ãŒãåŸ
ããããšããæå³ã§ã®èŒ»èŒ³ãŸãã¯æå¶ã¯ãã¢ããªã±ãŒã·ã§ã³ã®å
šäœçãªãšã¯ã¹ããªãšã³ã¹ã«æªåœ±é¿ãåãŒããŸãã
ãããæšæºã®newImageã®ã©ãããŒã§ãã ç»é¢äžã®äœçœ®ã1è¡ã§èšå®ããŠãã°ã«ãŒãã«è¿œå ã§ããŸãã
newImageãšäŸ¿å©ãªå°ããªãã®ãã©ãã local _M = {} _W = display.contentWidth _H = display.contentHeight _T = display.screenOriginY
pastebin.com/GWG3sJLZã®ç»é¢ãµã€ãºã«ã€ããŠããå°ã
ãŸããéåžžã«äŸ¿å©ãªsetRPé¢æ°ãå«ãŸããŠãããã¢ã³ã«ãŒãã€ã³ãã«é·ãå€ãæžã蟌ãå¿
èŠããããŸããã ãŸãããªããžã§ã¯ãã®è²ãååã§èšå®ããæ¹æ³ã
Androidã§æ»ããã¿ã³ããµããŒãããã«ã¯ãmain.luaã«æ¬¡ã®ã³ãŒããè¿œå ããã ãã§ã
Runtime:addEventListener('key', function (event) if event.keyName == 'back' and event.phase == 'down' then local scene = storyboard.getScene(storyboard.getCurrentSceneName()) if scene and type(scene.backPressed) == 'function' then return scene:backPressed() end end end);
ãããŠããã®ãã¿ã³ãžã®åå¿ãå¿
èŠãªåã·ãŒã³ã§ãé¢æ°ãå®çŸ©ããŸãïŒ
function scene:backPressed() storyboard.gotoScene('scenes.menu', 'slideRight', 200) return true end
ãçµäºããŸãããã€ã¢ãã°ããã¯ã¹ãè¿œå ããnative.requestExitïŒïŒãåŒã³åºãããšãå¿ããªãã§ãã ããïŒAndroidã®ã¿ãiOSã®å Žå-os.exitïŒïŒïŒã
ããã€ã¹ã®æçåã®ããã®config.luaäžèœè¬
åçã¹ã±ãŒãªã³ã°ã¯åé¡ãããŸããã ã»ãŒã
ã³ã³ãã³ãã¯çŸåšã®ç»é¢ãµã€ãºã«èª¿æŽãããã¢ããªã±ãŒã·ã§ã³ã®ä»®æ³éšåïŒéåžžã¯320x480ïŒãèŠããããã«ããä»»æã®2ã€ã®ç«¯ã«æ²¿ã£ãŠã¹ããŒã¹ãè¿œå ããŸãïŒã¬ã¿ãŒããã¯ã¹ïŒã ç»é¢ã®é
ãåŽé¢ã®äžå€®ãç»é¢å
šäœã®äžå€®ãªã©ãèŠçŽ ãé
眮ããŸãã ã¹ã±ãŒãªã³ã°ããå¿
èŠãããèŠçŽ ã䜿çšããªãããã«ããŠãã ããã ç°ãªãç»é¢ã§ã³ã³ãããŒã«ãå°ãå°ãããŸãã¯å€§ããèŠããå Žå-倧ããããšã¯ãããŸããã äž»ãªããšã¯ãããããååã«å€§ããããããšã§ãã ãã¿ã³ã«ã¯å°ãªããšã32ãã¯ã»ã«ã ããè¯ã64ãŸãã¯å°ãªããšã48ãã³ã³ãã³ãã®è§ããããç»é¢èªäœã®è§ããããŸããããã¯ãç»é¢ã®ä»®æ³é åãšå®éã®é åã®éãã§ãã
config.luaã§ã³ãŒããèšè¿°ã§ããããšãç¥ã£ãŠãã人ã¯ã»ãšãã©ããŸããã ã³ã³ãã³ãé åãåçã«å²ãåœãŠãããšãã§ããŸãã äœã®ããã«ïŒ ã»ãšãã©ã®ããã€ã¹ã§ãã¯ã»ã«å®ç§ãªã°ã©ãã£ãã¯ã¹ãå®çŸããŸãã ããããªããšãç»åãå°ããŒãããŠãå®ç§ãªå€èŠ³ã倱ãããŸãã
ãã¡ã€ã«ããµããã©ã«ãã«å
¥ããŸã-ã©ã€ãã©ãªçšã®ã©ã€ãã©ãªãã·ãŒã³çšã®ã·ãŒã³ãã¹ããŒãªãŒããŒããåççšã®ç»åããµãŠã³ãããããŠããããé³æ¥œã ãã¡ã€ã«ã·ã¹ãã ã§å€§æåãšå°æåãåºå¥ãããã¡ã€ã«ã®ããŠã³ããŒããé¿ããããããã¡ã€ã«ã«ã¯åžžã«å°æåã䜿çšããŠãã ããã
bitbucket.comã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ããã¯ã¢ãããšããŒãžã§ã³ç®¡çãè¡ããŸãã æ°äººã®ããŒã ã§æ§æããããã©ã€ããŒããããžã§ã¯ãã§ã¯ç¡æã§ãã
soundcloudãindiegamemusicãgoogleã§ã²ãŒã ã®é³æ¥œãæ€çŽ¢ã§ããŸãã Garabeãã³ããFrootyLoopsãAudacityãbfxrãå¿ããªãã§ãã ããã
8ãããã®ã·ã³ã»ãµã€ã¶ãŒãåããã¬ã¬ãŒãžãã³ãã§ã¯ãåªããã¢ãã³ãªãªãŒã«ãã¹ã¯ãŒã«ãµãŠã³ããåŸãããšãã§ããŸãã ãšãã§ã¯ããšã€ã³ã©ã€ã¶ãŒã䜿çšããŸãã
button._view._onReleasïŒïŒãä»ããŠãã¿ã³ãŠã£ãžã§ããã®onReleaseãåŒã³åºãããšãã§ããŸãã
æšæºæ©èœã«ã€ããŠã¯ãã©ã€ãã©ãªã泚ææ·±ãåç
§ããŠãã ããã çå ãiosïŒnative.showPopuïŒ 'twitter'ïŒïŒã®äžã§twitterã¯ã©ã€ã¢ã³ãããµããŒãããŠããããšãç¥ã£ãŠãã人ã¯ã»ãšãã©ããŸããã ãŸãã¯ãã¢ããªã±ãŒã·ã§ã³ããããŒã±ããããŒãžãçŽæ¥è¡šç€ºã§ããããšã
ãã«ãã¿ããã䜿çšãããšã2æ¬ã®æã§ãã¿ã³ã2åæŒãããšãã§ããŸãã é£ç¶ããŠäœåºŠãéå§ã§ããªãäœããçºçããå Žåã¯ããã¿ã³å
ã«ã¢ã¯ãã£ãåãããŠæŒããªããã©ã°ãèšå®ããŸãã
Flurryã䜿çšããŠãã²ãŒã ã®ã©ããæªãã®ããã©ã®ããã«æ¹åããã®ããç解ããããå€ãã®ãŠãŒã¶ãŒãæšå¥šããããã«ããŸãã
Corona SDKã®IDEãšããŠãZero Brane StudioãéžæããŸãããããã¯ãã¯ãã¹ãã©ãããã©ãŒã ã®Lua + wxWidgetsã§èšè¿°ããããã·ã¢èªã話ããªãŒãã³ãœãŒã¹ã®éçºè
ã§ãã ä»ã®IDEããããŸãããããã¯äžè¬çã«åªããŠããŸãã
è¡ã
ãã£ãããã ãã¹ãŠã«äœ¿çšããã
ç§ã¯ãã®äžã«å¥ã®ã²ãŒã ïŒæ³šæïŒã®ãµãŒããŒéšåãæžããŸããããæ¬åœã«æ°ã«å
¥ã£ãŠããŸãã éçºã®é床ãšå©äŸ¿æ§ã¯C / C ++ãããéããå®è¡é床ã¯ãããã«é
ããåãã§ãã çŸåšãèšèªã®åºç¯ãªã³ãã¥ããã£ããããããªãå€ãã®ç°ãªãã©ã€ãã©ãªãç»å ŽããŠããŸãã
ã¬ãŒã¶ãŒãããŒ
ã²ãŒã ã¯6æ15æ¥ã«App Storeã§ãªãªãŒã¹ãããŸããã ãã®æ¥ã¯ã3,000åã®ããŠã³ããŒããš10åã®è³Œå
¥ããããŸããã ããããã²ãŒã ã¯è€éãããŠãã²ãŒã ã®ãã¡ã³ã ãã®ããã«ãªã£ãã®ãããããŸããã
ã¬ãã«ãžã§ãã¬ãŒã¿ãŒãšã¬ãã«ãšãã£ã¿ãŒã«ã€ããŠã話ããŸãã ãœãªã¥ãŒã·ã§ã³æ€çŽ¢ã¢ã«ãŽãªãºã ãæžããŠããæ°æ¥ã殺ããŸããã ããŸããŸãªãœãŒãæ¡ä»¶ãç°ãªãçµäºæ¡ä»¶ããã¹ãŠã®ã³ãŒãæé©åãããã³LuaJITã䜿çšãããšãçµæã¯æ²æšãªãã®ã«ãªããŸãã-ã¬ãã«ã®è§£æ±ºã¯éåžžã«é
ãã§ãã æççµè·¯æ¢çŽ¢ã¢ã«ãŽãªãºã ã«åºã¥ããã¢ã«ãŽãªãºã ãéçºããå¿
èŠããããŸãããããã¯ç°¡åã§ã¯ãããŸããã 圌ã¯ãžã§ãã¬ãŒã¿ãŒãããã£ãŒã«ããžã§ãã¬ãŒã¿ãŒã®ã¿ãæ®ãããããã©ã³ãã ã®ã¢ãã¹ãšåŒã³ãŸããã
ãšãã£ã¿ãŒã¯ãã£ãšé¢çœãã§ãã ã²ãŒã èªäœã®å
éšã§ãããè¡ãããšãéžæããŸããããã³ã³ãããŒã«ã®äžäŸ¿ãããããŸã-ããããã®ãã¿ã³ãé
眮ããå Žæãææ¡ããå¿
èŠããããŸããé ãããã«ãäœæãããšãéåžžã«äžäŸ¿ã«ãªããŸãã å¥ã®ãªãã·ã§ã³ã¯ãåå¥ã®ãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ãäœæããããšã§ãã ããŒããŒãã®åãæã£ãŠããŸãããéçºã¯äºå®äžãŒãããã§ãã
æåŸã«ãç§ã¯çµåããããšã«ããŸããã Pythonäžã®Mac OSã®ããŒãã¬ãŒãšãçŸåšã¢ã¯ãã£ããªãŠã£ã³ããŠã決å®ããã¹ã¯ãªãããGoogleã§æ€çŽ¢ããŸããã ãããã£ãŠãã³ããã·ãã¥ã¬ãŒã¿ãçŸåšã¢ã¯ãã£ããªå Žåã¯ãUDPãä»ããŠãã¬ãŒã³ããã¹ãã§ããŒã¹ãããŒã¯ãéä¿¡ããŸãã ç§ãã¡ãçŽæ¥ç«¶æå Žã®ããã·ãŒã³ã«ããå ŽåãUDPãµãŒããŒã¯çå ã«äžãããã³ãã³ãããªãã¹ã³ããŸãã
ãã®çµæãåçŽãªããŒã¹ãããŒã¯ã§ããã£ãŒã«ãã«èŠçŽ ãè¿œå ãããããåçæããä¿åããã¬ãŒã¶ãŒã®è²ãå€æŽããã¿ãŒã²ããã»ã«ãé
眮ããããšãã§ããŸãã ãã¹ãŠãéåžžã«äŸ¿å©ã§ããã 1æ¥ã§140ã¬ãã«ã
ããã«3ã€ã®ããŒãã¹ã¬ãã«ãã²ãŒã èªäœã«é ããŠãããç°¡åã«èŠã€ããããšãã§ããŸãã
ããŒãã¬ãŒã³ãŒã from AppKit import NSWorkspace from Cocoa import * from Foundation import * from PyObjCTools import AppHelper import socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) class AppDelegate(NSObject): def applicationDidFinishLaunching_(self, aNotification): NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDownMask, handler) def handler(event): if NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName'] == 'Corona Simulator': s = unicode(event).split(' ') if s[8]: s = s[8][-2:-1] if (s >= 'a' and s <= 'z') or s == '`' or s == '[' or s == ']': sock.sendto(s, ('127.0.0.1', 5000)) def main(): app = NSApplication.sharedApplication() delegate = AppDelegate.alloc().init() NSApp().setDelegate_(delegate) AppHelper.runEventLoop() if __name__ == '__main__': main()
Luaã®ãµãŒããŒã³ãŒã local udp = socket.udp() udp:setsockname('127.0.0.1', 5000) udp:settimeout(0.001) local char, ip, port timer.performWithDelay(200, function () char, ip, port = udp:receivefrom() if char then local scene = storyboard.getScene(storyboard.getCurrentSceneName()) if type(scene.keyboardPressed) == 'function' then scene:keyboardPressed(char) end end end, 0)
åãååã䜿çšããŠãã²ãŒã ããçŽæ¥ã¹ã¯ãªãŒã³ã·ã§ãããä¿åãããã¿ã³ãäœæããŠãããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã¹ãã¢ã«ããŠã³ããŒãã§ããŸãã display.saveïŒïŒé¢æ°ã䜿çšããå¿
èŠããããŸãã
ããã§å
¬éããåã«ããã·ã¢èªã®ãµããŒããè¿œå ããæåã«ã¬ãã«ãç°¡åã«å©çšã§ããããã«ããåæãè¿œå ãããã¹ãŠã®ã¬ãã«ã®è³Œå
¥ãå²åŒããŠGoogle Playã«æçš¿ããŸããã
Corona SDKãšGoã®äž¡æ¹ã®IRCã§éä¿¡ããŸãã freenode.netïŒ#coronaããã³ïŒgo-nutsã
Goãã¬ã€ã€ãŒã¯ãèªåã®ãã£ã³ãã«ïŒ#goïŒã«ã¢ã¯ã»ã¹ããŠãããã°ã©ãã³ã°ã«é¢ãã質åãèªã¿èŸŒãã§ãããšéåžžã«æ°åã害ããŸãã
åç
§è³æ
ã¬ãŒã¶ãŒãããŒ
iOS
itunes.apple.com/us/app/laser-flow/id647540345?ls=1&mt=8Android
play.google.com/store/apps/details?id=com.spiralcodestudio.laserflowäŒè°ã¹ã©ã€ãïŒ
Corona SDK ã
Go Language ã
Corona SDK
coronalabs.comGoèšèª
golang.orgãæž
èŽããããšãããããŸããïŒ ã質åãããå Žåã¯ãã³ã¡ã³ãã§ãçãããŸãã
PMã«æ¥çš®ãšäžæ£ç¢ºããéããããé¡ãããŸãã