閱讀本文之前遥巴,默認你已經(jīng)掌握cocosCreator的基本知識姻锁。
關(guān)于節(jié)點
節(jié)點在cocosCreator中是非常重要的肮雨,所以它的相關(guān)API至關(guān)重要体斩。
- 節(jié)點基本屬性
width
: 節(jié)點寬度梭稚。
height
: 節(jié)點高度。
name
: 節(jié)點名稱硕勿。
color
: 節(jié)點顏色哨毁。
opacity
: 節(jié)點透明度(0-255)。
position
: 節(jié)點在父節(jié)點坐標系中的位置源武。
x
: 節(jié)點 X 軸坐標(相當于父節(jié)點)扼褪。
y
: 節(jié)點 Y 軸坐標(相當于父節(jié)點)。
anchorX
: 節(jié)點 X 軸錨點位置(0-1之間)粱栖。
anchorY
: 節(jié)點 Y 軸錨點位置(0-1之間)话浇。
rotation
: 該節(jié)點旋轉(zhuǎn)角度。
scale
: 節(jié)點相對父節(jié)點的縮放闹究。
zIndex
: 決定一個節(jié)點在兄弟節(jié)點之間的位置幔崖。
active
: 當前節(jié)點的自身激活狀態(tài)。
parent
: 該節(jié)點的父節(jié)點渣淤。
children
: 節(jié)點的所有子節(jié)點赏寇。
可以直接對屬性賦值從而改變屬性的值。 - 節(jié)點基本方法
getContentSize
: 獲取節(jié)點原始大小价认,不受該節(jié)點是否被縮放或者旋轉(zhuǎn)的影響嗅定。
setContentSize
: 設(shè)置節(jié)點原始大小,不受該節(jié)點是否被縮放或者旋轉(zhuǎn)的影響用踩。
getPosition
: 獲取節(jié)點在父節(jié)點坐標系中的位置(x, y)渠退。
setPosition
: 設(shè)置節(jié)點在父節(jié)點坐標系中的位置。
getScale
: 獲取節(jié)點的縮放脐彩。
setScale
: 設(shè)置節(jié)點的縮放比例碎乃,默認值為 1.0。
getRotation
: 獲取該節(jié)點以局部坐標系 Z 軸為軸進行旋轉(zhuǎn)的角度惠奸。
setRotation
: 設(shè)置該節(jié)點以局部坐標系 Z 軸為軸進行旋轉(zhuǎn)的角度梅誓。
getBoundingBox
: 返回父節(jié)坐標系下的軸向?qū)R的包圍盒。
getBoundingBoxToWorld
: 返回節(jié)點在世界坐標系下的對齊軸向的包圍盒佛南。
convertToWorldSpace
: 將一個相對于節(jié)點左下角的坐標位置轉(zhuǎn)換到世界空間坐標系证九。
convertToWorldSpaceAR
: 將一個相對于節(jié)點錨點的坐標位置轉(zhuǎn)換到世界空間坐標系。
convertToNodeSpace
: 將一個點轉(zhuǎn)換到節(jié)點空間坐標系共虑,這個坐標系以節(jié)點左下角為原點愧怜。
convertToNodeSpaceAR
: 將一個點轉(zhuǎn)換到節(jié)點空間坐標系,這個坐標系以錨點為原點妈拌。 - 節(jié)點操作查找相關(guān)方法
getParent
: 獲取該節(jié)點的父節(jié)點拥坛。
setParent
: 設(shè)置該節(jié)點的父節(jié)點蓬蝶。
addChild
: 添加子節(jié)點。
insertChild
: 插入子節(jié)點到指定位置猜惋。
removeChild
: 移除節(jié)點中指定的子節(jié)點丸氛。
removeAllChild
: 移除節(jié)點所有的子節(jié)點。
removeFromParent
: 從父節(jié)點中刪除該節(jié)點著摔。
getChildByName
: 通過名稱獲取節(jié)點的子節(jié)點缓窜。
getComponent
: 獲取節(jié)點上指定類型的組件。
getComponents
: 返回節(jié)點上指定類型的所有組件谍咆。
addComponent
: 向節(jié)點添加一個指定類型的組件類禾锤。
removeComponent
: 刪除節(jié)點上的指定組件。 - 節(jié)點事件相關(guān)方法
on
: 在節(jié)點上注冊指定類型的回調(diào)函數(shù)摹察。
once
: 注冊節(jié)點的特定事件類型回調(diào)恩掷,回調(diào)會在第一時間被觸發(fā)后刪除自身。
off
: 刪除之前與同類型供嚎,回調(diào)黄娘,目標注冊的回調(diào)。
targetOff
: 移除目標上的所有注冊事件克滴。
emit
: 通過事件名發(fā)送自定義事件逼争。
dispatchEvent
: 分發(fā)事件到事件流中。
pauseSystemEvents
: 暫停當前節(jié)點上注冊的所有節(jié)點系統(tǒng)事件劝赔,節(jié)點系統(tǒng)事件包含觸摸和鼠標事件誓焦。
resumeSystemEvents
: 恢復(fù)當前節(jié)點上注冊的所有節(jié)點系統(tǒng)事件,節(jié)點系統(tǒng)事件包含觸摸和鼠標事件望忆。 - 節(jié)點動作相關(guān)方法
runAction
: 執(zhí)行并返回該執(zhí)行的動作罩阵。
stopAction
: 停止并移除指定的動作竿秆。
stopAllActions
: 停止并且移除所有正在運行的動作列表启摄。
pauseAllActions
: 暫停本節(jié)點上所有正在運行的動作。
resumeAllActions
: 恢復(fù)運行本節(jié)點上所有暫停的動作幽钢。 - 注意點
- 節(jié)點的width歉备,height代表節(jié)點原始大小(與getContentSize方法的結(jié)果一樣)匪燕,不受節(jié)點縮放旋轉(zhuǎn)的影響蕾羊。
- 節(jié)點旋轉(zhuǎn)后,自身的坐標系也會一起旋轉(zhuǎn)帽驯。所以一些轉(zhuǎn)換坐標的方法結(jié)果會有變化龟再。
- 一個空節(jié)點設(shè)置顏色是無效的,可以給空節(jié)點添加Sprite渲染組件尼变。
關(guān)于事件
Cocos Creator 支持的系統(tǒng)事件包含鼠標利凑、觸摸浆劲、鍵盤、重力傳感四種哀澈。
鼠標和觸摸事件被稱為節(jié)點系統(tǒng)事件牌借,鍵盤和重力傳感事件被稱為全局系統(tǒng)事件。
值得注意的是無論你的鼠標和觸摸事件注冊在哪個層級的節(jié)點上割按,獲取到的位置坐標都是基于世界坐標系的
所以我們經(jīng)常需要將坐標統(tǒng)一轉(zhuǎn)換為世界坐標系進行相應(yīng)的計算膨报。
關(guān)于坐標系
Cocos Creator 的坐標系是笛卡爾右手系,即原點在左下角适荣,x 向右现柠,y 向上,z 向外束凑。
關(guān)于Graphics組件的坑
Graphics組件提供了一系列繪畫接口晒旅,和canvas的API差不多。但是在使用過程中還是有很多問題的汪诉,現(xiàn)就我遇到的問題簡單描述并給出解決方案废恋。
- 問題一,1px劃的線條在不同分辨率設(shè)備上會出現(xiàn)粗細不均扒寄,甚至線條丟失問題鱼鼓?
原因:我們的畫布會根據(jù)設(shè)備屏幕的實際分辨率并對場景中所有渲染元素進行適當?shù)目s放,所以1px的線條在縮小到足夠小的時候就會出現(xiàn)丟失問題该编。
解決方案:確保在不同分辨率的設(shè)備上迄本,線條寬度永遠為1px。
如果你的畫布是適配高度的話课竣,代碼如下:
lineWidth = 1 /cc.view.getScaleY()
如果你的畫布是適配寬度度的話嘉赎,代碼如下:
lineWidth = 1 /cc.view.getScaleX()
如果沒有開啟畫布的任何適配模式,代碼如下:
lineWidth = 1 / Math.min(cc.view.getScaleX(), cc.view.getScaleY())
- 問題二于樟,對節(jié)點進行放大縮小會出現(xiàn)粗細不均公条,甚至線條丟失問題?
原因:同問題一迂曲。
解決:每次放大或縮小都進行一次重繪靶橱,確保lineWidth和原來的保持一致。
lineWidth = 1 / Math.min(cc.view.getScaleX(), cc.view.getScaleY()) / scaleRatio
scaleRatio為放大或縮小的比例路捧。
注意點:確保真實繪制的lineWidth乘以實際的縮放比例為整數(shù)关霸,即我們‘/’號之前為整數(shù),不然還是會出現(xiàn)丟失問題或粗細不均問題