触摸事件,更改图像按钮

时间:2014-05-06 12:13:04

标签: java android

我知道这里已经有很多类似的问题和答案,我已经完成了一些搜索,我想我应该把这个问题作为一个新问题,因为我仍然无法找到合适的答案。< / p>

所以,我写了一个简单的纸牌游戏,我从Mario Zechner的书"Beginning Android Games 2nd edition"获得了90%的知识,我想知道你们中有些人是否读过它。我在编写游戏时遵循指南,甚至使用他在书中提供的框架(Mr.Nom游戏)。我在他的论坛上问过,但没有回复,论坛反正也不太活跃。

本书提供了框架,其中有方法可以直接从代码中绘制Pixmap,绘制线等。所以我从不触摸布局,我也不使用XML。

本书使用类似于MVC(模型视图控制器)的模型,将世界和游戏分开。演示和操作分层。它根据游戏状态分离每个UI:Ready,paused,running,gameOver。

现在我被困在一些代码上,因为我想改变我的按钮图像。我提供2个图像(未压缩和按下),首先在所谓的(RunningUI)部分,我绘制未压缩的图像。并且只需当用户触摸按钮(仅触摸下来)时我想将图像更改为按下的图像。触摸释放后再次返回未压缩的图像。

private void drawRunningUI() {
    Graphics g = game.getGraphics();
    g.drawPixmap(Assets.buttonUnpressed, 70, 200);
}

updateRunning代码在这里:

private void updateRunning(List<TouchEvent> touchEvents, float deltaTime) {        
    Graphics g = game.getGraphics();
    int len = touchEvents.size();

    for(int i = 0; i < len; i++) {
        TouchEvent event = touchEvents.get(i);
        if (event.type == TouchEvent.TOUCH_UP) {
            if (event.x < 64 && event.y < 64) {
                if (Settings.soundEnabled)
                    Assets.click.play(1);
                state = GameState.Paused;
                return;
            }
        }

        if (event.type == TouchEvent.TOUCH_DOWN) {
            if (event.x >= 120 && event.x <= 180 && event.y >= 250 && event.y <= 380) {   

                Assets.click.play(1);
                g.drawPixmap(Assets.buttonPressed, 70, 200);  <-- nothing happened
            }
        }
    }

    world.update(deltaTime);
}

我在这里和那里修改了一些&#34;但是我仍然没有得到我想要的结果。

1 个答案:

答案 0 :(得分:0)

虽然我不知道这个框架并且只能猜测画布是如何制作的,但我怀疑在drawRunningUI()之后立即调用updateRunning()并且用{{1}“覆盖”上一次绘制}(取决于如何处理失效/重绘)。

无论如何,你应该只在一个地方画画,然后它会变得容易多了。在事件处理代码中,您应该更新用于绘制UI的UI状态。像这样:

Assets.buttonPressed

这还不够,但应该说明这个想法。