【问题标题】:AndEngine: How do I change the color of a texture BEFORE it is part of an EntityAndEngine:如何在纹理成为实体的一部分之前更改纹理的颜色
【发布时间】:2016-11-07 16:49:11
【问题描述】:

使用一个名为 LayeredAssetsBitmapTextureAtlasSource 的类(您可以在此处查看:http://pastebin.com/vgfT1U5j)我目前正在将多个由字符片段组成的 png 图像堆叠到一个图集中,并从各个部分制作角色精灵。我已经完成了那些部分的精灵表,除了那个部分(例如裤子)之外的所有东西都是透明的。我为角色的所有部分制作了多个不同颜色的精灵表:裤子、鞋子、衬衫、手套、头部、帽子、剑。 LayeredAssetsBitmapTextureAtlasSource 让我可以将它们夹在同一个图集中,并从中制作一个 AnimatedSprite。

我会通过重新创建过程来更新角色服装的颜色。

我现在想做的是在将这些部件放入图集之前以编程方式更改它们的颜色,这样我的物品多样性可以大大提高,但我不必花太多时间在 GIMP 中为所有内容着色......此外,在 PNG 中保存大量颜色变化大大增加了我的 apk 大小。我想把这些部分做成白色并动态着色。

我可以使用 Entity.setColor 为整个精灵着色,但我似乎找不到实际完成此操作的重写方法。看起来它只是设置了一个在其他地方使用的颜色值。因此,到目前为止,逆向工程解决方案一直是失败的。

我不确定着色器是否会根据我所阅读的内容起作用,但我可能是错的。我认为我需要复制图像并对其进行着色,然后在图集中使用该副本,但我不知道如何开始。

有人有什么想法吗?在此先感谢您的帮助

【问题讨论】:

    标签: android image-processing colors andengine


    【解决方案1】:

    想通了.... 答案是在 LayeredAssetsBitmapTextureAtlasSource 中的 Canvas 上使用 Paint 和 ColorFilter。

    整个类文件看这里http://pastebin.com/0wXUbLmk

    相关改动请看下方

    @覆盖 公共位图 onLoadBitmap(最终配置 pBitmapConfig) { 最终位图图像 = BitmapFromAsset(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + this.mBaseAssetPath);//mBaseAssetPath); 如果(图像 == 空) 返回空值;

      final Bitmap bitmap = Bitmap.createBitmap(mTextureWidth, mTextureHeight, Bitmap.Config.ARGB_8888);
      final Canvas canvas = new Canvas(bitmap);
      canvas.drawBitmap(image, 0f, 0f, null);
      for (int i = 0; i < mAssetLayers.size(); i++)
      {
          Paint p = new Paint();
          int color =  Color.rgb(100,100,2);
          ColorFilter filter = new LightingColorFilter(color, 0);
          p.setColorFilter(filter);
    
    
         final AssetLayer al = mAssetLayers.get(i);
         final Bitmap layer = BitmapFromAsset(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + al.mAssetPath);
         canvas.drawBitmap(layer, al.mXOffset, al.mYOffset, p);
      }
      return bitmap;
    

    }

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多