Kivy,使用Clock.interval E的系统动画

2024-10-02 02:41:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经为一个俄罗斯方块应用程序编写了一段时间的代码,该应用程序可以使块一个接一个地系统地落下,并且不会相互重叠。我已经想出了这个代码,但不断得到一个错误,说我的小部件类已经有了父类。请帮帮忙

#Block 1 - 5 are stated above
class Block6(Widget):
    vel_x = NumericProperty(0)
    vel_y = NumericProperty(-5)
    position = ReferenceListProperty(vel_x,vel_y)
    def fall(self, pos):
        self.pos =  Vector(self.position) + self.pos
        if self.pos[1]==0:
            self.position[1] = 0

class TetrisApp(App):
    def build(self):
        game = TetrisGame()
        x = Window.width
        block1 = Block1(pos=(randint(0,x),Window.height))
        block2 = Block2(pos=(randint(0,x),Window.height))
        block3 = Block3(pos=(randint(0,x),Window.height))
        block4 = Block4(pos=(randint(0,x),Window.height))
        block5 = Block5(pos=(randint(0,x),Window.height))
        block6 = Block6(pos=(randint(0,x),Window.height))
        allblocks = (block1, block2, block3, block4, block5, block6)
        while game:
            blockchoice = randint(1,6)
            if blockchoice == 1:
                game.add_widget(block1)
                Clock.schedule_interval(block1.fall,1/60)
                for i in allblocks:
                    if block1.collide_widget(i):
                        block1.position[1] = 0
            elif blockchoice == 2:
                game.add_widget(block2)
                Clock.schedule_interval(block2.fall,1/60)
                    for i in allblocks:
                    if block2.collide_widget(i):
                        block2.position[1] = 0
            elif blockchoice == 3:
                game.add_widget(block3)
                Clock.schedule_interval(block3.fall,1/60)
                for i in allblocks:
                    if block3.collide_widget(i):
                        block3.position[1] = 0
            elif blockchoice == 4:
                game.add_widget(block4)
                Clock.schedule_interval(block4.fall,1/60)
                for i in allblocks:
                    if block4.collide_widget(i):
                        block4.position[1] = 0
            elif blockchoice == 5:
                game.add_widget(block5)
                Clock.schedule_interval(block5.fall,1/60)
                for i in allblocks:
                    if block5.collide_widget(i):
                        block5.position[1] = 0
            elif blockchoice == 6:
                game.add_widget(block6)
                Clock.schedule_interval(block6.fall,1/60)
                for i in allblocks:
                    if block6.collide_widget(i):
                        block6.position[1] = 0
            else:  
                print('this is not possible')
        return game

if __name__ == '__main__':
    TetrisApp().run()

我写了我的kv文件和所有东西,但不断地得到这个错误 This is the error i keep getting

我真的非常感谢任何关于错误来源的帮助


Tags: posselfgameifpositionwidgetwindowheight
1条回答
网友
1楼 · 发布于 2024-10-02 02:41:38

俄罗斯方块游戏

一共有七只河豚。在任何时候,只有一个泰特罗米诺坠落。请参考建议/片段

片段

class TetrisApp(App):

    def build(self):
        game = TetrisGame()
        x = Window.width
        allblocks = []

        while game:
            blockchoice = randint(1,6)
            if blockchoice == 1:
                block = Block1(pos=(randint(0, x), Window.height))
            elif blockchoice == 2:
                block = Block2(pos=(randint(0, x), Window.height))
            elif blockchoice == 3:
                block = Block3(pos=(randint(0, x), Window.height))
            elif blockchoice == 4:
                block = Block4(pos=(randint(0, x), Window.height))
            elif blockchoice == 5:
                block = Block5(pos=(randint(0, x), Window.height))
            elif blockchoice == 6:
                block = Block6(pos=(randint(0, x), Window.height))
            elif blockchoice == 7:
                block = Block7(pos=(randint(0, x), Window.height))

            game.add_widget(block)

            Clock.schedule_interval(block.fall,1/60)

            for i in allblocks:
                if block.collide_widget(i):
                    block.position[1] = 0
            else:
                print('this is not possible')
        return game

解决方案-WidgetException:无法添加。。。它已经有了一个父对象

在添加每个块之前,需要检查每个块是否存在

片段

if block1 in game.children:
    # block1 existed
    block1.y = Window.height    # reset y i.e. start from top again
else:
    # block does not exist
    game.add_widget(block1)

相关问题 更多 >

    热门问题