最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

CocosCreator(2D)中物理節(jié)點橫豎屏適配

2023-08-17 17:24 作者:會飛的蝸牛007  | 我要投稿

物理節(jié)點(剛體)如果沒有做正確的適配,橫豎屏切換時這些剛體節(jié)點的位置(包括其精靈組件)都會發(fā)生偏移,而且如果動態(tài)的去設置這些剛體節(jié)點的位置(setPosition),或者旋轉和縮放、他們的位置總不是你想要的(已經發(fā)生了偏移),無論這些剛體是靜態(tài)的還是動態(tài)的。具體為什么會偏移目前也不是特別清楚,只了解到物理節(jié)點的變換不是發(fā)生在UI所在的世界坐標系中,而是在物理世界中通過各種力的方式去變換。

備注:當前使用的Creator版本為3.6.3


在官方文檔中是這么說的:

https://docs.cocos.com/creator/manual/zh/physics-2d/physics-2d-rigid-body.html

舉個問題例子:設計(豎屏)時創(chuàng)建一個靜態(tài)剛體節(jié)點

切換到橫屏時就找不到了。

然后按照文檔中:

PhysicsSystem2D.instance.debugDrawFlags = EPhysics2DDrawFlags.Aabb | ? ?EPhysics2DDrawFlags.Pair | ? ?EPhysics2DDrawFlags.CenterOfMass | ? ?EPhysics2DDrawFlags.Joint | ? ?EPhysics2DDrawFlags.Shape;

去繪制物理調試信息時可以看到包圍盒已經偏移(相對于想要的位置)了。

然后就嘗試了各種方法:扒論壇、提問題;問度娘;扒文檔、查API等等等。

在找到合適的解決方案之前的一些項目需求的實現(xiàn)中使用了一些替代方案:

強制適配高度,放在畫布中心,不做變換(位移、縮放、旋轉):

強制適配高度或寬度

放在畫布中心

????改方式雖然達到了效果,但是限制很多,適應場景很有限,而且剛體節(jié)點如果是動態(tài)節(jié)點就不管用了。

在橫豎屏切換時適配夾具,節(jié)點掛widget組件:

改方式活動范圍大一些、而且父節(jié)點可以不用強制在中心點了,但是一縮放又麻了!

最后怎么都想不通,文檔中不是說靜態(tài)剛體可以設置他的位置來進行移動嗎?不是說對剛體所在節(jié)點的相關屬性進行顯示設置時,節(jié)點的信息會同步到剛體上嗎?

這里忽略了文檔中的一句話,而且是很容易被忽略的一句描述:

在物理系統(tǒng)每次迭代(物理系統(tǒng)是在 postUpdate 進行迭代的)的最后會把所有剛體信息同步到對應節(jié)點上去。

那么:

是不是說,我在動態(tài)適配節(jié)點的最后,再去手動適配這些剛體?或者我直接在Next幀再去做這些剛體的適配?

于是就做了一些嘗試,也得到了當前階段比較滿意的解決方案:

假設在橫豎屏切換時需要去改變一個節(jié)點的位置、縮放、旋轉等變換,該節(jié)點下有一系列各種子節(jié)點剛體(包括靜態(tài)剛體、動態(tài)剛體)

step1:在初始化時去緩存所有子節(jié)點剛體的位置(在適配/橫豎屏切換的時候去手動設置)

類似這樣去存儲剛體節(jié)點的初始相對位置tempVec

step2:封裝一個方法去適配所有需要適配的剛體節(jié)點(在橫豎屏切換時調用)

類似這樣:注意重點1、2、3

step3:在橫豎屏切換時延遲一幀調用step2中的方法即可

注意延遲一幀調用

經過測試,該解決方案可以實現(xiàn)大多數(shù)剛體節(jié)點在橫豎屏切換時適配的問題,在下一篇解決該問題的方案出來之前,應該都是用該方法了。

備注:當前使用的Creator版本為3.6.3


CocosCreator(2D)中物理節(jié)點橫豎屏適配的評論 (共 條)

分享到微博請遵守國家法律
石家庄市| 财经| 利辛县| 澄江县| 沅江市| 五指山市| 全南县| 高淳县| 三江| 柯坪县| 哈密市| 榆林市| 临海市| 阿勒泰市| 射阳县| 东城区| 广平县| 江城| 南部县| 长寿区| 六盘水市| 阿图什市| 平塘县| 元江| 江山市| 鄂托克旗| 永清县| 绥化市| 中宁县| 舟山市| 平利县| 昌宁县| 金川县| 新源县| 宜兰县| 怀仁县| 乡城县| 威宁| 仁布县| 民和| 双峰县|