1
2
3
4
5
|
// Sprite* sprite = Sprite::create(); sprite->setPosition(Vec2(100, 100)); this ->addChild(sprite); // |
1
2
3
4
5
|
// local sprite = cc.Sprite: create () sprite:setPosition(cc.p(100, 100)) self:addChild(sprite) // |
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
// local winSize = cc.Director:getInstance():getWinSize() -- 繼承Layer類 MenuLayer = class( "MenuLayer" , function () return cc.Layer: create () end ) -- 初始化函數 function MenuLayer:ctor() self. name = "hello" -- 成員變量 self. size = cc. size (0, 0) -- 成員變量 end -- 創建包含GameLayer的場景 function MenuLayer:createScene() local scene = cc.Scene: create () local layer = MenuLayer: create () scene:addChild(layer) return scene end -- 創建GameLayer層 function MenuLayer: create () local layer = MenuLayer.new() -- new() layer:init() -- init() return layer end -- 初始化 function MenuLayer:init() self:ShowUI() -- 添加界面元素(Sprite、Label等) self:addBtn() -- 添加菜單按鈕 self:addTouches() -- 添加多點觸摸 end -- 添加界面 function MenuLayer:ShowUI() -- 背景圖片Sprite local bg = cc.Sprite: create ( "HelloWorld.png" ) bg:setPosition(cc.p(0, 0)) -- 設置位置 bg:setAnchorPoint(0, 0) -- 設置錨點 self:addChild(bg) -- 添加子節點 -- 添加文字 self.label = cc.Label:createWithSystemFont( "debug" , "res/fonts/Marker Felt.ttf" ,30) self.label:setPosition(winSize.width/2, winSize.height/2) self:addChild(self.label) end -- 添加按鈕 function MenuLayer:addBtn() local menu local normal, hard -- 回調函數 -- tag 爲menuItem設置的標籤setTag ,menuItem爲相應對象 local function menuCallback(tag, menuItem) print( "menuItem: " .. tag) -- Lua中的輸出語句 end normal = cc.MenuItemImage: create ( "normal.png" , "normal.png" ) normal:setPosition(0, 120) normal:setTag(1) normal:registerScriptTapHandler(menuCallback) -- 按鈕事件 hard = cc.MenuItemImage: create ( "hard.png" , "hard.png" ) hard:setPosition(0, 20) hard:setTag(2) hard:registerScriptTapHandler(menuCallback) -- 按鈕事件 -- 創建菜單,最後不需要加NULL menu = cc.Menu: create (normal, hard) self:addChild(menu) end -- 多點觸摸 function MenuLayer:addTouches() local touch1, touch2 = cc.Touch, cc.Touch local function onTouchesBegan(touches, event) print( "Touches Began" ) touch1 = touches[1] -- 第一個觸點,下標從1開始 touch2 = touches[2] -- 第二個觸點 local pos1 = touch1:getLocation() -- 獲取觸點1的位置 local pos2 = touch2:getLocation() -- 獲取觸點2的位置 local delta = { x = pos2.x - pos1.x , y = pos2.y - pos1.y } print(delta.x .. " , " .. delta.y) -- 輸出log end local function onTouchesMoved(touches, event) print( "Touches Moved" ) end local function onTouchesEnded(touches, event) print( "Touches Ended" ) end -- 註冊多點觸摸 local dispatcher = cc.Director:getInstance():getEventDispatcher() local listener = cc.EventListenerTouchAllAtOnce: create () listener:registerScriptHandler(onTouchesBegan, cc.Handler.EVENT_TOUCHES_BEGAN) listener:registerScriptHandler(onTouchesMoved, cc.Handler.EVENT_TOUCHES_MOVED) listener:registerScriptHandler(onTouchesEnded, cc.Handler.EVENT_TOUCHES_ENDED) dispatcher:addEventListenerWithSceneGraphPriority(listener, self) end // |
1
2
3
|
// sprintf (str, "hero_%02d.png" , i) // |
1
2
3
|
// string.format( "hero_%02d.png" , i) // |
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
// -- ResolutionPolicy 屏幕適配(就這個比較奇葩。。。) -- 含義參見:http://shahdza.blog.51cto.com/2410787/1550089 cc.ResolutionPolicy.EXACT_FIT cc.ResolutionPolicy.FIXED_HEIGHT cc.ResolutionPolicy.FIXED_WIDTH cc.ResolutionPolicy.NO_BORDER cc.ResolutionPolicy.SHOW_ALL -- EventKeyboard::KeyCode 鍵盤按鍵枚舉類型(這個也比較奇葩。。。) -- 含義參見(鍵盤事件部分):http://shahdza.blog.51cto.com/2410787/1560222 -- 鍵盤按鍵比較多,所以就羅列一部分 cc.KeyCode.KEY_A cc.KeyCode.KEY_1 cc.KeyCode.KEY_F1 cc.KeyCode.KEY_SPACE cc.KeyCode.KEY_ALT cc.KeyCode.KEY_SHIFT -- Control::EventType 控件事件類型 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1543349 cc.CONTROL_EVENTTYPE_TOUCH_DOWN cc.CONTROL_EVENTTYPE_DRAG_INSIDE cc.CONTROL_EVENTTYPE_DRAG_OUTSIDE cc.CONTROL_EVENTTYPE_DRAG_ENTER cc.CONTROL_EVENTTYPE_DRAG_EXIT cc.CONTROL_EVENTTYPE_TOUCH_UP_INSIDE cc.CONTROL_EVENTTYPE_TOUCH_UP_OUTSIDE cc.CONTROL_EVENTTYPE_TOUCH_CANCEL cc.CONTROL_EVENTTYPE_VALUE_CHANGED -- Control::State 控件狀態 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1543349 cc.CONTROL_STATE_NORMAL cc.CONTROL_STATE_DISABLED cc.CONTROL_STATE_SELECTED cc.CONTROL_STATE_HIGH_LIGHTED -- EditBox::EditBoxInputMode 文本框虛擬鍵盤的編輯類型 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1544213 cc.EDITBOX_INPUT_MODE_ANY cc.EDITBOX_INPUT_MODE_URL cc.EDITBOX_INPUT_MODE_DECIMAL cc.EDITBOX_INPUT_MODE_NUMERIC cc.EDITBOX_INPUT_MODE_EMAILADDR cc.EDITBOX_INPUT_MODE_SINGLELINE cc.EDITBOX_INPUT_MODE_PHONENUMBER -- EditBox::EditBoxInputFlag 文本框文本類型 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1544213 cc.EDITBOX_INPUT_FLAG_PASSWORD cc.EDITBOX_INPUT_FLAG_SENSITIVE cc.EDITBOX_INPUT_FLAG_INITIAL_CAPS_WORD cc.EDITBOX_INPUT_FLAG_INITIAL_CAPS_SENTENCE cc.EDITBOX_INPUT_FLAG_INITIAL_CAPS_ALL_CHARACTERS -- EditBox::KeyboardReturnType 文本框虛擬鍵盤中return鍵顯示字符 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1544213 cc.KEYBOARD_RETURNTYPE_GO cc.KEYBOARD_RETURNTYPE_DONE cc.KEYBOARD_RETURNTYPE_SEND cc.KEYBOARD_RETURNTYPE_SEARCH cc.KEYBOARD_RETURNTYPE_DEFAULT -- ScrollView::Direction 滾動方向 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1544983 cc.SCROLLVIEW_DIRECTION_BOTH cc.SCROLLVIEW_DIRECTION_VERTICAL cc.SCROLLVIEW_DIRECTION_HORIZONTAL -- TableView::VerticalFillOrder 列表視圖排列方式 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1545383 cc.TABLEVIEW_FILL_TOPDOWN cc.TABLEVIEW_FILL_BOTTOMUP -- ProgressTimer::Type -- 含義參見:http://shahdza.blog.51cto.com/2410787/1546707 cc.PROGRESS_TIMER_TYPE_BAR cc.PROGRESS_TIMER_TYPE_RADIAL -- ParticleSystem::PositionType 粒子位置模式 -- 含義參見: cc.POSITION_TYPE_FREE cc.POSITION_TYPE_GROUPED cc.POSITION_TYPE_RELATIVE -- ParticleSystem::Mode 粒子發射器類型 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1547636 cc.PARTICLE_MODE_RADIUS cc.PARTICLE_MODE_GRAVITY -- TransitionScene::Orientation 場景切換方向 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1547977 cc.TRANSITION_ORIENTATION_UP_OVER cc.TRANSITION_ORIENTATION_DOWN_OVER cc.TRANSITION_ORIENTATION_LEFT_OVER cc.TRANSITION_ORIENTATION_RIGHT_OVER -- TextVAlignment 文本的垂直對其方式 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1560612 cc.VERTICAL_TEXT_ALIGNMENT_TOP cc.VERTICAL_TEXT_ALIGNMENT_BOTTOM cc.VERTICAL_TEXT_ALIGNMENT_CENTER -- TextHAlignment 文本的水平對其方式 -- 含義參見:http://shahdza.blog.51cto.com/2410787/1560612 cc.TEXT_ALIGNMENT_LEFT cc.TEXT_ALIGNMENT_RIGHT cc.TEXT_ALIGNMENT_CENTER // |
1
2
3
4
5
|
// -- hander : 執行的回調函數 -- value : 傳遞給回調函數的參數,必須爲一個table cc.CallFunc: create (hander, value) // |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// -- node : 執行動作的對象 -- tab : 傳過來的參數, 必須爲一個table local function callbackFunc(node, tab) node:setScale(2) print( "x=" .. tab.x .. ",y=" .. tab.y) end local sprite = cc.Sprite: create ( "normal.png" ) sprite:setPosition(winSize.width/2, winSize.height/2) self:addChild(sprite) -- CallFunc回調動作 local call = cc.CallFunc: create (callbackFunc, {x=1 , y=2} ) sprite:runAction(call) // |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// local scheduler, myupdate local timer = 0 local function update (dt) cclog( "update: " .. dt) -- 輸出log timer = timer + dt if timer >= 3 then -- 執行3秒取消定時器 -- self:unscheduleUpdate() -- 取消定時器 scheduler:unscheduleScriptEntry(myupdate) -- 取消定時器 end end -- 每幀執行一次update,優先級爲0 -- self:scheduleUpdateWithPriorityLua(update, 0); -- 每30/60秒執行一次update,會無限執行 scheduler = cc.Director:getInstance():getScheduler() myupdate = scheduler:scheduleScriptFunc( update , 30.0 / 60.0, false ) // |
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
|
// local menu local normal, hard -- tag : 爲menuItem設置的標籤setTag -- menuItem : 執行回調的menuItem對象 local function menuCallback(tag, menuItem) print( "menuItem: " .. tag) end normal = cc.MenuItemImage: create ( "normal.png" , "normal.png" ) normal:setPosition(0, 120) normal:setTag(1) hard = cc.MenuItemImage: create ( "hard.png" , "hard.png" ) hard:setPosition(0, 20) hard:setTag(2) -- 創建菜單,最後不需要加NULL menu = cc.Menu: create (normal, hard) self:addChild(menu) -- 菜單項回調 normal:registerScriptTapHandler(menuCallback) -- 按鈕事件 hard:registerScriptTapHandler(menuCallback) -- 按鈕事件 // |
1
2
3
4
5
6
7
8
9
10
11
|
// cc.CONTROL_EVENTTYPE_TOUCH_DOWN -- 剛剛開始觸摸按鈕時 cc.CONTROL_EVENTTYPE_DRAG_INSIDE -- 在內部拖動時(保持觸摸狀態下) cc.CONTROL_EVENTTYPE_DRAG_OUTSIDE -- 在外部拖動時(保持觸摸狀態下) cc.CONTROL_EVENTTYPE_DRAG_ENTER -- 拖動剛進入內部時(保持觸摸狀態下) cc.CONTROL_EVENTTYPE_DRAG_EXIT -- 拖動剛離開內部時(保持觸摸狀態下) cc.CONTROL_EVENTTYPE_TOUCH_UP_INSIDE -- 在內部擡起手指(保持觸摸狀態下) cc.CONTROL_EVENTTYPE_TOUCH_UP_OUTSIDE -- 在外部擡起手指(保持觸摸狀態下) cc.CONTROL_EVENTTYPE_TOUCH_CANCEL -- 取消觸點時 cc.CONTROL_EVENTTYPE_VALUE_CHANGED -- 按鈕控件中值發生改變時 // |
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
|
// -- node : 執行回調的按鈕對象 -- type : 按鈕事件的類型 local function btnCallback(node, type) if type == cc.CONTROL_EVENTTYPE_TOUCH_DOWN then print( "touch down" ) elseif type == cc.CONTROL_EVENTTYPE_DRAG_INSIDE then print( "drag inside" ) elseif type == cc.CONTROL_EVENTTYPE_TOUCH_UP_INSIDE then print( "touch up inside" ) end end -- 添加一個按鈕 ControlButton local label = cc.Label:createWithSystemFont( "button" , "res/fonts/Marker Felt.ttf" ,30) local sprite = cc.Scale9Sprite: create ( "normal.png" ) local btn = cc.ControlButton: create (label,sprite) btn:setPosition(winSize.width/2, winSize.height/2) self:addChild(btn) -- 按鈕事件回調 btn:registerControlEventHandler(btnCallback,cc.CONTROL_EVENTTYPE_TOUCH_DOWN) btn:registerControlEventHandler(btnCallback,cc.CONTROL_EVENTTYPE_DRAG_INSIDE) btn:registerControlEventHandler(btnCallback,cc.CONTROL_EVENTTYPE_TOUCH_UP_INSIDE) // |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// -- 1.獲取事件分發器 : EventDispatcher local dispatcher = cc.Director:getInstance():getEventDispatcher() -- 2.創建事件監聽器 : EventListener (這裏以單點觸摸爲例) local listener = cc.EventListenerTouchOneByOne: create () -- 3.註冊事件響應函數: registerScriptHandler -- hander : 響應函數 -- type : 事件類型 listener:registerScriptHandler(hander, type) -- 4.在事件分發器中,添加監聽器。事件響應委託爲self dispatcher:addEventListenerWithSceneGraphPriority(listener, self) // |
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
|
// -- 觸摸開始 local function onTouchBegan(touch, event) print( "Touch Began" ) local pos = touch:getLocation() -- 獲取觸點的位置 print(pos.x .. " , " .. pos.y) -- 輸出log return true -- 必須返回true 後邊move end纔會被處理 end -- 觸摸移動 local function onTouchMoved(touch, event) print( "Touch Moved" ) end -- 觸摸結束 local function onTouchEnded(touch, event) print( "Touch Ended" ) end -- 註冊單點觸摸 local dispatcher = cc.Director:getInstance():getEventDispatcher() local listener = cc.EventListenerTouchOneByOne: create () listener:registerScriptHandler(onTouchBegan, cc.Handler.EVENT_TOUCH_BEGAN) listener:registerScriptHandler(onTouchMoved, cc.Handler.EVENT_TOUCH_MOVED) listener:registerScriptHandler(onTouchEnded, cc.Handler.EVENT_TOUCH_ENDED) dispatcher:addEventListenerWithSceneGraphPriority(listener, self) // |
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
|
// -- 觸摸開始 local function onTouchesBegan(touches, event) print( "Touches Began" ) local pos1 = touches[1]:getLocation() -- 獲取觸點1的位置 local pos2 = touches[2]:getLocation() -- 獲取觸點2的位置 local delta = { x = pos2.x - pos1.x , y = pos2.y - pos1.y } print(delta.x .. " , " .. delta.y) -- 輸出log end -- 觸摸移動 local function onTouchesMoved(touches, event) print( "Touches Moved" ) end -- 觸摸結束 local function onTouchesEnded(touches, event) print( "Touches Ended" ) end -- 註冊多點觸摸 local dispatcher = cc.Director:getInstance():getEventDispatcher() local listener = cc.EventListenerTouchAllAtOnce: create () listener:registerScriptHandler(onTouchesBegan, cc.Handler.EVENT_TOUCHES_BEGAN) listener:registerScriptHandler(onTouchesMoved, cc.Handler.EVENT_TOUCHES_MOVED) listener:registerScriptHandler(onTouchesEnded, cc.Handler.EVENT_TOUCHES_ENDED) dispatcher:addEventListenerWithSceneGraphPriority(listener, self) // |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
// local function onKeyPressed(keyCode, event) if keyCode == cc.KeyCode.KEY_A then print( "Pressed A !" ) -- 按下A鍵 end end local function onKeyReleased(keyCode, event) if keyCode == cc.KeyCode.KEY_J then print( "Released J !" ) -- 鬆開J鍵 end end -- 註冊鍵盤事件 local dispatcher = cc.Director:getInstance():getEventDispatcher() local listener = cc.EventListenerKeyboard: create () listener:registerScriptHandler(onKeyPressed, cc.Handler.EVENT_KEYBOARD_PRESSED) listener:registerScriptHandler(onKeyReleased, cc.Handler.EVENT_KEYBOARD_RELEASED) dispatcher:addEventListenerWithSceneGraphPriority(listener, self) // |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// -- 開啓設備的加速計感應 self:setAccelerometerEnabled( true ) -- 響應函數 local function onAccelerationEvent(event, x, y, z, timestamp ) print( "x: " .. x) print( "y: " .. y) print( "z: " .. z) print( "timestamp: " .. timestamp ) end -- 註冊加速計監聽器 local dispatcher = cc.Director:getInstance():getEventDispatcher() -- 直接傳入 響應函數 作爲參數 local listener = cc.EventListenerAcceleration: create (onAccelerationEvent) dispatcher:addEventListenerWithSceneGraphPriority(listener, self) // |
1
2
3
4
5
|
// cc.p(x, y) -- 構造 Vec2 cc. size (width, height) -- 構造 Size cc.rect(x, y, width, height) -- 構造 Rect // |
1
2
3
4
5
6
7
|
// -- 直線AB與直線CD是否相交 cc.pIsLineIntersect(pA, pB, pC, pD, float , float ) -- 線段AB與線段CD是否相交 cc.pIsSegmentIntersect(pA, pB, pC, pD) // |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// cc.pDot(p1, p2) -- 點積 cc.pCross(p1, p2) -- 叉積 cc.pProject(p1, p2) -- 投影: 前point在後point上的投影 cc.pGetLength(p) -- 向量長度 cc.pLengthSQ(p) -- 向量長度平方 cc.pGetDistance(p1, p2) -- 座標距離 cc.pDistanceSQ(p1, p2) -- 座標距離平方 cc.pGetAngle(p1, p2) -- 向量夾角:弧度 // |
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
|
// cc.p(x, y) -- 構造座標point cc.pAdd(p1, p2) -- 相加 cc.pSub(p1, p2) -- 相減 cc.pMidpoint(p1, p2) -- 兩向量的中點 cc.pNormalize(p1) -- 標準化向量 cc.pGetClampPoint(minp, maxp, p) -- 將p值限制在[minp,maxp]區間內 cc.pForAngle( float ) -- 返回座標 x=cos(a) , y=sin(a) cc.pPerp(p) -- 逆時針旋轉90度(-y, x) cc.RPerp(p) -- 順時針旋轉90度(y, -x) -- 繞p1向量旋轉 -- 返回向量: 角度 this.getAngle() +other.getAngle() -- 長度 this.getLength()*other.getLength() cc.pRotate(p1, p2) -- 繞p1向量旋轉前的向量值 -- 返回向量: 角度 this.getAngle() -other.getAngle(); -- 長度 this.getLength()*other.getLength(); cc.pUnrotate(p1, p2) -- 直線AB與直線CD的交點 cc.pGetIntersectPoint(pA, pB, pC, pD) // |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
// cc.rectGetMinX(rect) -- rect.x cc.rectGetMidX(rect) -- (rect.x + rect.width) / 2 cc.rectGetMaxX(rect) -- rect.x + rect.width cc.rectGetMinY(rect) -- rect.y cc.rectGetMidY(rect) -- (rect.y + rect.height) / 2 cc.rectGetMaxY(rect) -- rect.y + rect.height -- 判斷是否與rect相同. 原點相同,尺寸相同. cc.rectEqualToRect(rect1, rect2) -- 判斷point是否包含在矩形內 cc.rectContainsPoint(rect, point) -- 判斷矩形是否相交. 常常用作碰撞檢測. cc.rectIntersectsRect(rect1, rect2) -- 兩矩形合併 cc.rectUnion(rect1, rect2) // |
1
2
3
4
5
|
// cc.c3b(byte,byte,byte) -- 構造 Color3B cc.c4b(byte,byte,byte,byte) -- 構造 Color4B cc.c4f( float , float , float , float ) -- 構造 Color4F // |
1
2
3
4
5
6
|
// getPosition() -- 返回兩個值:x y getAnchorPoint() -- point_table getContentSize() -- size_table getBoundingBox() -- rect_table // |
1
2
3
4
5
6
7
|
// -- 方法一 : 用兩個變量接收 local x, y = sprite:getPosition() -- 方法二 : 轉換爲point_table local p = cc.p(sprite:getPosition()) // |
1
2
3
4
5
6
7
8
9
|
// tab = { x = 1 } function tab.fun(self) print(self.x) end a.fun(a) -- 需要將a本身做爲參數傳給fun函數 // |
1
2
3
4
5
6
7
8
9
|
// a = { x = 1 } function a:fun() print(self.x) end a:fun() // |