- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 tween.js 对 Three.js block 进行动画处理,使其在动画结束时返回到其原始位置。
有没有一种方法可以通过 tween.js 仅使用一个 tween 来实现这一目标?
我的工作如下:
var position = {x: -200, y: 150, width: 1, height: 1, depth: 1, rotx: -0.5, roty: 0.7, rotz: 0.9};
var target = {x: 200, y: -100, width: 0.4, height: 3, depth: 8, rotx: 0.3, roty: -0.4, rotz: -0.6};
var position2 = {x: -200, y: 150, width: 1, height: 1, depth: 1, rotx: -0.5, roty: 0.7, rotz: 0.9};
var mesh = new THREE.Mesh(
new THREE.CubeGeometry(190, 45, 30),
new THREE.MeshBasicMaterial({color: 0x444444}),
0
);
mesh.position.set(position.x, position.y, 0);
mesh.rotation.set(position.rotx, position.roty, position.rotz);
scene.add(mesh);
var t1 = new TWEEN.Tween(position).to(target, 2000);
t1.onUpdate(function() {
mesh.position.set(position.x, position.y, 0);
mesh.scale.set(position.width, position.height, position.depth);
mesh.rotation.set(position.rotx, position.roty, position.rotz);
});
t1.easing(TWEEN.Easing.Quadratic.Out);
t1.onComplete(function() {t2.start();});
var t2 = new TWEEN.Tween(target).to(position2, 2000);
t2.onUpdate(function() {
mesh.position.set(target.x, target.y, 0);
mesh.scale.set(target.width, target.height, target.depth);
mesh.rotation.set(target.rotx, target.roty, target.rotz);
});
t2.easing(TWEEN.Easing.Quadratic.In);
t1.start();
我的动画函数中更新了补间:
function animate() {
requestAnimationFrame(animate);
renderer.render(scene, camera);
mesh.__dirtyPosition = true;
mesh.__dirtyRotation = true;
TWEEN.update();
}
animate();
这正如我所期望的那样工作,但显然效率非常低,并且很难解决。
任何和所有的帮助将不胜感激。
最佳答案
将x、y、z
属性重命名为width、height、deep
或rotx、roty、rotz,让事情变得有点过于复杂
。这仅意味着当您执行 scale.x =position.width
和 rotation.x =position.rotx
时,您必须在更新时手动转换这些属性。我建议您保留 x, y, z
,以避免这些重复分配。
// We set our start and target pos using the THREE.js "x, y, z" nomenclature
var startPos = {x: -200, y: 150, z: 0};
var targetPos = {x: 200, y: -100, z: 0};
// Scale also is defined in "x, y, z"
var startScale = {x: 1, y: 1, z: 1};
var targetScale = {x: 0.4, y: 3, z: 8};
// Rotation also has "x, y, z" degrees in Euler angles
var startRot = {x: -0.5, y: 0.7, z: 0.9};
var targetRot = {x: 0.3, y: -0.4, z: -0.6};
// Standard mesh setup
var mesh = new THREE.Mesh(
new THREE.CubeGeometry(190, 45, 30),
new THREE.MeshBasicMaterial({color: 0x444444})
);
mesh.position.copy(startPos);
mesh.rotation.copy(startRot);
scene.add(mesh);
// Create shortcuts for shorter easing names
var QuadOut = TWEEN.Easing.Quadratic.Out;
var QuadIn = TWEEN.Easing.Quadratic.In;
// Create one tween for position
// Notice that you can chain the animation
// back to startPos by doing double ".to().to()""
var t1 = new TWEEN.Tween(mesh.position)
.to(targetPos, 2000, QuadOut)
.to(startPos, 2000, QuadIn);
// Second, we tween the mesh's rotation
var t2 = new TWEEN.Tween(mesh.rotation)
.to(targetRot, 2000, QuadOut)
.to(startRot, 2000, QuadIn);
// Third, we tween the mesh's scale
var t3 = new TWEEN.Tween(mesh.scale)
.to(targetScale, 2000, QuadOut)
.to(startScale, 2000, QuadIn);
t1.start();
t2.start();
t3.start();
最后,在 animate()
期间,您不再需要更改 __dirtyPosition
或任何内容,因为补间直接更新网格的属性。
function animate() {
requestAnimationFrame(animate);
TWEEN.update();
renderer.render(scene, camera);
}
animate();
关于javascript - 反转 Tween.js 动画的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52046009/
我正在尝试更改 Sprite 的 y 位置,翻译有效,我的问题是它忽略了我的目标并每次都转到一个特定点,我不明白为什么 Sprite 访问器代码: public class SpriteAccesso
所以,当我阅读它时 here , TWEEN.update(#) 应该在 # 处渲染动画帧,对吗?因此,如果我运行 TWEEN.update(100),我应该在每次运行 TWEEN.update(10
试图让相机在按下按钮时围绕地球平滑旋转到新位置。我已经完成了位置证明,以检查坐标是否正常 camera.position.set(posX,posY,posZ); camera.lookAt(new
之间有什么区别 ColorTween vs Tween 和 IntTween vs Tween 如果一切都能由Tween处理,为什么这些XXXTween存在? 最佳答案 tldr;您可以使用自己的Tw
在android开发中,animation是用来给控件制作效果的。大多数的控件都可以用这个类,这个类包含了4种基本动作,分别为移动,旋转,淡入淡出,缩放。在使用animation时,可以在.java
我尝试使用 Tweens 使用kineticjs 使文本淡入淡出,我成功地使文本随它们一起移动,但文本似乎没有淡出。 如果有人能解释我做错了什么,那就太好了 这是一个jsfiddle ,当出现“补间完
我有一个 div,我想将其永远移动到向下位置,Tween 重复 -1 从元素开始移动的位置开始。我希望它像循环一样继续。 var tlMain = new TimelineMax({repeat:0}
我正在使用通用补间引擎。到目前为止,我只处理了一种访问器( Sprite 访问器)。但是,现在我需要两个访问器。第二种对象是 Sprite 的扩展。我尝试为其注册一个新的访问器,但补间管理器似乎使用
我正在尝试简化相机旋转以查看图表中选定的对象。 到目前为止,我已经 fourd.render_loop.push(() => TWEEN.update()); fourd.intersect_call
我有一个变量正在增加,比如说从 0 到 99。 然后我有一个div,我想以与增加变量相同的速率移动,但我只想定义移动的两端(例如从上到下移动,我只定义最上面的位置和最下面的位置)。当主变量将其值从 0
function moveCameraTo(position, duration) { var tween = new TWEEN.Tween( camera.position
我正在尝试使用 Tween.js 库。但是,当我的 javascript 代码运行时,我在 degub 控制台中收到一个引用错误,指出未定义 TWEEN。我的代码如下 function armTwee
我仍然无法满足最基本的需求。我想要 2 个按钮:一个运行将图像移动 50 像素的补间动画,另一个按钮在该图像上运行逐帧动画。 补间动画完成后,逐帧动画在错误的位置运行。诡异的。我正在使用 FillAf
我正在使用 Android 平台编写棋盘游戏。我正在使用 Tween Animation,特别是 TranslateAnimation 工具来创建在屏幕上移动 ImageView 对象的动画。我希望
是否有一个类似于 SpriteKit 中的 SKAction 的 CCAction 会在 Action 持续期间被多次调用(因此您可以创建基于流逝时间的自定义效果?) 我找到了 CCActionCal
我正在尝试轻松创建补间(动画) - 我对元素的 x 位置进行动画处理没有问题,但我尝试给它一个缓动。我按照示例代码 here 中所示的适当顺序编写代码。 这是我的代码: this.timeline.a
我一直在尝试围绕世界轴旋转立方体一段时间,但它没有给出准确的结果。回答我的上一个问题 Rotate object around world axis with tween.js帮助我完成了旋转,但没有
我正在尝试在我的网站上使用 ScrollMagic.js 来显示文本段落。我的脚本已经可以让文本淡出,但我想在文本淡入时创建一些暂停,一旦效果结束,滚动就会继续。官方有这样的东西website .标题
我是 LibGDX 和 Android 的新手。顺便说一句,抱歉我的英语不好。 这是我的问题。我只想用 libgdx 制作启动画面,我在 youtube 上观看了 Dustin Riley 的 lib
本文实例讲述了android动画之补间动画。分享给大家供大家参考,具体如下: 前面讲了《android动画之逐帧动画(frame animation)》,今天就来详细讲解一下tween动画的使用。
我是一名优秀的程序员,十分优秀!