Java 触摸事件,更改图像按钮
我知道这里已经有很多类似的问题和答案,我已经搜索了一些,我想我应该问一个新问题,因为我仍然找不到正确的答案 所以,我写了一个简单的纸牌游戏,我90%的知识都是从Mario Zechner的《开始Android游戏第二版》一书中获得的,我想知道你们中的一些人是否读过这本书。我在编写游戏时遵循指南,甚至使用了他在书中提供的框架(Mr.Nom游戏)。我在他的论坛上问过,但没有回应,论坛也不太活跃 这本书提供了一个框架,其中有绘制Pixmap、绘制线等的方法。。所有这些都直接来自代码,所以我从不接触布局,我也不使用XML 这本书使用了类似于MVC(模型-视图-控制器)的模型,将世界和游戏分开。演示和操作层。它根据游戏状态分隔每个UI:就绪、暂停、运行、游戏结束 现在我被一些代码卡住了,因为我想更改我的按钮图像。我提供了2个图像(未压缩和已压缩),首先在所谓的(RunningUI)部分,我绘制了未压缩的图像。当用户触摸按钮(仅向下触摸)时,我想将图像更改为按下的图像。释放触摸后,再次返回到未压缩的图像Java 触摸事件,更改图像按钮,java,android,Java,Android,我知道这里已经有很多类似的问题和答案,我已经搜索了一些,我想我应该问一个新问题,因为我仍然找不到正确的答案 所以,我写了一个简单的纸牌游戏,我90%的知识都是从Mario Zechner的《开始Android游戏第二版》一书中获得的,我想知道你们中的一些人是否读过这本书。我在编写游戏时遵循指南,甚至使用了他在书中提供的框架(Mr.Nom游戏)。我在他的论坛上问过,但没有回应,论坛也不太活跃 这本书提供了一个框架,其中有绘制Pixmap、绘制线等的方法。。所有这些都直接来自代码,所以我从不接触布局
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()
中实现。