对Canvas / OpenGl技术的困惑

时间:2011-07-12 12:41:04

标签: android opengl-es canvas

我是android编程的新手,为我的计算级别做了一些java,但没有太复杂!

我正在制作一个游戏,其中一个物体落在屏幕上,当它到达底部时必须被分类到相关的“盒子”中。 我有一个用线程等运行的表面视图,使用画布绘制方法,然而,我不能为我的生活看到我将如何能够使落下的物体达到它将提出挑战的速度给用户。

在y方向上运行更改为1的线程会导致对象沿屏幕向下爬行。 Y的更大变化会导致图形跳跃。

OpenGL会有什么不同,还是我可以实现其他画布方法?

希望有意义!

提前致谢 ----螺纹------

public void run()
{
    Canvas canvas;
    while(running)
    {
        canvas = null;
        try{
        canvas = this.surfaceholder.lockCanvas();
        synchronized(surfaceholder)
        {
            gamepanel.Check();
            this.gamepanel.onDraw(canvas);

        }

        }finally
        {

            if(canvas != null)
            {
                surfaceholder.unlockCanvasAndPost(canvas);
            }
        }

    }
}

---- SurfaceView -------

protected void onDraw(Canvas canvas){
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.gamebackground), 0, 0, null);
SortItOut.sortitout.Letter.draw(canvas);
}

-----字母-----(每个对象都是不同的字母)

public static void draw(Canvas canvas)
{
y += 1;
canvas.drawBitmap(LetterObject, x, y, null);
}

这些是我认为相关的方法(Check方法只是检查对象是否已到达屏幕的底部)。

2 个答案:

答案 0 :(得分:1)

您必须在SurfaceView的构造函数中加载所有位图,而不是在onDraw()

答案 1 :(得分:0)

除了位图加载问题之外,您可以通过提高y变化率来降低速度。如果你做得太多,那么该框似乎会跳跃,但我敢打赌,在此之前你最多可以获得10个像素的变化(实验)。

如果性能降低了你的速度,你只需要在这种情况下做OpenGL。我认为不是这样的。虽然,我会停止在onDraw方法中加载位图并将其放在onCreate或一些构造函数中。 onDraw被调用数百次,这就是杀死你的应用程序。