我知道这里已经有很多类似的问题和答案,我已经完成了一些搜索,我想我应该把这个问题作为一个新问题,因为我仍然无法找到合适的答案。< / 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;但是我仍然没有得到我想要的结果。
答案 0 :(得分:0)
虽然我不知道这个框架并且只能猜测画布是如何制作的,但我怀疑在drawRunningUI()
之后立即调用updateRunning()
并且用{{1}“覆盖”上一次绘制}(取决于如何处理失效/重绘)。
无论如何,你应该只在一个地方画画,然后它会变得容易多了。在事件处理代码中,您应该更新用于绘制UI的UI状态。像这样:
Assets.buttonPressed
这还不够,但应该说明这个想法。