我正在使用Kivy / Python制作“黑白棋黑白棋游戏”。 基本上,我有一个GridLayout,它代表开发板本身的“图形布局”。它充满了“平铺”实例(它们只是使用“ ButtonBehaviour”的自定义标签,当然还有“标签”),因此我可以单击它们并执行某些操作。这可以正常工作。
main.py
class GameScreen(Screen):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.create_grid()
def create_grid(self):
for row in range(8):
for col in range(8):
tile = Tile(row, col)
self.ids.board.add_widget(tile)
class Tile(ButtonBehavior, Label):
def __init__(self, row, col, **kwargs):
self.row, self.col = row, col
super().__init__(**kwargs)
with self.canvas.before:
self.rect = Rectangle(size=self.size, pos=self.pos, source='images/tile_3.png')
self.bind(pos=self.update_rect, size=self.update_rect)
def __repr__(self):
return 'Tile object in pos=({}, {})>'.format(self.row, self.col)
def update_rect(self, instance, value):
self.rect.pos = self.pos
self.rect.size = self.size
def on_press(self, value=None):
print(self)
othello.kv
<Grid@GridLayout>:
rows: 8
cols: 8
spacing: (2, 2)
size_hint: None, None
size: dp(400), dp(400)
<GameScreen>:
BoxLayout:
id: box_layout
orientation: 'vertical'
AnchorLayout:
Grid:
id: board
pos_hint: {'x': (box_layout.width - self.width) / (2 * box_layout.width)}
输出
我想做的是使另一个GridLayout覆盖前一个。它应该具有彼此相同的大小,但是在这种情况下,它将代表游戏中使用的每块。我有3张图像,其中2张基本上是一块透明背景,这样我仍然可以看到下面的图块,而另一张图像是完全透明的,以便我可以看到整个图块(表示那里没有一块)。不幸的是,我不知道如何正确地使这两个网格重叠,或者是否还有另一种更好的方法。我想提出任何建议。谢谢。
答案 0 :(得分:0)
这就是我的解决方法:
<GameScreen>:
BoxLayout:
orientation: 'vertical'
AnchorLayout:
id: anchor_layout
FloatLayout:
Grid:
id: board
pos_hint: {'x': (anchor_layout.width - self.width) / (2 * anchor_layout.width), 'y': (anchor_layout.height - self.height) / (2 * anchor_layout.height)}
Grid:
id: pieces
pos_hint: {'x': (anchor_layout.width - self.width) / (2 * anchor_layout.width), 'y': (anchor_layout.height - self.height) / (2 * anchor_layout.height)}