2015-04-02 41 views
0

我有一個矩形,當我按住鼠標按鈕時,我希望該矩形一次移動到1個像素的海峽線後的那個點。在一條直線上做一個矩形移動到點B一次一個像素

這是到目前爲止我的代碼(我把評論的,所以你可以理解)

float distanceX = finalX - x; //the number of pixels needed to get to destination on the X axis 
    float distanceY = finalY - y; // same as above but Y axis 
    float moveX = distanceX > 0 ? 1 : -1; // I only want it to move 1 pixel per render 
    float moveY = distanceY > 0 ? 1 : -1; // same as above 

    Array<Stuff> collidedX = new Array<Stuff>(); //saves collisions seperately for x and y 
    Array<Stuff> collidedY = new Array<Stuff>(); //because I want the square to move where the mouse is pointing even if it means only aligning one axis 

    for (Stuff s : collidables) { 
     if (overlapsT(s, x + moveX, y)) { 
      collidedX.add(s); 
     } 
    } 
    if (collidedX.size < 1) { 
     if (distanceX != 0) 
      x += moveX; 
    } 
    for (Stuff s : collidables) { 
     if (overlapsT(s, x, y + moveY)) { 
      collidedY.add(s); 
     } 
    } 
    if (collidedY.size < 1) { 
     if (distanceY != 0) 
      y += moveY; 
    } 

現在的問題是,它順利完美對角線直到線與其中一個軸,然後向上移動向左或向右移動至目的地。

我不想移動像素的小數部分。我的定製物理引擎工作的方式是每個像素都很重要,小數像素不好,所以我想弄清楚如何平滑路徑,或者確定如何決定何時將x添​​加到1然後y。

+0

獨立遊戲邏輯,並保持它獨立於設備的特定單位,比如像素(如果它與兩次,十成到百倍像素爲您的設備,甚至沒有像素在另一臺設備上運行所有?)。另外,不要通過使用虛擬像素來使遊戲邏輯複雜化。如果你的物理引擎迫使你將遊戲邏輯與設備特定單元耦合,那麼就考慮使用不同的物理引擎。另見:http://blog.xoppa.com/pixels/。 – Xoppa 2015-04-02 10:43:42

+0

@Xoppa現在,我正在使用視口來擴展屏幕以適應任何分辨率,因此所有設備的遊戲始終保持爲1920x1080。是的,它在1080p和更小的分辨率下看起來更完美,更大的分辨率更大,但是我希望這款遊戲是多人遊戲,我希望每個人都能在屏幕上看到相同的東西,即使它意味着縮小了東西。如果我使用英寸或類似的東西,我將如何讓所有人都能以同樣的方式使屏幕上的所有東西都適合屏幕?當然閱讀那篇文章,謝謝你的鏈接! – CodeCamper 2015-04-02 13:13:31

+0

在這種情況下,它不是你使用的像素,它是沒有意義的虛構單位。只需以意義單位來指定大小,例如以米爲單位,您希望您的視口是。它在不同的分辨率下看起來仍然相同。 – Xoppa 2015-04-02 15:39:54

回答

0

目前我無法評論,所以我必須回答。我認爲Bresenham的線路算法會幫助你。它用於繪製柵格化線條。

Bresenham

相關問題