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 の例を見たことがありますか? また、レプリカ アイランドは、Android でタイル エンジンを実行する方法のもう 1 つの例です。

于 2010-09-15T17:01:06.950 に答える