Phaser Box2d-在一个方向上锁定拖动
Phaser Box2d - Lock drag in one direction
我正在开发Phaser的Box2d插件来构建一个游戏。在游戏中,可以用鼠标拖动物体。但我想固定拖动方向,即对象应该只在水平或垂直方向上移动。
我已经查看了官方的例子和文档。找不到符合目的的东西。
此示例显示了使用sprite.input.allowVerticalDrag = false
的运动方向锁定,但它不适用于Box2d的拖动。
我按照这个例子来启用拖动。我已经尝试在mouseDragMove
和update
函数中将sprite.body.y
设置为类似300的固定值,以便它确实在y
方向上移动。但结果并不顺利。它仍然朝那个方向有点摇晃。
我能做些什么来实现这一点?我是否缺少插件的任何内置选项?
我找到了一个解决方案。我所做的是在传递给框架的mouseDragMove
处理程序的mousePointer
参数中覆盖特定轴上的sprite位置。
以下是它的工作原理-
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;
}
我们在制作的一款游戏中遇到了类似的问题,尽管我们的游戏不使用物理,但我们所做的可能对您有用。整个想法是在拖动对象时使用tweens来设置对象的位置(而不是直接设置其位置)-这样,您就可以在执行tween时手动运行检查和设置约束,如果您的输入位于对象不应该位于的位置,则只需不将tween执行到该位置即可。
相关文章:
- jquery脚本只能在一个方向上正常工作
- JQuery后台位置似乎只在一个方向上起作用
- HTML5 JS-我如何使我的子弹/镜头在一个恒定的方向
- 有人能为我指明正确的方向,让一个javascript文件在另一个单独的javascript文件之后运行吗
- 在CSS的未来版本中,仅固定了一个方向的位置
- 使用 JavaScript 触发 CSS 动画淡入和淡出 - 仅适用于一个方向
- 柔性滑动器2在一个方向上继续循环而不工作
- Phaser Box2d-在一个方向上锁定拖动
- jQuery悬停在图像上,一个方向运行良好,另一个方向跳动
- Cordova屏幕锁定方向不是一个功能
- 在一个角度的方向上移动精灵
- 如何在移动应用程序上仅在一个页面上锁定方向
- Nivo Slider滑动解决方案(不总是在一个方向上滑动)
- 让一个箭头指向另一个标记的方向
- 滑动一个除法,使其沿着滑动方向
- HTML画布以恒定的速度在一个方向上移动一个对象
- JQuery图像旋转动画,工作在一个方向,而不是另一个
- 只允许向一个方向拖动ng-drag元素
- 谷歌地图路线方向路径颜色改变导航仪从一个航路点移动到另一个航路点
- 我如何应用地理位置坐标从谷歌地图得到方向到一个特定的地方