如何以编程方式以特定方式居中对齐绘制的对象
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;
}
}
请注意,我写得有点快,还没有测试它(想相对快速地给你一个答案,如果我发现一个错误或类似的错误,我会编辑答案),但是这个想法应该在那里。我希望我正在回答您的问题并且没有误解它,如果我误解了请告诉我。希望这对您有所帮助!
如果你听过这个,请阻止我。
所以,我在屏幕上有一艘船(在 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;
}
}
请注意,我写得有点快,还没有测试它(想相对快速地给你一个答案,如果我发现一个错误或类似的错误,我会编辑答案),但是这个想法应该在那里。我希望我正在回答您的问题并且没有误解它,如果我误解了请告诉我。希望这对您有所帮助!