簡體   English   中英

LibGDX 圖像旋轉問題

[英]LibGDX Image rotation issue

當我旋轉圖像(圖像類)時,我需要幫助解決一個小問題。

這個想法是旋轉一個球面圖像,移動是通過手指的觸摸和拖動,可能是或不是順時針,到目前為止這工作正常。

我希望當球體的角度是 90 的倍數時發生一些事情,問題是當我用手指旋轉球體時,有時它是如此之快以至於球體的角度並不總是通過 90 的倍數,例如,如果它在 87,當我移動手指時,它會在不接觸 90 的情況下到達 94。

這是我通過拖動旋轉的代碼

tapeImage.addListener(new DragListener() {
        int initDegree;

        @Override
        public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
            initDegree = (int) new Vector2(x, y).sub(new Vector2(tapeImage.getOriginX(), tapeImage.getOriginY())).angle();
            return true;
        }

        @Override
        public void touchDragged(InputEvent event, float x, float y, int pointer) {
            int touchDegree = (int) (new Vector2(x, y).sub(new Vector2(tapeImage.getOriginX(), tapeImage.getOriginY()))).angle();
            tapeImage.rotateBy(touchDegree - initDegree);
        }
    });

我知道捕獲這個的最好方法是將旋轉增加 1 但這不會跟隨手指速度,所以我想知道是否有更好的方法來捕獲旋轉事件,感謝您的幫助。

更新

我制作了一個快速圖像,以便能夠輕松表示我需要的內容: 在此處輸入圖片說明

情況:(灰色球體是黃色球體當前角度的表示)我順時針轉動黃色表盤,當黃色球體的角度是90的倍數時,會發生事件x,您可以繼續旋轉球體當事件發生時,如果你繼續轉動,你將到達下一個 90 的倍數,在那里同樣的事件將再次發生,我使用 rotateBy 方法為對象的當前角度增加一個角度,問題是如果我將球體移動得太快,它的角度會跳躍,從而阻止它達到 90 的倍數,正如我之前所說,這可以通過簡單地增加 1 以 1 來糾正,但球體會比我的手指慢得多。

我需要的是,無論您移動球體的速度有多快,當球體的角度看着這 4 個邊之一時,事件都會發生,也許使用 90 的倍數檢測它並不是知道哪一邊的最佳方法角度打開,或者我應該使用rotateBy以外的方法?

建議你把之前的角度存起來,對比一下之前的和新的角度,看是否過了90的倍數:

int previousDegree = 0;
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer) {
    int touchDegree = (int) (new Vector2(x, y).sub(new Vector2(tapeImage.getOriginX(), tapeImage.getOriginY()))).angle();
    tapeImage.rotateBy(touchDegree - initDegree);
    if(previousDegree < 90 && tapeImage.getRotation() >= 90) {
        // 90 degrees passed, put code
    } else if (previousDegree < 180 && tapeImage.getRotation() >= 180) {
        // 180 degrees passed, put code
    } else if (previousDegree < 270 && tapeImage.getRotation() >= 270) {
        // 270 degrees passed, put code
    } else if (previousDegree < 360 && tapeImage.getRotation() >= 360) {
        // 360 degrees passed, put code
    }
    previousDegree = touchDegree;
}

暫無
暫無

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

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