2017-03-04 75 views
0

我已將我的遊戲引擎從r69升級到r84。大多數事情都很好,但幾乎沒有什麼事情正在破裂,這是其中之一。在r84中翻轉THREE.Sprite的最佳方法是什麼?

以前我是能夠通過簡單地做

sprite.scale.x = -1; 

這似乎並不在r84工作了翻轉精靈。不完全確定爲什麼,現在有誰能提供一個推薦的方法來實現這一目標?我目前的想法是存儲紋理的兩個版本並簡單地在它們之間切換,但與以前的解決方案相比,這看起來相當低效和混亂。

r84

+0

是設置'sprite.material.map.repeat.set( - 1,1) ;'可以接受?還要確保適當地設置'THREE.RepeatWrapping'。 – WestLangley

+0

嗯,我正在使用一個精靈表,我的代碼是'texture.repeat.set(1/spriteSheet.cols,1/spriteSheet.rows)',我怎麼能改變這個以使用新的方法? –

回答

2

您正在使用一個精靈表,要翻轉個體精靈的形象。

你可以做到這一點與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

+0

嗯,如果你的x軸上的精靈表中有不同的幀,這是不會工作的嗎?我的動畫做'texture.offset.x = frames [frame]/cols',其中'texture'是'material.map'。如果您基於'texture.offset.x'進行翻轉,那麼如果您已經基於水平框架進行動畫製作,那麼這將無法工作。它會永遠得到超越。 –

+0

好吧...我已將動畫更新爲 'spritesheet.offset.x =(flip)? - (framesOrdered [frame] + 1)/ cols:framesOrdered [frame]/cols;' 這個工作。儘管如此,我認爲它不像以前的實施那樣乾淨,但爲了達到同樣的結果,還有很多工作要做,而且非常費勁。任何方式強迫舊的方式在'R84'工作? –

+0

three.js沒有,也從來沒有支持對象矩陣中的反射。它曾經「工作」的事實 - 在某些情況下仍然有效 - 簡直是偶然。 – WestLangley

相關問題