2011-12-14 81 views
0

我试图让飞行气球(无限上下),并通过点击其中一个,它会改变它的方向。我试图使用动画,但它不支持在当前时间点击当前位置的视图。我知道,有两种方法,至少:单击安卓按钮动画

  • 使用OpenGL的
  • 和使用的画布。

我不想使用OpenGL来退出简单的动画。我不明白怎么做,使用画布(被读取this,谷歌文档和一些谷歌搜索链接)。 我不需要代码,所有我需要它的方式如何做和算法。

+0

我不'现在我们有时间来写一个完整的解释,但是google的Android游戏教程,你需要创建一个线程来执行你的气球对象的更新命令,然后让他们在画布上调用一个绘图命令,这里有很多教程可用,他们应该帮助你。我可以稍后发布代码从我的项目开始,它使用了你以后需要的大量工作。 – Grambot 2011-12-14 19:29:15

回答

1

好吧,这是我已经设置了我的项目,将完全按照自己的工作需要一个...

您需要创建4个主要方面:
- 一活动(延伸活动)
- 甲SurfaceView(延伸SurfaceView实施SurfaceHolder.Callback)
- 螺纹(扩展螺纹)
- Objects的相互作用(延伸绘制对象)

活动开始,并产生一个创建线程一个SurfaceView。视图或线程可以包含您绘制/与之交互的对象,它取决于您如何在此处存储数据,但是如果您想出一个类间耦合最少的设计,那么最简单。

一旦启动,线程运行不断,直到停止(设置isRunning为false):

/** 
* Processing loop 
*/ 
public void run() { 
    while (isRunning) { 
     try { 
       sleep(25); 
      } catch (InterruptedException e) { 
       Log.e("Thread","Thread Interruption"); 
       e.printStackTrace(); 
      } 
     update(); 
    } 
    Log.d("Thread", "Game Loop Stopped"); 
} 

/** 
* Main processing of the game loop. 
*/ 
private void update() { 
    handleInput(); 
    updatePhysics(); 
    updateUI(); 
    updateState(); 
    updateAI(); 
    updateAnimations(); 
    updateSound(); 
    updateVideo(); 
} 

在这个类,你看update()方法,做了一堆动作线程的每个迭代。

您会感兴趣的方法大多是handleInput,updateUIupdatePhysics方法。

handleInput中,您将回调SurfaceView以获取处理信息所需的数据。我的handleInput是相当简单的,它只是从SurfaceView类的onTouchEvent(当您使用SurfaceHolder.OnCallBack接口时得到实现)抓取MotionEvent

updateUI方法调用SurfaceView的update它与每个对象重新绘制Canvas,或气囊

public void update(List<Actor> actors) { 
     Canvas canvas = null;  
     try { 
      canvas = surface.lockCanvas(); 
      synchronized (surface) { 
       //Blank the Canvas 

       for (int i = 0; i < actors.size(); i++) { 
        actors.get(i).draw(canvas); 
       } 
      } 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } finally { 
      if (canvas != null) { 
       surface.unlockCanvasAndPost(canvas); 
      } 
     } 
    } 

在这里我们可以看到,它调用draw方法传递Canvas对象中的每一个你可交互的对象。我在上面的代码中调用了我的“Actor”。您如何选择执行draw取决于您,但听起来您会使用很多canvas.drawBitmap()函数。

回到主题的updatePhysics方法,您会希望使用它来在对象被绘制到屏幕之前或之后更新对象。对于你来说,你需要让他们在屏幕上改变他们的X和/或Y位置,或者在handleInput决定你击中气球后改变它的移动方向。


很难在StackOverflow回复中很好地解释这个问题。如果你真的希望我可以尝试在本周末将更多的信息放在一起,并将它张贴在外部给你(我可以提供我的UML类图表,其中包括图片示例,结构和数据流等其他信息。)

请让我知道如果我可以进一步帮助你!请注意,这不是我所有的工作。我使用了很多在线基础Android游戏结构的教程,但是现在没有可用的链接提供参考。