我已将我的游戏引擎从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)',我怎么能改变这个以使用新的方法? –