流畅的动画跟随光标

时间:2015-04-19 20:24:54

标签: javascript cocos2d-js

我试图找出,如何使用cocos2d js

创建一个平滑的光标跟随动画

这里有一些代码:

var listener = cc.EventListener.create({
            event: cc.EventListener.MOUSE,
            onMouseMove: function (event) {
                var str = "MousePosition X: " + event.getLocationX() + "  Y:" + event.getLocationY();

                var actionBy = cc.MoveTo.create(2, cc.p(event.getLocationX(), $scope.bar._position.y));
                $scope.bar.stopAllActions();
                $scope.bar.runAction(
                    cc.sequence(
                        //cc.rotateTo(2, 0),
                        actionBy
                    )
                );


                // do something...
            }});

这里的问题,因为事件经常被触发而被卡住了“$ scope.bar.stopAllActions();”停止动画。

如果我删除“$ scope.bar.stopAllActions();”动画疯狂,“酒吧”飞越屏幕。

我只是不会按照鼠标光标,就像狗跟随人类一样

1 个答案:

答案 0 :(得分:1)

这里的问题是,如果您删除stopAllActions();,那么您正试图对已经同时执行某项操作的对象执行操作。在任何一种情况下,你都经常在一个物体上发射动画,我很少看到这项工作如预期的那样。

我尝试直接运行该操作,而不是先将其置于cc.Sequence之内,但如果这不起作用,那么您有两个选择,都依赖于手工劳动:

一个。只需将鼠标移动到鼠标移动位置即可: $scope.bar.x = event.getLocationX();

湾假设你想要"榨汁"游戏,只需在鼠标上设置栏就会很无聊,所以你可以让酒吧逐渐赶上鼠标:

在你的常数部分:

var EASING_CONSTANT = 0.9;

在事件处理程序中:

$scope.bar.x += ($scope.bar.x - event.getLocationX()) * EASING_CONSTANT;

EASING_CONSTANT越低,条形图越慢,只能使用0到1之间的值。

现在,如果您尝试使用此功能,您将意识到该栏杆永远不会完全赶上您的鼠标,因此您必须将此代码放在更新功能中(在主游戏层中#&#) 39;例如s update方法,因此它运行每一帧。

BUT!然后您无法访问event对象,因此您必须得到以下内容:

在事件处理程序中:

$scope.bar.targetX = event.getLocationX();

在更新方法中:

$scope.bar.x += ($scope.bar.x - $scope.bar.targetX) * EASING_CONSTANT;

你可以使用很多缓动功能,我给你最简单的例子。

例如,请注意您还有event.getDeltaX()方法,它会返回事件的最后一次调用与当前之间的位置差异(自上次调用以来鼠标移动了多少)事件)。有了这个,你可以做一些事情:

在你的常数部分:

var EASING_CONSTANT = 0.9;
var WOBBLING_CONSTANT = 10;

在事件处理程序中:

$scope.bar.targetX = event.getLocationX();
$scope.bar.mouseDeltaX = event.getDeltaX();

在更新方法中:

$scope.bar.x += ($scope.bar.x - $scope.bar.targetX) * EASING_CONSTANT + Math.cos($scope.bar.mouseDeltaX) * WOBBLING_CONSTANT;

只是发挥创意并开始搞乱公式,直到找到一种感觉"感觉"对。但一定要先简单开始吧!

PS:我猜你想要你的" bar"只在x轴上移动,所以..你正在制作一个arkanoid克隆? :d