급 Cocos2d-x의 처리를 Android와 iOS로 나누기 Lua와 Java/Objective-C간에 함수를 호출한다
목차
1 소개
2 Android와 iOS의 경우 처리를 분리
3 Lua에서 Java 또는 Objective-C API를 호출합니다.
4 Java 또는 Objective-C에서 Lua의 함수 호출
5 향후 예정
소개
본 기사는, cocos2d-x 및 Cocos Code IDE를 도입해, Android나 iPhone의 실기 단말로 움직인 사람으로, Android, iOS등의 플랫폼마다 처리를 나누고 싶은 사람을 위한, 각서입니다. 예를 들어 3rd 파티 랭킹 서비스와 결합하면 Android와 iOS에서 API가 다르며 Lua에서 직접 액세스 할 수없는 경우에 유용합니다.
Android 및 iOS에서 Lua 처리를 분기
GameScene.lua...
if cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_ANDROID then
-- Androidの場合の処理をここに書く
elseif cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPHONE or
cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPAD then
-- iOS(iPhone、iPad)の場合の処理をここに書く
end
...
Lua에서 Java 또는 Objective-C API를 호출합니다.
Cocos Code IDE
GameScene.lua...
--
self.point = 100
-- Androidの場合
if cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_ANDROID then
-- Lua->Javaブリッジのライブラリを読み込む
local luaj = require "src/cocos/cocos2d/luaj"
-- 呼び出す対象のJava関数が記述されているクラスを設定
local className = "org/cocos2dx/lua/AppActivity"
-- 対象のJava関数へ渡す引数データを設定
local args ={ self.point }
-- 呼び出すJava関数名を指定して、(I)整数型引数、V戻り値なしで呼び出す
luaj.callStaticMethod(className, "setScoreJava", args, '(I)V')
-- iOS(iPhone、iPad)の場合
elseif cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPHONE or
cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPAD then
-- Lua->Objective-Cブリッジのライブラリを読み込む
local luaoc = require "src/cocos/cocos2d/luaoc"
-- 対象のObjC関数へ渡す引数データを設定
local args = { score = self.point }
-- 呼び出すObjC関数名を指定して呼び出す
luaoc.callStaticMethod("AppController", "setScoreObjC", args )
end
...
(Lua →) Android Java
AppActivity.java...
import org.cocos2dx.lib.Cocos2dxLuaJavaBridge;
...
public class AppActivity extends Cocos2dxActivity{
...
public static void setScoreJava(final int type) {
//call 3rd party Ranking API here, but do not forget runOnUiThread IF running into UI thread
}
}
(Lua →) iOS ObjC
AppController.h...
// Cocos2dxからコールされる関数
+ (void)setScoreObjC:(NSDictionary *)dict;
...
AppController.mm...
+ (void)setScoreObjC:(NSDictionary *)dict{
if ([dict objectForKey:@"score"])
{
int input = [[dict objectForKey:@"score"] intValue];
//call 3rd party Ranking API here
}
}
...
Java 또는 Objective-C에서 Lua 함수를 호출합니다.
Cocos Code IDE
GameScene.lua...
-- Java/ObjCからカスタムイベントを使って呼び出される
local listener = cc.EventListenerCustom:create("callLuaFunc",
function(event)
...
end)
local eventDispatcher = layer:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)
...
-- Javaから呼び出されるグローバルなLua関数
function callLuaFunc(param)
local evt = cc.EventCustom:new("callLuaFunc")
cc.Director:getInstance():getEventDispatcher():dispatchEvent(evt)
end
return GameScene
Android Java(→Lua)
AppActivity.java// Java->Lua
Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString("callLuaFunc", "callLuaFunc");
iOS ObjC(→Lua)
AppController.mm// ObjC->Lua
cocos2d::Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("callLuaFunc");
향후 예정
미니 게임에서 사용할 수 있는 초기화, 게임 시작, 게임 오버, 재개 등 상태 변화의 구현에 대해 설명합니다.
Reference
이 문제에 관하여(급 Cocos2d-x의 처리를 Android와 iOS로 나누기 Lua와 Java/Objective-C간에 함수를 호출한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/CasualGameDev/items/e5856459a389e0870c1a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
본 기사는, cocos2d-x 및 Cocos Code IDE를 도입해, Android나 iPhone의 실기 단말로 움직인 사람으로, Android, iOS등의 플랫폼마다 처리를 나누고 싶은 사람을 위한, 각서입니다. 예를 들어 3rd 파티 랭킹 서비스와 결합하면 Android와 iOS에서 API가 다르며 Lua에서 직접 액세스 할 수없는 경우에 유용합니다.
Android 및 iOS에서 Lua 처리를 분기
GameScene.lua...
if cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_ANDROID then
-- Androidの場合の処理をここに書く
elseif cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPHONE or
cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPAD then
-- iOS(iPhone、iPad)の場合の処理をここに書く
end
...
Lua에서 Java 또는 Objective-C API를 호출합니다.
Cocos Code IDE
GameScene.lua...
--
self.point = 100
-- Androidの場合
if cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_ANDROID then
-- Lua->Javaブリッジのライブラリを読み込む
local luaj = require "src/cocos/cocos2d/luaj"
-- 呼び出す対象のJava関数が記述されているクラスを設定
local className = "org/cocos2dx/lua/AppActivity"
-- 対象のJava関数へ渡す引数データを設定
local args ={ self.point }
-- 呼び出すJava関数名を指定して、(I)整数型引数、V戻り値なしで呼び出す
luaj.callStaticMethod(className, "setScoreJava", args, '(I)V')
-- iOS(iPhone、iPad)の場合
elseif cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPHONE or
cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPAD then
-- Lua->Objective-Cブリッジのライブラリを読み込む
local luaoc = require "src/cocos/cocos2d/luaoc"
-- 対象のObjC関数へ渡す引数データを設定
local args = { score = self.point }
-- 呼び出すObjC関数名を指定して呼び出す
luaoc.callStaticMethod("AppController", "setScoreObjC", args )
end
...
(Lua →) Android Java
AppActivity.java...
import org.cocos2dx.lib.Cocos2dxLuaJavaBridge;
...
public class AppActivity extends Cocos2dxActivity{
...
public static void setScoreJava(final int type) {
//call 3rd party Ranking API here, but do not forget runOnUiThread IF running into UI thread
}
}
(Lua →) iOS ObjC
AppController.h...
// Cocos2dxからコールされる関数
+ (void)setScoreObjC:(NSDictionary *)dict;
...
AppController.mm...
+ (void)setScoreObjC:(NSDictionary *)dict{
if ([dict objectForKey:@"score"])
{
int input = [[dict objectForKey:@"score"] intValue];
//call 3rd party Ranking API here
}
}
...
Java 또는 Objective-C에서 Lua 함수를 호출합니다.
Cocos Code IDE
GameScene.lua...
-- Java/ObjCからカスタムイベントを使って呼び出される
local listener = cc.EventListenerCustom:create("callLuaFunc",
function(event)
...
end)
local eventDispatcher = layer:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)
...
-- Javaから呼び出されるグローバルなLua関数
function callLuaFunc(param)
local evt = cc.EventCustom:new("callLuaFunc")
cc.Director:getInstance():getEventDispatcher():dispatchEvent(evt)
end
return GameScene
Android Java(→Lua)
AppActivity.java// Java->Lua
Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString("callLuaFunc", "callLuaFunc");
iOS ObjC(→Lua)
AppController.mm// ObjC->Lua
cocos2d::Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("callLuaFunc");
향후 예정
미니 게임에서 사용할 수 있는 초기화, 게임 시작, 게임 오버, 재개 등 상태 변화의 구현에 대해 설명합니다.
Reference
이 문제에 관하여(급 Cocos2d-x의 처리를 Android와 iOS로 나누기 Lua와 Java/Objective-C간에 함수를 호출한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/CasualGameDev/items/e5856459a389e0870c1a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
...
if cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_ANDROID then
-- Androidの場合の処理をここに書く
elseif cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPHONE or
cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPAD then
-- iOS(iPhone、iPad)の場合の処理をここに書く
end
...
Cocos Code IDE
GameScene.lua
...
--
self.point = 100
-- Androidの場合
if cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_ANDROID then
-- Lua->Javaブリッジのライブラリを読み込む
local luaj = require "src/cocos/cocos2d/luaj"
-- 呼び出す対象のJava関数が記述されているクラスを設定
local className = "org/cocos2dx/lua/AppActivity"
-- 対象のJava関数へ渡す引数データを設定
local args ={ self.point }
-- 呼び出すJava関数名を指定して、(I)整数型引数、V戻り値なしで呼び出す
luaj.callStaticMethod(className, "setScoreJava", args, '(I)V')
-- iOS(iPhone、iPad)の場合
elseif cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPHONE or
cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_IPAD then
-- Lua->Objective-Cブリッジのライブラリを読み込む
local luaoc = require "src/cocos/cocos2d/luaoc"
-- 対象のObjC関数へ渡す引数データを設定
local args = { score = self.point }
-- 呼び出すObjC関数名を指定して呼び出す
luaoc.callStaticMethod("AppController", "setScoreObjC", args )
end
...
(Lua →) Android Java
AppActivity.java
...
import org.cocos2dx.lib.Cocos2dxLuaJavaBridge;
...
public class AppActivity extends Cocos2dxActivity{
...
public static void setScoreJava(final int type) {
//call 3rd party Ranking API here, but do not forget runOnUiThread IF running into UI thread
}
}
(Lua →) iOS ObjC
AppController.h
...
// Cocos2dxからコールされる関数
+ (void)setScoreObjC:(NSDictionary *)dict;
...
AppController.mm
...
+ (void)setScoreObjC:(NSDictionary *)dict{
if ([dict objectForKey:@"score"])
{
int input = [[dict objectForKey:@"score"] intValue];
//call 3rd party Ranking API here
}
}
...
Java 또는 Objective-C에서 Lua 함수를 호출합니다.
Cocos Code IDE
GameScene.lua...
-- Java/ObjCからカスタムイベントを使って呼び出される
local listener = cc.EventListenerCustom:create("callLuaFunc",
function(event)
...
end)
local eventDispatcher = layer:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)
...
-- Javaから呼び出されるグローバルなLua関数
function callLuaFunc(param)
local evt = cc.EventCustom:new("callLuaFunc")
cc.Director:getInstance():getEventDispatcher():dispatchEvent(evt)
end
return GameScene
Android Java(→Lua)
AppActivity.java// Java->Lua
Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString("callLuaFunc", "callLuaFunc");
iOS ObjC(→Lua)
AppController.mm// ObjC->Lua
cocos2d::Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("callLuaFunc");
향후 예정
미니 게임에서 사용할 수 있는 초기화, 게임 시작, 게임 오버, 재개 등 상태 변화의 구현에 대해 설명합니다.
Reference
이 문제에 관하여(급 Cocos2d-x의 처리를 Android와 iOS로 나누기 Lua와 Java/Objective-C간에 함수를 호출한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/CasualGameDev/items/e5856459a389e0870c1a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
...
-- Java/ObjCからカスタムイベントを使って呼び出される
local listener = cc.EventListenerCustom:create("callLuaFunc",
function(event)
...
end)
local eventDispatcher = layer:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)
...
-- Javaから呼び出されるグローバルなLua関数
function callLuaFunc(param)
local evt = cc.EventCustom:new("callLuaFunc")
cc.Director:getInstance():getEventDispatcher():dispatchEvent(evt)
end
return GameScene
// Java->Lua
Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString("callLuaFunc", "callLuaFunc");
// ObjC->Lua
cocos2d::Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("callLuaFunc");
미니 게임에서 사용할 수 있는 초기화, 게임 시작, 게임 오버, 재개 등 상태 변화의 구현에 대해 설명합니다.
Reference
이 문제에 관하여(급 Cocos2d-x의 처리를 Android와 iOS로 나누기 Lua와 Java/Objective-C간에 함수를 호출한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/CasualGameDev/items/e5856459a389e0870c1a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)