我有以下代码:
var lion = game.add.sprite(2, 2,'lion');
var jump = game.add.tween(lion);
jump.to({x: 1000, y: 1000 }, 10000, Phaser.Easing.Linear.None);
// ...
jump.start();
我创建了一个精灵,并希望它在两点之间移动,这里我将狮子从左上角移动到右下角的某个点(1000,1000)。是否可以为此运动添加弹跳动作?
目前狮子正在一条直线上移动,但我想让它看起来好像狮子在跳跃,就像这样:
我将如何实现这一目标?补间真的能够产生像这样的复杂路径吗?
答案 0 :(得分:4)
虽然API很棘手并且记录错误(imho),但我设法找到了实现这种行为的好点。我花了两天的时间来讨论补间的工作原理以及应用我的更改的位置。
创建补间时,可以向其传递缓动函数。我想要的缓动仅应用于Y轴(弹跳运动),向右移动仅适用于X轴。因此,我必须使用两个单独的Tween:
function vanHalen (v) { // Might as well jump
game.debug.spriteInfo(lion, 32, 32);
return Math.sin(v * Math.PI) * 1;
};
function goLion() {
var move = game.add.tween(lion);
var jump = game.add.tween(lion);
// "Move" is a linear easing function that will move the sprite to (1000,y). It takes the Lion 2 Seconds to get there.
move.to({x: 1000}, 2000);
// The Jump is a function that works on the y axis, uses a customized easing function to "bounce".
jump.to({y: 30}, 500, vanHalen, true, 0, Number.MAX_VALUE, 0);
move.start();
};
跳跃自动开始,永不结束。当向右移动结束时,狮子将继续在一个地方弹跳。
缓动函数接收进度值(介于0和1之间),表示补间移动了多远(以百分比表示)。