簡體   English   中英

Phaser Box2d-沿一個方向鎖定拖動

[英]Phaser Box2d - Lock drag in one direction

我正在使用Phaser的Box2d插件來構建游戲。 在游戲中,可以用鼠標拖動對象。 但是我想固定拖動方向,即對象只能水平或垂直移動。

我檢查了官方示例和文檔。 找不到符合目的的任何東西。

此示例顯示了使用sprite.input.allowVerticalDrag = false的運動方向鎖定,但不適用於Box2d的拖動。

我正在按照此示例啟用拖動。 我曾嘗試設置sprite.body.y像兩個300一固定值mouseDragMoveupdate功能,因此,它並在移動y方向。 但是結果並不順利。 它仍然朝那個方向晃動了一點。

我該怎么做呢? 我是否缺少該插件的任何內置選項?

我能夠找到解決方案。 我所做的是在傳遞給框架的mouseDragMove處理程序的mousePointer參數中重寫特定軸上的精靈位置。

下面是它的工作原理 -

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;
}

我們在制作的游戲中也遇到了類似的問題,盡管我們的游​​戲不使用物理原理,但我們制作的內容可能對您有用。 整個想法是在拖動對象時使用補間設置對象的位置(而不是直接設置其位置)-這樣,您可以在執行補間以及輸入是對象所在的位置時運行檢查並手動設置約束不應該,您只是不執行補間到該位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM