【发布时间】:2013-01-05 18:18:56
【问题描述】:
在我创建的游戏中,我使用了积木。为了简化我的生活,我创建了一个类,它接受一组块,并将它们添加到我的块集中。
方块组(世界级):
Set<Block> blocks = new HashSet<Block>();
BlockCollection 类:
public class BlockCollection
{
private World world;
Set<Block> blocks = new HashSet<Block>();
public BlockCollection(World world, Vector2 position, Block[] blocks)
{
this.world = world;
for (Block block : blocks)
this.blocks.add(new Block(new Vector2(block.position.x + position.x, block.position.y + position.y)));
}
public void flip()
{
//Flip the set
}
public void add()
{
world.blocks.addAll(blocks);
}
}
(我使用的库是libgdx,Vector2类基本上是一个带有X浮点和Y浮点的向量)
我添加了一个如下所示的块数组:
Block[] spike = {
new Block(new Vector2(0, 0)),
new Block(new Vector2(1, 0)),
new Block(new Vector2(2, 0)),
new Block(new Vector2(3, 0)),
new Block(new Vector2(1, 1)),
new Block(new Vector2(2, 1)),
new Block(new Vector2(3, 1)),
new Block(new Vector2(1, 2)),
new Block(new Vector2(2, 2)),
new Block(new Vector2(1, 3)),
new Block(new Vector2(2, 3)),
new Block(new Vector2(1, 4)),
};
它有效,但现在我正在尝试添加功能来翻转 BlockCollection 类的 flip() 方法中的块集。这将帮助我不需要对我用块制作的每个对象的每个变体进行硬编码。
任何人都可以分享任何关于如何做到这一点的见解,也许是一个方程式?任何帮助都非常受欢迎。
编辑:所谓翻转,是指沿 x 轴翻转形状,类似于翻转图像。 示例:
原始与翻转
00100 | 11111
01110 | 01110
11111 | 00100
【问题讨论】:
-
您要做的第一件事就是停止使用
Set。 Sets aren't ordered,所以只要你把你的块数组添加到你的HashSet<Block>,它们就不再有任何顺序。如果您需要订购,您可以使用SortedSet实现之一。这至少会让你走上正确的道路。 -
问题是,我不需要任何订单。我使用集合是因为我不希望在同一个空间中有两个街区。
-
翻转套装是什么意思?比如说,把
1, 2, 3变成2, 3, 1? -
您所说的“翻转集合”是什么意思?我将其理解为颠倒
Blocks 在blocks中的顺序,但显然这不是您想要的。还是您的意思是“交换每个Vector2s 中Block的X 和Y 坐标”? -
仍然不清楚,恐怕:(您的原始设置和示例中的预期结果在哪里?
标签: java collections set block flip