最近才开始接触cocostudio,主要是用来做UI。不想过多吐槽了,只想说一点,备受推崇、重金研发的一个编辑器还比不上Unity中的一个插件。之前我感觉NGUI很难用,但那是跟DF GUI相比,现在感觉NGUI实在是太方便、太强大了。 1、基础使用: 在CocoStudio中编辑
最近才开始接触cocostudio,主要是用来做UI。不想过多吐槽了,只想说一点,备受推崇、重金研发的一个编辑器还比不上Unity中的一个插件。之前我感觉NGUI很难用,但那是跟DF GUI相比,现在感觉NGUI实在是太方便、太强大了。
1、基础使用:
在CocoStudio中编辑界面,然后导出资源,导出后会有资源目录和csb文件。我们使用时直接加载这个csb文件就可以了。它是protobuffer序列化的,CocoStudio2.0版本暂不支持json格式。
lua加载代码:
local node = cc.CSLoader:createNode(file) -- TODO 貌似是全屏的 local panel = node:getChildByName(panel) -- 对话框panel
scene:addChild(node)
2、多分辨率处理:
cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(1280, 720, cc.ResolutionPolicy.FIXED_HEIGHT)
通过这个来设置设计分辨率,设计分辨率就是在制作UI和游戏内容时的默认分辨率,这个一旦决定下来就不会轻易动了。最后一个参数决定了实际屏幕分辨率不同时窗口的缩放。具体是SHOW_ALL还是NO_BORDER还是FIXED_HEIGHT看实际需求。事实上哪个都不能完美的解决我的实际问题。
一般来说,非全屏的UI可以不用关心多分辨率,里面的控件也不需要关心锚点,相对位置什么的,因为界面大小是固定的(无论是960x640还是1024x768界面都是那么大)。而一些需要全屏处理的UI内容就要特殊处理了,比如主界面。一般来说主界面的需求是左上角显示头像相关内容,右下角是一系列按钮,右上角也会有一系列按钮。这个时候在cocostudio中只用一个界面就显得力不从心了。 我的处理方法是把这些内容划分成三个panel,分别加载这三个panel,然后再根据对应的锚点关系把panel放置在争取的位置(比如锚点在右上角的,就把对应panel的anchor point设置成1,1,然后把它的坐标设置成winSize.width winSize.height)。
全屏拉伸的背景图片也需要特殊处理下,一般来说我们的需求是背景图片不变形的拉伸(保持高宽比),并铺满整个屏幕,不留黑边。
总结一下,感觉是这样子的,无法使用cocostudio完成整个ui系统的控制,界面的显示位置还是需要上层逻辑代码来控制。虽然不是非常麻烦,但是总归感觉是比较low的。当然,也可能是我没有掌握好对应技巧,欢迎批评指正。
3、Node:getChildByName是非递归的:
直接通过getChildByName是非递归的,无法直接通过一个rootNode来获取子控件。cocos2d-x v3.2提供了这样一个函数来解决这个问题:enumerateChildren。使用方法如下:
function util.ui.getControl(root, name) local control; root:enumerateChildren('//' .. name, function(ret) control = ret; return false; end); return control; end这个函数使用方式略显怪异,但是功能还是比较强大的,可以指定路径,也可以模糊查找,具体可以参考源代码中函数的注释
4、Panel默认是颜色填充的,而cocos2d-x v3.3版本貌似还是有bug,panel里面直接选择Fill为None,在实际游戏中依然会有填充色,必须要手动把Opacity的值设置为0才行。而CocoStudio和其自带的程序是没有这个问题的。
5、坐标设置可以是像素也可以是相对于父窗口的百分比
这个不算坑,估计原本他们也想用这套系统来替代锚点的布局系统。不过略显鸡肋,因为大多数对话框只需要配置好绝对的像素坐标就足够了,而当需要自动布局适应多分辨率的时候,这套百分比相对布局依然无法正常适配。也就是说正常的时候怎么都正常,不正常的时候怎么都不正常。
6、不提供打包功能了,导入资源的时候就需要打包好
这个也不算坑,本来统一化的打包就存在一些恶心的问题,比如背景图或一些比较大的图片不应该打包,但是也一并打包进来了。现在的方式更加自由。 我还没有尝试texture packer打包的兼容性,我猜想会存在这样的问题,我使用原始图片配置好的界面,当我换成plist后,所有的界面图片都要重新指定。 如果真是这样的话,也无法过于苛责,只不过显得不够人性化。
7、控件不够全,并且功能比较弱
当然,这些并不是说真的做不到,只不过需要额外写一些代码来处理。相比起来NGUI和DF GUI乃至Unity新推出的uGUI都比它强多了。
8、导入图片资源比较混乱
导入的图片资源一开始会散列在编辑器资源窗口中(资源可能来自不同的文件夹),然后可以拖动资源到我们编辑器中创建好的目标文件夹。这个操作会移动实际的文件。而如果我们一开始就把资源放在目标文件夹中就麻烦了。 与其这样,还不如像eclipse一样,按F5直接刷新资源,更近一步就是像Unity一样,自动检测文件变化。
导入图片资源时无法直接把图片拖到目标文件夹,必须要两步操作。
删除资源会重置控件中的图片属性到默认值,如果一不留神删了资源文件夹就over了,所有的控件都要重新指定一下图片内容。
9、拖动控件,改变其父节点的时候,坐标没有重新计算,导致一旦改变控件的父节点,控件就不知道飞哪里去了,必须要重新调整坐标。 据说Flash也这样,但是至少Unity不是这样,而且Unity操作起来非常方便。
10、点选控件很让人恼火,如果控件的遮挡关系一复杂,就很容易让人点到错误的控件。 Unity的NGUI虽然有的时候也不是很方便,但感觉还是方便一点点,而且它的属性值是可以通过拖动操作来微调的,这个要比只能填数值要方便多了。
11、精灵对应的是cc.Sprite,图片对应的是ccui.ImageView。ImageView维护的是一个九宫格图片(如果不勾选这个选项,图片可以正常显示,但是使用的依然是这个类)。理论上cc.Sprite效率要高一些。但是由于Sprite不是Widget,不支持addTouchEventListener方法。所以想要处理点击的话,就必须使用图片控件,并且要设置setTouchEnabled为true。
12、偶尔会因为某些bug,导致csd文件被清空。所以最好建立个svn或者git仓库,时常保存一下。否则万一中招就悲剧了。
13、UI动画的使用方式:
self.buttonPanelAnimation = cc.CSLoader:createTimeline("GUI.csb"); self.buttonPanel:runAction(self.buttonPanelAnimation); self.buttonPanelAnimation:gotoFrameAndPlay(0, 25, false);传入的文件就是GUI文件,动画制作的关键帧信息是保存在一起的。所以如果有多段动画的话,要分开帧段单独制作。比如菜单的收缩和展开就需要分两段动画来制作,播放的时候通过帧来控制播放哪段动画

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL是一個開源的關係型數據庫管理系統,適用於數據存儲、管理、查詢和安全。 1.它支持多種操作系統,廣泛應用於Web應用等領域。 2.通過客戶端-服務器架構和不同存儲引擎,MySQL高效處理數據。 3.基本用法包括創建數據庫和表,插入、查詢和更新數據。 4.高級用法涉及復雜查詢和存儲過程。 5.常見錯誤可通過EXPLAIN語句調試。 6.性能優化包括合理使用索引和優化查詢語句。

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

InnoDB的鎖機制包括共享鎖、排他鎖、意向鎖、記錄鎖、間隙鎖和下一個鍵鎖。 1.共享鎖允許事務讀取數據而不阻止其他事務讀取。 2.排他鎖阻止其他事務讀取和修改數據。 3.意向鎖優化鎖效率。 4.記錄鎖鎖定索引記錄。 5.間隙鎖鎖定索引記錄間隙。 6.下一個鍵鎖是記錄鎖和間隙鎖的組合,確保數據一致性。

MySQL查询性能不佳的原因主要包括没有使用索引、查询优化器选择错误的执行计划、表设计不合理、数据量过大和锁竞争。1.没有索引导致查询缓慢,添加索引后可显著提升性能。2.使用EXPLAIN命令可以分析查询计划,找出优化器错误。3.重构表结构和优化JOIN条件可改善表设计问题。4.数据量大时,采用分区和分表策略。5.高并发环境下,优化事务和锁策略可减少锁竞争。

在數據庫優化中,應根據查詢需求選擇索引策略:1.當查詢涉及多個列且條件順序固定時,使用複合索引;2.當查詢涉及多個列但條件順序不固定時,使用多個單列索引。複合索引適用於優化多列查詢,單列索引則適合單列查詢。

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境