解决三星GT-s5831i 加载TexturePacker打包的图片文件会花屏的bug
来源:互联网 发布:矢量图库 知乎 编辑:程序博客网 时间:2024/04/30 13:38
游戏开发中后期,引入TexturePacker打包图片之后,就出现了这个问题。不过幸好公司这么多测试机,只有三星GT-s5831i 这一台会必现。
同时Elipse的logcat里面狂飙err:
之前一直忙其他更重要的bug,所以现在才腾出功夫来解决!
折腾了一个下午和一个晚上,终于成功定位并解决:
主要原因是有两个场景的打包图片搞得太大了,这个低端手机一加载这两个图片资源就内存不够了!
a.png 从2048*2048 降到 1024*2048,相当于从 16M 降到 8M
b.png 从1024*2048 降到 512*512,相当于从 8M 降到 1M参考资料:
1.http://www.raywenderlich.com/32049/texture-packer-tutorial-how-to-create-and-optimize-sprite-sheets-in-cocos2d
Pixel Formats
So if you load an image in the default pixel format (RGBA888), you can calculate the memory it will take to store with the following calculation:
width x height x bytes per pixel = size in memory
In this case, you have a 512×512 image, so if you load it with the default pixel format it would be:
512 x 512 x 4 = 1MB (!)
2. Understanding pixel format in cocos2d v0.7.3
The texture’s pixel format is the way the image is stored in GPU memory.
Possible pixel formats:
- RGBA8888 (32-bit) (kTexture2DPixelFormat_RGBA8888)
- RGBA4444 (16-bit) (kTexture2DPixelFormat_RGBA4444)
- RGB5_A1 (16-bit)(kTexture2DPixelFormat_RGB5A1)
- RGB565 (16-bit) (kTexture2DPixelFormat_RGB565)
RGBA8888:
- 8 bits are assigned to the red channel, 8 bits to the green channel, 8 bits to the blue channel and 8bits to the alpha channel.
- Use this pixel format when you need the maximum possible quality for your image.
- But it will consume the double of memory compared to 16-bit textures. Memory is a precious resource on the iPhone
- Usually it is also slower to render.
- Useful for: background image of your intro scene, and for images with lots of gradient colors
RGBA4444:
- 4 bits are assigned to the red channel, 4 bits to the green channel, 4 bits to the blue channel, and 4bits to the alpha channel
- It gives you good quality in all channels, good speed, good memory consumption.
- Useful for: sprites that have different values of transparency
RGB5A1:
- 5 bits are assigned to the red channel, 5 bits to the green channel, 5 bits to the blue channel, andonly 1 bit to the alpha channel
- It gives you good quality in RGB channels but poor quality on the A channel. It also gives you good speed and good memory consumption.
- Useful for: sprites that have transparent parts, but the transparency is either On or Off
RGB565:
- 5 bits are assigned to the red channel, 6 bits to the green channel, and 5 bits to the blue channel. It has no alpha channel support
- It gives you the best possible quality for 16-bit textures, but without alpha channel support.
- Useful for: background images in your game.
The default pixel format in v0.7.3 is RGBA8888.
How to use it:
// Set the pixel format before loading the image// RGBA 8888 image (32-bit[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];Sprite *sprite1 = [Sprite spriteWithFile:@"test-rgba1.png"];// Set the pixel format before loading the image// RGBA 4444 image (16-bit)[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA4444];Sprite *sprite2 = [Sprite spriteWithFile:@"test-rgba2.png"];// Set the pixel format before loading the image// RGB5A1 image (16-bit)[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGB5A1];Sprite *sprite3 = [Sprite spriteWithFile:@"test-rgba3.png"];// Set the pixel format before loading the image// RGB565 image (16-bit)[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGB565];Sprite *sprite4 = [Sprite spriteWithFile:@"test-rgba4.png"];// restore the default pixel format[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_Default];
FAQ:
- Q: Can I use this technique for PVRTC images ?
- A: No, PVRTC images have their own format. PVRTC images are faster and they consume less memory since they are either 2-bit or 4-bit textures but the quality is not that great.
- Q: If I use 16-bit textures, will my game load faster ?
- A: The texture pixel format has nothing to do with the loading times of your game. The Pixel Format is how the image is stored in the GPU memory. If you want faster loading times you should reduce the size of your .PNG/GIF/TIFF/TMP image file.
- Q: Should I use RGB565 for the images that are compressed by XCode ?
- A: When XCode compresses the PNG images, it will create a compressed PNG image that has it’s alpha channel premultiplied in the RGB channels. The PNG format is RGB565, but you should NOT confuse a PNG format with a texture pixel format. A PNG image is understood by Photoshop and cocos2d, but the GPU knows nothing about PNG images. The PNG images need to be converted into a Texture (the format understood by the GPU). The answer is: it depends on what you want. The Image (PNG,GIF,TIFF,BMP) format is independent of the Texture format.
- Q: If I create a PNG/BMP/TIFF/GIF image without alpha channel, can I change the texture pixel format ?
- A: If your PNG/BMP/TIFF/GIF image has no alpha channel (premultiplied or not), then the pixel format that will be used for the texture is RGB565. It can’t be changed using the API but you can change by modifying the Texture2D.m file
- Q: Can I change the pixel format once the texture was created.
- A: No. Once the Texture was created you can’t modify the pixel format. But you can create new textures from the same image using different pixel formats. Just remember to remove the image from the TextureMgr!
- 解决三星GT-s5831i 加载TexturePacker打包的图片文件会花屏的bug
- texturepacker图片打包偶然出现的错误
- 【libgdx】图片整合工具TexturePacker的打包与反打包
- TexturePacker打包后的文件在cocos2d-x加载和使用
- 优化你的图片资源:图片打包工具TexturePacker
- cocos2d-x使用TexturePacker打包图片及使用生成的plist文件创建精灵动画
- cocos2d-x使用TexturePacker打包图片及使用生成的plist文件创建精灵动画
- 解决三星ARM11开发板图片采集程序源码出现的Bug
- TexturePacker打包成的 plist文件的使用
- TexturePacker打包成的 plist文件的使用
- 拆分TexturePacker打包的大图
- TexturePacker打包图片注意事项
- TexturePacker图片打包利器
- 使用 TexturePacker 打包图片
- 三星S5831i固件处理
- java程序打包后文件图片不能加载的问题
- 三星GT-I9502的USB调试在哪儿
- Libgdx: 将Texturepacker打包的PNG图片还原成一张一张的单个的
- Core Data入门
- jdbc mysql 中文乱码的解决方法
- open firefox cookies.sqlite
- Source not found for ClassLoader.findBootstrapClass(String) line: not available [native method]
- samba共享文件夹下可读不可写的问题总结
- 解决三星GT-s5831i 加载TexturePacker打包的图片文件会花屏的bug
- proc文件系统概述
- mysql数据库环境的搭建
- Java4Android学习 (第21~22集)上下转型
- 概率统计面试题
- PC机与FL2440的串口通信编程
- 制作U盘启动LINUX安装(Ubuntu12.04)
- seq_file机制
- 使用proc文件系统