\别踩白块儿\游戏源代码分析和下载(二)
四、游戏交互实现
1、前面已经介绍在 Block 类实现了每个block的触碰监听,block 实现触碰监听,当按下时,调起在GameScene中实现的touchBlock方法。下面来看改方法的实.
? ? ? ? ? ? ? ? ?
/**
* 点击到Block时进行的逻辑处理 *
* @param pBlock
* 所点击的block */
public void touchBlock(Block pBlock) {
if (gameStatus == ConstantUtil.GAME_START) {
??
?? if (pBlock.getRow() == moveNum + 2) {// 表示是在底部往上数的倒数第三行
?? // 判断是不是点击了该点击的黑块的上一格,如果是,我们也判定这是正确点击了,做出相应移动
?? upBlockTouch(pBlock);
?? } else if (pBlock.getRow() == moveNum + 1) {// 表示是在底部往上数的倒数第二行
?? if (pBlock.getColorType() == ConstantUtil.COLOR_BLACK)
{
?? if (linesLength == moveNum + 2) { ?? // 游戏胜利 ?? gameSucc(pBlock); ?? } else {
?? ?? ?? ??
?? ConstantUtil.COLOR_WHITE) {
?? ?? ?? ?? ?? ?? ?? ??
?? } ??
?? }
// 整体blocks下移 moveDown(pBlock, 1); } } else if (pBlock.getColorType() == // 误点了白块,游戏失败 gameFail();
// 失败时pBlock的一个闪红效果 LoopEntityModifier loop = failAction(); // 播放效果
pBlock.registerEntityModifier(loop); } ??
?? }
复制代码 上面的代码已经有所注释,这里再简单解析一下。
①理论上可以点击的一行为倒数第二行,如果点击到该行的黑块,则所有block向下移动一格,如果点击到该行的白块,则游戏失败,弹出失败界面。
②为了体验上的优化,如果点击到倒数第二行黑块所在列正对上的一个block(不管是黑块还是白块)也视为正确点击了黑块。因为在快速点击黑块的同时整体的block也迅速向下移动,很容易点击到上一格,此时我们认为这也是正确的点。
2、判断是不是点击了该点击的黑块的上一格,如果是,我们也判定这是正确点击了,做出相应移动
?? /**
?? * 判断是不是点击了该点击的黑块的上一格,如果是,我们也判定这是正确点击了,做出相应移动 ?? *
?? * @param pBlock
?? * 所被点击的块 ?? */
?? private void upBlockTouch(Block pBlock) { ?? int touchColumn = pBlock.getColumn(); ?? for (Block[] blocks : blockList) { ?? for (Block block : blocks) {
?? if (block.getRow() == moveNum + 1