【问题标题】:moving a path with a repeating Bitmap image in android在android中移动带有重复位图图像的路径
【发布时间】:2011-04-12 19:04:21
【问题描述】:

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

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

谢谢 安迪

【问题讨论】:

    标签: android path bitmap fill repeat


    【解决方案1】:

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

    【讨论】:

      【解决方案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);   
      

      【讨论】:

        猜你喜欢
        • 2011-05-26
        • 1970-01-01
        • 2012-09-29
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 2011-06-29
        • 2013-04-20
        • 2012-10-26
        相关资源
        最近更新 更多