我已將我的遊戲引擎從r69
升級到r84
。大多數事情都很好,但幾乎沒有什麼事情正在破裂,這是其中之一。在r84中翻轉THREE.Sprite的最佳方法是什麼?
以前我是能夠通過簡單地做
sprite.scale.x = -1;
這似乎並不在r84
工作了翻轉精靈。不完全確定爲什麼,現在有誰能提供一個推薦的方法來實現這一目標?我目前的想法是存儲紋理的兩個版本並簡單地在它們之間切換,但與以前的解決方案相比,這看起來相當低效和混亂。
r84
我已將我的遊戲引擎從r69
升級到r84
。大多數事情都很好,但幾乎沒有什麼事情正在破裂,這是其中之一。在r84中翻轉THREE.Sprite的最佳方法是什麼?
以前我是能夠通過簡單地做
sprite.scale.x = -1;
這似乎並不在r84
工作了翻轉精靈。不完全確定爲什麼,現在有誰能提供一個推薦的方法來實現這一目標?我目前的想法是存儲紋理的兩個版本並簡單地在它們之間切換,但與以前的解決方案相比,這看起來相當低效和混亂。
r84
您正在使用一個精靈表,要翻轉個體精靈的形象。
你可以做到這一點與THREE.MirroredRepeatWrapping
使用的模式,像這樣:
// desired sprite row/column index
var iCol = 5;
var iRow = 3;
var flipSprite = true;
// texture
var loader = new THREE.TextureLoader();
var texture = loader.load("mySpriteMap.jpg");
// set wrapping to support flipping sprite
texture.wrapS = THREE.MirroredRepeatWrapping;
// set repeat
var nRows = 8; // sprite sheet: 8 rows x 8 cols
var nCols = 8;
texture.repeat.set(1/nCols, 1/nRows);
// set offset
texture.offset.x = flipSprite ? - (iCol + 1)/nCols : (iCol/nCols); // MirroredRepeatWrapping;
texture.offset.y = iRow/nRows;
// material
var material = new THREE.SpriteMaterial({ map: texture });
// sprite
sprite = new THREE.Sprite(material);
three.js所r.84
嗯,如果你的x軸上的精靈表中有不同的幀,這是不會工作的嗎?我的動畫做'texture.offset.x = frames [frame]/cols',其中'texture'是'material.map'。如果您基於'texture.offset.x'進行翻轉,那麼如果您已經基於水平框架進行動畫製作,那麼這將無法工作。它會永遠得到超越。 –
好吧...我已將動畫更新爲 'spritesheet.offset.x =(flip)? - (framesOrdered [frame] + 1)/ cols:framesOrdered [frame]/cols;' 這個工作。儘管如此,我認爲它不像以前的實施那樣乾淨,但爲了達到同樣的結果,還有很多工作要做,而且非常費勁。任何方式強迫舊的方式在'R84'工作? –
three.js沒有,也從來沒有支持對象矩陣中的反射。它曾經「工作」的事實 - 在某些情況下仍然有效 - 簡直是偶然。 – WestLangley
是設置'sprite.material.map.repeat.set( - 1,1) ;'可以接受?還要確保適當地設置'THREE.RepeatWrapping'。 – WestLangley
嗯,我正在使用一個精靈表,我的代碼是'texture.repeat.set(1/spriteSheet.cols,1/spriteSheet.rows)',我怎麼能改變這個以使用新的方法? –