首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相位器Box2d -锁单向拖动

相位器Box2d -锁单向拖动
EN

Stack Overflow用户
提问于 2015-12-12 07:52:08
回答 2查看 593关注 0票数 0

我正在开发相位器Box2d插件来构建一个游戏。在游戏中,物体可以用鼠标拖动。但我想要固定拖动方向,即物体应该只向水平或垂直方向移动。

我查过官方的例子和文档。找不到任何有用的东西。

这个例子使用sprite.input.allowVerticalDrag = false显示运动方向锁,但它不适用于Box2d的拖动。

我正在跟踪这个例子以启用拖动。我尝试将sprite.body.y设置为mouseDragMoveupdate函数中类似于300的fix值,这样它就会朝着y方向移动。但结果并不顺利。它在那个方向上仍然有一点震动。

我能做些什么来实现这一点?我错过了任何内置的插件选项吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-21 06:53:29

我想出了解决办法。我所做的是覆盖在特定轴上传递给框架的mousePointer处理程序的mouseDragMove参数中的sprite位置。

以下是它的工作原理-

代码语言:javascript
复制
var isDragging = false,
activeSpriteX=0,
activeSpriteY=0;

function mouseDragStart(e) {
    isDragging = true;

    //get the clicked sprite
    var currentSprite = game.physics.box2d.getBodiesAtPoint(e.x, e.y);

    //save the position of clicked sprite
    if (currentSprite.length > 0) {
        activeSpriteX = game.input.mousePointer.x;
        activeSpriteY = game.input.mousePointer.y;
    }
    game.physics.box2d.mouseDragStart(game.input.mousePointer);
}

function mouseDragMove() {
    mousePointer = game.input.mousePointer;

    //if sprite is being dragged
    if (isDragging) {
        //HERE IS THE WHOLE TRICK - 
        //just override the vertical position of `mousePointer` to sprite's initial position, when it was clicked
        //To fix the sprite in horizontal direction, just override the `x`
        mousePointer.y = activeCarY;
    }

    game.physics.box2d.mouseDragMove(mousePointer);
}

function mouseDragEnd(e) {
    game.physics.box2d.mouseDragEnd();
    isDragging = false;
}
票数 2
EN

Stack Overflow用户

发布于 2015-12-13 16:34:29

我们制作的游戏也有类似的问题,虽然我们的游戏不使用物理,但我们所做的可能对你有用。整个想法是在拖动对象时使用tweens来设置对象的位置(而不是直接设置它的位置)--通过这种方式,您可以在吐温执行时运行检查并手动设置约束,如果您的输入位于对象不应该在的位置,则根本不执行对该位置的检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34237597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档