quick 中 "我的项目" 中的列表从那里来的?
quick 中 "我的项目" 中的列表从那里来的?
1. WelcomeScene.lua 场景
self:createOpenRecents(cc.player.settings.PLAYER_OPEN_RECENTS, node)
-- 我的项目recents = cc.player.settings.PLAYER_OPEN_RECENTS
function WelcomeScene:createOpenRecents(recents, node)
-- 创建列表
local localProjectListView = require("app.scenes.ListViewEx").new {}
-- add items 添加列表项
for i,v in ipairs(recents) do
local container = self:createListItem("#Logo.png", v.title, v.title)
local item = localProjectListView:newItem()
end
localProjectListView:reload()
end
2. cc.player.settings.PLAYER_OPEN_RECENTS
上面这个东西在 player.lua 文件中, 每次打开quick模拟器时,都会执行这个文件
C++ 代码
- (void) loadLuaConfig
{
//
// set user home dir
//
lua_pushstring(pEngine->getLuaStack()->getLuaState(), path.UTF8String);
lua_setglobal(pEngine->getLuaStack()->getLuaState(), "__USER_HOME__");
//
// load player.lua file
//
string playerCoreFilePath = _project.getQuickCocos2dxRootPath() + "quick/welcome/src/player.lua";
pEngine->executeScriptFile(playerCoreFilePath.c_str());
}
player.lua 文件
function player:init()
self.defaultSettings = [[
PLAYER_WINDOW_WIDTH = 960,
PLAYER_WINDOW_HEIGHT = 640,
PLAYER_OPEN_LAST_PROJECT = true,
PLAYER_OPEN_RECENTS ={ //这里是上面的默认值,为空table
},
]]
self:readSettings()
end
//重点在这里,self.configFilePath = player.userHomeDir .. ".quick_player.lua"
//这个就是配置文件,文件名是~/.quick_player.lua,如果没有这个文件,就使用默认配置,
//如果有这个文件就读取文件的保存的配置
function player:readSettings()
self.userHomeDir = __USER_HOME__
self.configFilePath = player.userHomeDir .. ".quick_player.lua"
-- do not use cc.FileUtils:getInstance():isFileExist
-- "__USER_HOME__" is ANSI encoding, while cocos engine use UTF8.
if not self:isFileExist(player.configFilePath) then
self:restorDefaultSettings()
end
self:loadSetting(player.configFilePath)
end
function player:loadSetting(fileName)
local file, err = io.open(fileName, "rb")
if err then return err end
local data = file:read("*all")
local func = loadstring("local settings = {" .. data .. "} return settings")
self.settings = func()
//这里就是我们最上面所使用的table
self.settings.PLAYER_OPEN_RECENTS = self.settings.PLAYER_OPEN_RECENTS or {}
file:close()
end
3. cc.player.settings.PLAYER_OPEN_RECENTS 使用
//打开按钮的事件处理, WelcomScene.lua
cc.ui.UIPushButton.new(images, {scale9 = true})
:setButtonSize(buttonWidth, buttonHeight)
:setButtonLabel("normal", cc.ui.UILabel.new({
text = "打开",
size = 18,
}))
:onButtonClicked(function()
local projectConfig = ProjectConfig:new()
local argumentVector = vector_string_:new_local()
local index = self.localProjectListView_:getCurrentIndex()
if index > 0 then
//这里使用了
local arguments = cc.player.settings.PLAYER_OPEN_RECENTS[index].args
for _,v in ipairs(arguments) do
argumentVector:push_back(v)
end
projectConfig:parseCommandLine(argumentVector)
//根据工程配置打开工程 PlayerProtocol:getInstance():openNewPlayerWithProjectConfig(projectConfig)
end
end)
4. cc.player.settings.PLAYER_OPEN_RECENTS 保存
我们打开一个示例,或者从我的项目中打开一个功能,那怎么加入到cc.player.settings.PLAYER_OPEN_RECENTS 里面的呢?上面我们分析了是这个列表是通过文件获取的,那相应的保存只要保存到那个文件中就行了
--
-- save player setting to ~/.quick_player.lua
--
local player = {}
function player:saveSetting(fileName)
fileName = fileName or player.configFilePath
local file, err = io.open(fileName, "wb")
if err then return err end
local ret = table.serializeToString(self.settings)
file:write(ret)
file:close()
end
但是保存在那里调用的呢?其实是在每次打开工程的时候调用的,也就是我们每次打开一个工程的时候
,就会保存到打开过的工程列表中
function player:init()
-- record project 记录打开的工程,也就是保存到~/.quick_player.lua文件中
// 这里就是把打开的工程保存到文件中, 那__PLAYER_OPEN_TITLE__和__PLAYER_OPEN_COMMAND__从那里来的呢?这个是从C++ 传过来的
if __PLAYER_OPEN_TITLE__ and __PLAYER_OPEN_COMMAND__ then
local title = string.gsub(__PLAYER_OPEN_TITLE__, '\\', '/')
local args = string.gsub(__PLAYER_OPEN_COMMAND__, '\\', '/'):splitBySep(' ')
self.projectConfig_ = ProjectConfig:new()
local argumentVector = vector_string_:new_local()
local arguments = args
for _,v in ipairs(arguments) do
argumentVector:push_back(v)
end
self.projectConfig_:parseCommandLine(argumentVector)
//self:openProject里面调用self:saveSetting()保存新打开的工程到
//工程列表中
self:openProject(title, args)
end
self:buildUI()
end
上面的self:openProject方法
--
-- title: string
-- args : table
--
function player:openProject( title, args )
local welcomeTitle = self.quickRootPath .. "quick/welcome/"
if title == welcomeTitle then return end
local recents = self.settings.PLAYER_OPEN_RECENTS
if recents then
//去掉重复的,通过title相同判断,并把新打开的工程放到第一个位置
local index = #recents
while index > 0 do
local v = recents[index]
if v.title == title then table.remove(recents, index) end
index = index - 1
end
table.insert(recents, 1, {title=title, args=args})
self:saveSetting()
end
end
__PLAYER_OPEN_TITLE__和__PLAYER_OPEN_COMMAND__从那里来的呢?这个是从C++ 传过来的,下面就是C++部分的代码
AppController.mm文件
- (void) loadLuaConfig 函数中:
//
// ugly: Add the opening project to the "Open Recents" list
//
lua_pushstring(pEngine->getLuaStack()->getLuaState(), _project.getProjectDir().c_str());
lua_setglobal(pEngine->getLuaStack()->getLuaState(), "__PLAYER_OPEN_TITLE__");
lua_pushstring(pEngine->getLuaStack()->getLuaState(), _project.makeCommandLine().c_str());
lua_setglobal(pEngine->getLuaStack()->getLuaState(), "__PLAYER_OPEN_COMMAND__");
quick 中 "我的项目" 中的列表从那里来的?的更多相关文章
- 【poi】用POI新建一个xlsx文件【或者说将数据存入到xlsx中】/【将数据从xlsx中获取到项目中】
第一部分:写入xlsx中 使用POI创建一个xlsx文件: 项目结构如下: 具体使用的POI中的 XSSFWorkbook xlsx对象 Sheet 工作簿对象 Row 行对象 Cell 单元格 ...
- 在WebStorm环境中给nodejs项目中添加packages
照前文 http://www.cnblogs.com/wtang/articles/4133820.html 给电脑设置了WebStorm的IDE的nodejs开发环境.新建了个express的网站 ...
- 【Atom】在一个中/大型项目中,那些好用而强大的atom功能
作为一个学生党,一开始使用atom时候并没有意识到atom一些小功能的巨大作用,直到自己实习参与了项目,才知道这些功能在一个项目中是能极大提高工作效率的开发利器 下面是一位不愿意透露其姓名的彭 ...
- [冲昏头脑]IDEA中的maven项目中学习log4j的日志操作
第一,你要有log4j的对应的包,由于我用的maven,所以直接在pom.xml文件依赖下载则可,如你尚为有此包,请自行百度下载导入,或上http://www.mvnrepository.com/搜索 ...
- Eclipse中在android项目中出现新建一个Activity后,出现整个project的报错以及包导入以后无法执行等等情况分析。
今天用Eclipse去写android项目,然后后面须要建一个Blank Activity后,非常正常的建立的.然后那个Activity是基于ActionBarAtivity,要导入v7,结果由于这 ...
- 在eclipse中创建Web项目中没有web.xml的解决方法
右键点击项目 → “Java EE Tool” → “Generate Deployment descriptor stub” 即可生成web.xml文件
- js中遍历删除数组中的项(项目中遇到的问题解决)
代码如下: for (var key=0;key<$scope.pageContent.messages.length;key++){ if($scope.pageContent.message ...
- 关于Maven中打包命令(项目中打补丁的时候用到)
打jar包的方式 mvn package -Dmaven.test.skip=true mvn install -Dmaven.test.skip=true ...
- 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架
一直准备写这么一篇有关 SSIS 日志系统的文章,但是发现很难一次写的很完整.因为这篇文章的内容可扩展的性太强,每多扩展一部分就意味着需要更多代码,示例和理论支撑.因此,我选择我觉得比较通用的 LOG ...
随机推荐
- MySQL各类型字段可定义最大宽度
今天浏览mysql的官网文档,无意中看到如图划线部分一句话,引起了我的兴趣,所以决定做实验官方所言. 条例1.创建数据表时,所有字段定义时"宽度之和"不得超过65535字节: 条例 ...
- 为什么改了JS数组中的一个元素的值,其他数组元素值都跟着变了
原因: 数组是引用类型,数组变量存储在栈,元素数据存储在堆中,将数组赋值不同的对象,所以的赋值对象都指向堆同一个数据,所以改变其中一个数组中的元素,别的数组元素也会改变. 解决方案: 原理就是先把数组 ...
- delegate里的Invoke和BeginInvoke
Invoke和BeginInvoke都是调用委托实体的方法,前者是同步调用,即它运行在主线程上,当Invode处理时间长时,会出现阻塞的情况,而BeginInvod是异步操作,它会从新开启一个线程,所 ...
- Java自学-I/O 缓存流
Java 缓存流BufferedReader,PrintWriter 以介质是硬盘为例,字节流和字符流的弊端: 在每一次读写的时候,都会访问硬盘. 如果读写的频率比较高的时候,其性能表现不佳. 为了解 ...
- ADO.NET 根据实体类自动生成添加修改语句仅限Oracle使用
话不多说直接上代码,新手上路,高手路过勿喷,请多多指教. /// <summary> /// 等于号 /// </summary> ) + Convert.ToChar() + ...
- 英语cowbezoar牛黄cowbezoar单词
牛黄(cowbezoar)是脊索动物门哺乳纲牛科动物牛胆囊的胆结石.在胆囊中产生的称“胆黄”或“蛋黄”,在胆管中产生的称“管黄”,在肝管中产生的称“肝黄”. 中文学名牛黄 拉丁学名Bos taurus ...
- set实现交集,并集,差集
let a = new Set([1, 2, 3]); let b = new Set([4, 3, 2]); // 并集 let union = new Set([...a, ...b]); // ...
- qtp安装和使用
QTP许可证密钥的破解步骤: 以前使用QTP9.2 使用此方法成功破解,现在本人使用的HP QuickTest Professional 11 英文版,也成功适用. 一.准备工作: 1. 由于注册码文 ...
- yaml格式配置文件
YAML 是一种可读性非常高,与程序语言数据结构非常接近.同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言. python中处理 Yaml 格式的数据需要先下载pyyaml: pip in ...
- pyTorch 基于以resnet50为backbone的PSPNet 训练VOC2012数据集
代码链接:https://github.com/ggyyzm/pytorch_segmentation 使用PSPNet作为主干分类网络 1.将VOC2012数据集下载并解压到data/VOCtrai ...