Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 触摸事件,更改图像按钮_Java_Android - Fatal编程技术网

Java 触摸事件,更改图像按钮

Java 触摸事件,更改图像按钮,java,android,Java,Android,我知道这里已经有很多类似的问题和答案,我已经搜索了一些,我想我应该问一个新问题,因为我仍然找不到正确的答案 所以,我写了一个简单的纸牌游戏,我90%的知识都是从Mario Zechner的《开始Android游戏第二版》一书中获得的,我想知道你们中的一些人是否读过这本书。我在编写游戏时遵循指南,甚至使用了他在书中提供的框架(Mr.Nom游戏)。我在他的论坛上问过,但没有回应,论坛也不太活跃 这本书提供了一个框架,其中有绘制Pixmap、绘制线等的方法。。所有这些都直接来自代码,所以我从不接触布局

我知道这里已经有很多类似的问题和答案,我已经搜索了一些,我想我应该问一个新问题,因为我仍然找不到正确的答案

所以,我写了一个简单的纸牌游戏,我90%的知识都是从Mario Zechner的《开始Android游戏第二版》一书中获得的,我想知道你们中的一些人是否读过这本书。我在编写游戏时遵循指南,甚至使用了他在书中提供的框架(Mr.Nom游戏)。我在他的论坛上问过,但没有回应,论坛也不太活跃

这本书提供了一个框架,其中有绘制Pixmap、绘制线等的方法。。所有这些都直接来自代码,所以我从不接触布局,我也不使用XML

这本书使用了类似于MVC(模型-视图-控制器)的模型,将世界和游戏分开。演示和操作层。它根据游戏状态分隔每个UI:就绪、暂停、运行、游戏结束

现在我被一些代码卡住了,因为我想更改我的按钮图像。我提供了2个图像(未压缩和已压缩),首先在所谓的(RunningUI)部分,我绘制了未压缩的图像。当用户触摸按钮(仅向下触摸)时,我想将图像更改为按下的图像。释放触摸后,再次返回到未压缩的图像

private void drawRunningUI() {
    Graphics g = game.getGraphics();
    g.drawPixmap(Assets.buttonUnpressed, 70, 200);
}
更新计划代码如下所示:

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);
}
private void updateRunning(列出touchEvents、float deltaTime){
Graphics g=game.getGraphics();
int len=touchEvents.size();
对于(int i=0;i如果(event.x>=120&&event.x=250&&event.y虽然我不知道这个框架,只能猜测画布绘图是如何制作的,但我怀疑
drawRunningUI()
会在
updateRunning()
之后立即调用
(取决于失效/重画的处理方式)

无论如何,您应该只在一个位置绘制,这样做会容易得多。在事件处理代码中,您应该更新UI状态,然后使用该状态绘制UI。类似于以下内容:

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

    for(int i = 0; i < len; i++) {
        TouchEvent event = touchEvents.get(i);
        if(event.x < 64 && event.y < 64) {
            if(event.type == TouchEvent.TOUCH_UP) {
                // ...
            }
        else if (event.x >= 120 && event.x <= 180 && event.y >= 250 && event.y <= 380) {
            switch(event.type) {
                case TouchEvent.TOUCH_UP:
                    uiState.updateButtonState(ButtonState.RELEASED);
                    break;
                case TouchEvent.TOUCH_DOWN:
                    Assets.click.play(1);
                    uiState.updateButtonState(ButtonState.PRESSED);
                    break;
                default:
                    // nothing to do
            }
        }
    }

    world.update(deltaTime);

    // I suppose an invalidation has happened / a redraw will happen next
}

private void drawRunningUI() {
    Graphics g = game.getGraphics();
    g.drawPixmap(uiState.getButtonState() == ButtonState.PRESSED ? Assets. buttonPressed : Assets.buttonUnpressed,70,200);
}
private void updateRunning(列出touchEvents、float deltaTime){
int len=touchEvents.size();
对于(int i=0;i如果(event.x>=120&&event.x=250&&event.y非常感谢你,德塞姆,你的插图已经足够了,它像魔术一样工作了!棒极了..呵呵,我很高兴..读了你的建议真的打开了我的心扉。再次感谢:)哦,太好了:)看看哪里
updateRunning()
drawRunningUI()调用的
也应该有助于明确这一点。特别是因为这是典型的绘图范例;在Android框架中,它将类似地在
onTouchEvent()
onDraw()
中实现。