2017-03-04 34 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

相关问题