从零开始学Python游戏编程37-精灵4
3 用户界面类UserInterface
在《从零开始学Python游戏编程33-指令模式2》中,将用户界面类的名字设为了“Game”,在此我们将该类名设置为UserInterface。
3.1 __init__()方法
在UserInterface类的__init__()方法方法中,主要不同是根据图2中的空格行列数设置游戏窗口的大小,并且将移动坦克精灵的指令moveTankCommand设置为Vector2类型,代码如图5所示。
图5 __init__()方法的代码
其中,第37行定义的cellSize属性表示每个空格的大小;第38行定义的windowSize属性表示游戏窗口的大小,其值为空格行列数gameState.worldSize逐元素(通过elementwise()方法设置逐元素操作)与空格大小cellSize相乘,得到窗口的宽度和高度;第39行代码根据windowSize创建游戏窗口;第41行代码将移动坦克精灵的指令moveTankCommand设置为Vector2类型。
3.2 processInput()方法
在processInput()方法中,根据玩家的按键,设置移动坦克精灵的指令moveTankCommand,代码如图6所示。
图6 processInput()方法的代码
其中,第46行首先复位移动坦克精灵的指令moveTankCommand;第55-62行代码根据玩家的数据修改moveTankCommand。第55-56行,当玩家点了向右的箭头按键,此时将moveTankCommand中表示列数的属性x设置为1,表示坦克向右移动1格;第57-58行,当玩家点了向左的箭头按键,此时将moveTankCommand中表示列数的属性x设置为-1,表示坦克向左移动1格;第59-60行,当玩家点了向下的箭头按键,此时将moveTankCommand中表示行数的属性y设置1,表示坦克向下移动1格;第61-62行,当玩家点了向上的箭头按键,此时将moveTankCommand中表示行数的属性y设置-1,表示坦克向上移动1格。
3.3 update()方法
update()方法的主要作用是根据移动坦克指令moveTankCommand,更新坦克精灵的所在行列数,即更新坦克精灵的位置,代码如图7所示。
图7 update()方法的代码
第65行代码,通过属性gameState()调用GameState类的方法update()对tankPos属性进行设置。