如何以编程方式以特定方式居中对齐绘制的对象

How to programmatically center align drawn objects in a specific way

如果你听过这个,请阻止我。

所以,我在屏幕上有一艘船(在 Android Java 此处工作),用于我自己的 Galaga 版本。在我的版本中可能有不止一艘被俘的船,它们会移动到玩家船的正前方作为肉盾。

问题是试图让他们很好地就位。我可以拥有任意数量的船只,所以我想确保我可以根据玩家附着的船只数量来动态安排它们。

当存在一艘捕获的船时,它可以与玩家船对齐。

当捕获的船只数量为偶数时,它们会均匀分布在位于玩家船只中心的中心点上,但它们会覆盖玩家。

Even Number of Captured Ships

当捕获的船只数量为奇数时,它们的位置与玩家的位置相同,然后整齐地坐在两边。

Odd Number of Captured Ships

有没有办法以编程方式执行此操作?这些船必须与玩家一起移动,因此尝试使用内置组或其他东西似乎不明智。但是,如果我在 API 中遗漏了一些有用的信息,请告诉我。

感谢阅读。我焦急地等待着你的帮助。

肯定有办法做到这一点,你只需要有创意。这是一些 Java 伪代码,可以执行您想要的操作。令mainX为主飞船的x位置,numShips是你拥有的护盾飞船的数量,shipLength是飞船的水平长度(我假设它们都是一样的)并让 shieldX[] 成为盾牌飞船的 x 位置数组。然后,为了编写用您想要的值填充 shieldX[] 的代码,我们有(还假设所有这些都是整数,但如果不是,则可以轻松更改。):

 // Assume numShips, mainX, and shipLength have already been declared 
 int[] shieldX = new int[numShips];
 // Determine if odd or even number of ships
 boolean isOdd = numShips % 2; 
 if (isOdd) {
     // Middle shield ship index will be aligned with main Ship
     int mid = (numShips - 1)/ 2;
     shieldX[mid] = mainX; 
     // Place the ships on right and left sequentially. 
     for (int i = 1; i <= mid; i++) {
         // Calculate offset for every pair of ships.
         int offset = i * shipLength;
         shieldX[mid - i] = mainX - offset;
         shieldX[mid + i] = mainX + offset;
     }
} else {
    // First calculate the half length of the ships. 
    int half = shipLength / 2; 
    // Left Middle shield ship index will be half aligned with main Ship
    int midL = numShips / 2 - 1; 
    // Right middle shield ship index will be half aligned with main ship
    int midR = numShips / 2;
    // If we are even, then we can go straight into the for loops, similar to above
    for (int i = 0; i < midR; i++) {
        // Again calculate offset. This time include half lengths.
        int offsetL = i * shipLength + (shipLength / 2);
        // Now set values
        shieldX[midL - i] = mainX - offset;
        shieldX[midR + i] = mainX + offset;
    }
}

请注意,我写得有点快,还没有测试它(想相对快速地给你一个答案,如果我发现一个错误或类似的错误,我会编辑答案),但是这个想法应该在那里。我希望我正在回答您的问题并且没有误解它,如果我误解了请告诉我。希望这对您有所帮助!