dig deeper, do different

2015-02-01
Pomelo开发环境搭建之 Docker

因为不想把当前的 osx 的环境弄得更复杂以及想实战一下docker,所以选择了在docker下搭建pomelo 的开发环境,大致的过程如下:

一. 安装

  1. 安装 VirtualBox
  2. 在 VirtualBox 安装 Ubuntu server
  3. 在 Ubuntu 下安装 docker
  4. 在 docker 下下载 Ubuntu image
  5. 运行 Ubuntu image,下载各种工具
  6. 根据文档安装 pomelo

二. 配置

  1. 在 VirtualBox 中映射 Ubuntu 到 OSX 的 ssh 端口
  2. 在 VirtualBox 中映射 Ubuntu 到 OSX 的 pomelo 需要的端口
  3. 在 docker 下映射 Ubuntu container 到 Ubuntu host 的 pomelo 需要的端口

三. 文件

  1. 在 VirtualBox 中设置 OSX 到 Ubuntu 的共享文件夹
  2. 在 docker 下把 Ubuntu host 中的共享文件夹映射到 Ubuntu container

四. 调试

  1. 安装node-inspector,并指定web-port和 debug-port
  2. 编辑 pomelo 的工程中的 servers.json,为需要调试的服务器指定调试端口
  3. 在 Chrome 中按照node-inspector 的提示打开调试的 url

五. 问题

  1. 安装 pomelo 的时候花了很多时间,有些包比如 heapdump 总是出错,后来发现是没有安装 make 和 g++等开发工具
  2. 在 container 中用命令创建 pomelo 工程后在 OSX 下无法保存,发现是因为权限的问题。一个方法是在 container 中把目录和文件都改成 other 可写,另一个方法是在 OSX 下把 container 中创建的工程复制一份,把原来的工程目录删除即可
  3. 服务器指定调试端口(3005)后一直没有办法连上,Chrome 中也看不到工程的文件,此时换一个调试端口即可
  4. 在 container 中需要运行 node-inspector、server、client 以及其他的命令,但是只有一个控制台,解决的办法一个是把命令运行到后台,另一个安装 tmux
Read More

2014-12-10
Quick-cocos2d-x 接入 protobuf

  1. 下载云风的 pbc:

    1
    git clone git@github.com:cloudwu/pbc.git

    把 pbc 下 src 目录复制到 quick 的 lua_extensions 目录下,并重命名为 pbc。

  2. 下载 lpeg,并同样复制到 lua_extensions 下
  3. 下载 struct,并同样复制到 lua_extensions 下
  4. 编辑 lua_extensions\lua_extensions[_more].c 文件,添加:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // protobuf
    #include "pbc/pbc-lua.h"
    // lpeg
    #include "lpeg/lptree.h"
    // struct
    #include "struct/struct.h"
    ... ... static luaL_Reg luax_exts[] = {
    ... ...
    {"lpeg", luaopen_lpeg},
    {"struct", luaopen_struct},
    {"protobuf.c", luaopen_protobuf_c},
    ... ...
  5. 把 pbc,lpeg,struct 目录加入到 xcode 的工程中。比如游戏工程或是 quick-player 的工程

  6. 编译项目。
Read More

2014-11-29
使用 Cocostudio 创建 listview item

为了快速开发一个小游戏,使用了 Cocostudio 2.0 作为 UI 编辑器。其实 Cocostudio 的功能比较弱,特别是针对稍微复杂一点的控件(Widget),无法做到所见即所得,不得不写一些代码。

游戏中用到了一个 listview,但是 Cocostudio2.0中没有 listview,所以只能写代码实现,这个是没有办法的。好在一个 listview 本身还是比较简单的,但是 listview 中的 item 可以很复杂,是否有办法简化呢?

尝试了很久之后,还真找到了一个迂回的方法,即:

  • 在 Cocostudio 中创建一个新的 Layer
  • 在 Layer 上编辑所需要的 item

这本来是一件比较简单的事情,但是问题在于 listview 的 item 只能是 widget,而 Cocostudio 2.0中 widget 有限,所以,尽量用 button 拼凑吧!

放出 listview 和 listitem 的 lua 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
local LISTVIEW_WIDTH = 340
local LISTVIEW_HEIGHT = 405
local listView = ccui.ListView:create()
-- set list view ex direction
listView:setDirection(ccui.ScrollViewDir.vertical)
listView:setBounceEnabled(true)
-- listView:setBackGroundImage("hall/di.png")
-- listView:setBackGroundImageScale9Enabled(true)
listView:setContentSize(cc.size(LISTVIEW_WIDTH, LISTVIEW_HEIGHT))
listView:setAnchorPoint(cc.p(0, 0))
listView:setPosition(cc.p(10, 12))
listView:addEventListener(listViewEvent)
-- SCISSOR
listView:setClippingType(1)
parent:addChild(listView)
local function createDefaultListItem()
local leaderboardItemLayer = cc.CSLoader:createNode("hall/LeaderboardItem.csb")
-- retrieve the widget. MUST be a widget
local listItemRoot = leaderboardItemLayer:getChildByTag(2001)
listItemRoot:removeFromParent()
local listItemRootSize = listItemRoot:getContentSize()
listItemRoot:setPosition(cc.p(LISTVIEW_WIDTH / 2.0, listItemRootSize.height / 2.0))
local default_item = ccui.Layout:create()
default_item:setTouchEnabled(true)
default_item:setContentSize(listItemRootSize)
default_item:addChild(listItemRoot)
return default_item
end
local default_item = createDefaultListItem()
listView:setItemModel(default_item)
for i = 1, 100 do
listView:pushBackDefaultItem()
end
-- set all items layout gravity
listView:setGravity(ccui.ListViewGravity.centerVertical)
--set items margin
listView:setItemsMargin(2.0)
Read More

2014-07-04
常用正则表达式符号

转意符号

pattern meaning
\ % 改变下一个字符的属性,让普通字符包含特殊含义或者相反

字符匹配模式

pattern meaning
. 匹配除「\n」之外的任何单个字符。
x\ y 匹配x或y
[xyz] 匹配所包含的任意一个字符
[^xyz] 匹配未列出的任意字符
[a-z] 字符范围。匹配指定范围内的任意字符。
[^a-z] 匹配任何不在指定范围内的任意字符
….. 其他特殊的 patterns

数量限定

pattern meaning
* 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次。
? 匹配前面的子表达式零次或一次。
{n} 匹配确定的n次。
{n,} 至少匹配n次
{n,m} 最少匹配n次且最多匹配m次

贪婪模式取消

pattern meaning
? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的

控制字符

pattern meaning
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置

分组模式

pattern meaning
(xyz) 分组
\n 对分组的引用
Read More

2013-09-26
'Keyboard backlight controller' Open Source

All the source code have been put into github:https://github.com/fantastxmw/kbLight

Hope you would like it!

Read More