3

我目前正在编写一个 android 横向滚动游戏,并且无法用重复的位图图像填充路径。我正在从多个坐标创建一条路径以构成“地面”区域。我有一个固定在画布和屏幕中间的角色,并且正在移动路径以表示角色的移动。我已经能够使用 BitmapShader 用重复图像填充路径。我也可以在屏幕上左右移动路径形状。但是,Bitmapshader 似乎使用了 0,0 的默认原点,这意味着着色器总是在同一个地方绘制地面重复图像。这意味着即使路径在移动,地面重复的图像也永远不会移动。

或者,任何人都可以提出一个更好的解决方案来用图像填充可绘制形状吗?

谢谢安迪

4

2 回答 2

2

谢谢,看看那些... Replica Island 似乎经常使用 OpenGL,目前这有点超出我的能力,而 Snake 并没有完全做到我想要的...最终到达那里..

    //Shape pathShape = this.getPathShape();
    Bitmap groundImage = ImageHandler.getmGroundImage();
    int offset = groundImage.getWidth()-(xPosition%groundImage.getWidth());
    Path path = new Path();
    path.moveTo(coordinates.get(0).getmX(), coordinates.get(0).getmY());

    for ( ShapeCoordinate coordinate : coordinates ) {
        path.lineTo(coordinate.getmX(), coordinate.getmY());
    }

    path.lineTo(coordinates.get(coordinates.size()-1).getmX(), mYBase);
    path.lineTo(coordinates.get(0).getmX(), mYBase);
    path.lineTo(coordinates.get(0).getmX(), coordinates.get(0).getmY());
    path.close();

    PathShape shape = new PathShape(path,canvas.getWidth(),canvas.getHeight());

    BitmapShader bs = new BitmapShader(groundImage, Shader.TileMode.REPEAT,Shader.TileMode.REPEAT);

    Matrix matrix = new Matrix();
    matrix.reset();
    matrix.setScale(1,1);
    matrix.preTranslate(offset, 0);
    bs.setLocalMatrix(matrix);

    ShapeDrawable sd = new ShapeDrawable(shape);
    sd.setColorFilter(Color.argb(255, 50*(mLevel+1), 50*(mLevel+1), 50*(mLevel+1)), Mode.LIGHTEN);
    sd.getPaint().setShader(bs);
    sd.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    sd.draw(canvas);   
于 2010-09-15T20:25:17.693 回答
0

你看过 android sdk 中的 Snake 例子吗?此外, Replica Island是另一个如何在 android 中制作 tile 引擎的示例。

于 2010-09-15T17:01:06.950 回答