ARApplication
AR实例的类,用于场景的管理、渲染生命周期控制、全局的运行环境状态信息管理、其他的App级的操作等。
Public methods | |
---|---|
ARApplication | shared_application 获取ARApplication的实例 |
ARApplication | get_current_scene 获取当前场景 |
ARApplication | get_scene_by_name 通过场景名称获取场景 |
ARApplication | get_current_scene_name 通过场景名称获取场景 |
ARApplication | reset 将场景的姿态(rst)恢复到初始位置 |
ARApplication | relocate_current_scene 将场景的姿态(rst)恢复到初始位置 |
ARApplication | pause 将整个场景暂停,比如游戏中需要暂停的功能,暂停时会将整个场景隐藏 |
ARApplication | resume 将整个暂停中的场景恢复,比如游戏中需要的恢复功能 |
ARApplication | add_scene_from_json 从JSON文件中加载场景 |
ARApplication | destroy_scene_by_name 根据场景名称销毁场景(建议:用于项目情景中只出现1次的场景) |
ARApplication | active_scene_by_name 根据场景名称激活场景 |
ARApplication | open_url 在宿主app上打开一个url链接 |
ARApplication | call 打电话 |
ARApplication | vibrate 让手机振动 |
ARApplication | open_imu_service 开启imu |
ARApplication | close_imu_service 关闭imu |
ARApplication | get_platform_name 获取当前设备信息接口 |
ARApplication | get_engine_version 获取引擎版本号 |
ARApplication | get_screen_size 获取屏幕尺寸 |
ARApplication | switch_app_type 切换当前的业务类型 |
ARApplication | mirror_driven_data 设定业务驱动数据是否镜像使用 |
ARApplication | set_script_loading_finish_handler 注册当前实例加载完成后的响应回调 |
ARApplication | Key-Value Coding KVC支持 |
ARApplication | Key-Value Observing KVO支持 |
shared_application
ARApplication shared_application();
获取ARApplication的实例
sample code:
local application = ae.ARApplication:shared_application()
get_current_scene
ARScene get_current_scene();
获取当前场景
sample code:
local scene = application:get_current_scene()
get_scene_by_name
ARScene get_scene_by_name(string name);
通过场景名称获取场景
Parameters
- name | string : scene的名称
sample code:
local scene = application:get_scene_by_name("demo_scene")
get_current_scene_name
string get_current_scene_name();
通过场景名称获取场景
sample code:
local application = ae.ARApplication:shared_application()
local name = application:get_current_scene_name()
reset
void reset();
将场景的姿态(rst)恢复到初始位置
sample code:
local application = ae.ARApplication:shared_application()
application:reset()
relocate_current_scene
void relocate_current_scene();
将场景的姿态(rst)恢复到初始位置
sample code:
local application = ae.ARApplication:shared_application()
application:relocate_current_scene()
pause
version 190
void pause();
将整个场景暂停,比如游戏中需要暂停的功能,暂停时会将整个场景隐藏
sample code:
local application = ae.ARApplication:shared_application()
application:pause()
resume
version 190
void resume();
将整个暂停中的场景恢复,比如游戏中需要的恢复功能
sample code:
local application = ae.ARApplication:shared_application()
application:resume()
add_scene_from_json
void add_scene_from_json (string path, string scene_name, string common_config_path)
从JSON文件中加载场景
Parameters
- path | string : 描述场景的json文件路径
- scene_name | string : 指定当前场景名称
- common_config_path | string : 如果common文件为空,默认为common_config.json
sample:
app:add_scene_from_json("res/simple_scene.json", "demo_scene", "common_config.json")
destroy_scene_by_name
void destroy_scene_by_name (string scene_name)
根据场景名称销毁场景(建议:用于项目情景中只出现1次的场景)
Parameters
- scene_name | string : 需要销毁场景的名称
sample:
app:destroy_scene_by_name("demo_scene")
active_scene_by_name
void active_scene_by_name (string scene_name)
根据场景名称激活场景
Parameters
- scene_name | string : 需要激活场景的名称
sample:
app:active_scene_by_name("demo_scene")
open_url
version 190
void open_url (string url)
在宿主app上打开一个url链接(若打开链接出现白页面需检查链接格式如下:是否添加协议头http:// 或https:// ,未添加协议头需补上;定制链接无法打开,需在链接后补问号,如下方示例,确保链接拼接的完整性)
Parameters
- url | string : string类型
sample:
正确: app:open_url('http://www.baidu.com?x=123')
正确: app:open_url('http://www.baidu.com?')
正确: app:open_url('https://www.baidu.com?x=123')
错误: app:open_url('http://www.baidu.com')
错误: app:open_url('www.baidu.com?x=1')
call
void call (string number)
打电话
Parameters
- number | string : 需要拨打的电话号码
sample:
app:call("10086")
vibrate
void vibrate (int type, int interval, string pattern)
让手机振动
Parameters
- type | int : 0或1。 0:使用固定间隔;1:使用数组描述的振动间隔
- interval | int : 立即振动时间
- pattern | string : 间隔振动参数。例如:"200,400",200代表间隔时间,400代表振动时间
sample:
app:vibrate(1,10000,"200,400,600,800,600,1000,4000,400,600,800,600,1000,4000")
open_imu_service
void open_imu_service (int type, int init_pos)
开启imu,陀螺仪,用于通过陀螺仪控制相机的场景中,比如请财神case
Parameters
- type | int: 0或者1。0:使用世界坐标系;1:use 使用手机坐标系
- init_pos | int : 0或者1。0:不使用;1:使用
sample:
application:open_imu_service(1,1)
close_imu_service
void close_imu_service ()
关闭imu
sample:
application:close_imu_service()
get_platform_name
void get_platform_name()
获取当前设备信息接口(可判断当前手机系统为iOS或者Android)
sample:
app:get_platform_name()
get_engine_version
void get_engine_version()
获取引擎版本号
sample:
app:get_engine_version()
get_screen_size
version 190
ARVec2 get_screen_size()
获取屏幕尺寸
Returen
- size | ARVec2 : 屏幕的宽高
sample:
local screen_size = app:get_screen_size()
switch_app_type
version 190
void switch_app_type (string type)
切换当前的业务类型
Parameters
- type | string : 业务类型的名称
sample:
app:switch_app_type("Slam")
mirror_driven_data
version 190
void mirror_driven_data (bool is_mirrored)
设定业务驱动数据是否镜像使用,目前用于前置摄像头时修正imu业务类型传感器数据
Parameters
- is_mirrored | bool : 是否镜像使用数据
sample:
app:mirror_driven_data(true)
set_script_loading_finish_handler
version 190
void set_script_loading_finish_handler(LUA_FUNCTION handler);
注册当前实例加载完成后的响应回调(调用application:reset()重置接口时此回调也会被调用)
Parameters
- handler | LUA_FUNCTION : 一个Lua原生的方法,作为加载完成的处理的回调
sample code:
function on_loading_finish()
ARLOG("The ar application finished loading scene")
end
application:set_script_loading_finish_handler(on_loading_finish)
KVC支持 (Key-Value Coding)
version 190
set_property
void set_property_bool(std::string &key, bool value);
void set_property_string(std::string &key, std::string value);
通过Key-Value的方式来设置Application的属性
Parameters
- key | string : 对应的要修改的property的名字
- value | int /bool/ float/ string/ ARVec2 : 要设置的值
当前版本可用的Key和对应的Value Type如下:
Key | Value Type | meaning | Default |
---|---|---|---|
name | string | application的名字 | 无 |
backface_culling | bool | 设置渲染是否开启背面剔除 | true |
示例:
sample code:
local app_controller = ARApplicationController:shared_instance()
local application = app_controller:add_application_with_name("my_ar_application")
application:set_property_bool("backface_culling", true)
get_property
void get_property_int(std::string &key) const;
void get_property_bool(std::string &key) const;
void get_property_float(std::string &key) const;
void get_property_string(std::string &key) const;
void get_property_vec2(std::string &key) const;
通过Key-Value的方式来获取Application的属性
Parameters
- key | string : 对应的要获取的property的名字
- value | int /bool/ float/ string/ ARVec2 : 用来获取值的对应类型的变量,value将会在get_property方法内部被赋值
当前版本可用的Key和对应的Value Type如下:
Key | Value Type | meaning | Default |
---|---|---|---|
name | string | application的名字 | 无 |
empty | bool | 是否是一个有效的application(加载失败时 empty = true) | 无 |
platform_name | string | 平台名称,如"android","iOS" | 无 |
version_string | string | 引擎版本号,如"1.3.0" | 无 |
screen_size | ARVec2 | 屏幕尺寸,如(750,1136) | 无 |
device_orientation | string | 当前设备朝向,取值为"portrait","portrait_upsidedown","landscape_right","landscape_left" | 无 |
foreground | bool | 当前设备是否在前台 | 无 |
backface_culling | bool | 设置渲染是否开启背面剔除 | true |
示例:
sample code:
local screen_size = application: get_property_vec2("screen_size")
KVO支持(Key-Value Observing)
version 190
add_observer_for_property
void add_observer_for_property(std::string &key, LUA_FUNCTION on_observer);
为指定的property设置观察者回调,当对应的property值发生改变时,会触发所注册的回调, 并将改变前和改变后的数据以参数形式传递到对应的回调函数中
Parameters
- key | string : 要设置监听的的property的名字
- on_observer | LUA_FUNCTION : 观察者回调,需要包含3个参数, key、old_value和new_value
sample code:
function on_observer(key, old_value, new_value)
ARLOG("property"..key.."changed from"..old_value.."to new value"..new_value)
end
application:add_observer_for_property("orientation", on_observer)
remove_observer_for_property
void remove_observer_for_property(std::string &key);
删除指定的property已设置的观察者回调,删除不存在的Observer或者重复删除将会被忽略
Parameters
- string | key: 要删除监听设置的的property的名字
application:remove_observer_for_property("orientation")
废弃或不建议使用的接口( Deprecated API)
relocate_current_scene
void relocate_current_scene()
新版本中建议使用设置ARScene的对应节点的tranform为initial tranform来代替
set_on_loading_finish_handler
void set_on_loading_finish_handler(int handler_id);
新版本中请使用register_script_loading_finish_handler替代
set_on_landscape_left_handler
void set_on_landscape_left_handler(int handler_id)
新版本中请使用上述KVO的方式代替,注册"orientation" 的监听
set_on_landscape_right_handler
void set_on_landscape_right_handler(int handler_id)
新版本中请使用上述KVO的方式代替,注册"orientation" 的监听
set_on_portrait_handler
void set_on_portrait_handler(int handler_id);
新版本中请使用上述KVO的方式代替,注册"orientation" 的监听
set_camera_look_at
void set_camera_look_at(std::string& eye_pos, std::string& center_pos, std::string& up_direction, bool animated = true);
通过gl_look_at设置渲染相机的view_matrix, 新版本中请使用ARMat44 : create_look_at 和 ARCamera : set_view_matrix替代,动画效果推荐使用相机节点刚体动画
set_active_scene_camera_look_at
void set_active_scene_camera_look_at(std::string& eye_pos, std::string& center_pos, std::string& up_direction, bool animated = true);
同上,新版本中请使用ARMat44 : create_look_at 和 ARCamera : set_view_matrix替代
reset_active_scene_camera_look_at
void reset_active_scene_camera_look_at(bool animated = false);
用于重置渲染相机的view_matrix,新版本中可以使用ARCamera : set_view_matrix = ARMat44 :inverse (ARCamera : initial_transform)替代
set_gl_cull_face
void set_gl_cull_face(bool b_cull_face)
设置渲染开启背面剔除(全局)默认开启。新版本中请使用KVC的方式代替,application:set_property_bool("backface_culling", true / false)
get_lua_handler
LuaHandler* get_lua_handler();
新版本中LuaHandler已不再需要,消息发送和响应注册等api改由ARApplicationController提供
switch_camera_by_name
void switch_camera_by_name(std::string &camera_name, bool animated = false)
切换相机,该方法已移动到ARScene中
switch_to_scene_with_name
void switch_to_scene_with_name(std::string& scene_name);
由于加载场景可能比较耗时,切换时不流畅体验差,不建议使用。建议使用分步加载的方式代替
set_show_offscreen_button_handler
void set_show_offscreen_button_handler(int handler_id)
旧版本中设置场景中主体离开/进入屏幕时的回调。新版本中请通过KVO的方式,注册ARScene的"offscreen_guidance/current_state" 的监听来实现
set_hide_offscreen_button_handler
void set_hide_offscreen_button_handler(int handler_id)
旧版本中设置场景中主体进入屏幕时的回调。新版本中请通过KVO的方式,注册ARScene的"offscreen_guidance/current_state" 的监听来实现
play_bg_music
void play_bg_music(const std::string &path, int repeat_count = 0, float delay = 0);
播放背景音乐,新版本中请使用ARMusicPlayer中的功能替代
pause_bg_music
void pause_bg_music();
暂停播放背景音乐,新版本中请使用ARMusicPlayer中的功能替代
resume_bg_music
void resume_bg_music();
恢复播放背景音乐,新版本中请使用ARMusicPlayer中的功能替代
stop_bg_music
void stop_bg_music()
停止播放背景音乐,新版本中请使用ARMusicPlayer中的功能替代
reset_imu_location
void reset_imu_location(int with_interaction);
旧版本中对于IMU跟踪的场景,用于将场景的rootnote复位到屏幕中央。新版本中可以通过获取相机的transform,在脚本中计算rootnode的transform