【问题标题】:Cocos2D android background image gets messed upCocos2D android 背景图像被弄乱了
【发布时间】:2012-05-15 18:25:40
【问题描述】:

所以我现在试图制作一个只有简单静态背景的游戏,但是当我将它绘制到屏幕上时(没有进行缩放,因为图像的分辨率与屏幕相同)它绘制了底部图像的一部分不正确,其中图像的底部几百个像素在图像下方完全相同。抱歉,这很难解释,但我是新手,我实际上无法发布问题的图片。

现在我只是使用一个简单的精灵来渲染这个背景图像。这是正在使用的代码:

    // background layer: another image
    background = CCSprite.sprite("WaterBackground.png");
    // change the transform anchor point (optional)
    background.setPosition(CGPoint.make(GAME_WIDTH/2, GAME_HEIGHT/2));
    addChild(background);

我在这里做错了吗? Cocos2D 不支持这么大的精灵图片吗? (分辨率800*1280) 任何帮助将不胜感激!

因为我现在可以上传图片了,下面是出现问题的视觉效果:

还有我游戏中的问题:

如您所见,问题很难描述。问题只存在于这个更大的图像;我在 GIMP 中手动缩小它,然后为游戏放大它,它看起来很好(除了分辨率较低)。我还尝试缩小这个更大的图像,但仍然导致同样的问题。希望你们能帮助我,因为我不知道什么可能导致这个错误。特别是因为我读到 Cocos2D 支持的最大图像尺寸是 2048*2048,而我的图像正好在这个范围内。

感谢你们提供的任何帮助!

【问题讨论】:

    标签: android ccsprite cocos2d-android


    【解决方案1】:

    这是由于纹理大小的限制。 Coсos2d-android 支持最大尺寸为 1024 x 1024 像素的图像。

    我遇到了同样的问题,正在寻找解决方法。

    编辑

    我找到了解决方案 在 cocos2d 项目中打开 org.cocos2d.opengl 包中的 CCTexture2d.java 文件并将 kMaxTextureSize 从 1024 更改为 2048

    【讨论】:

    • 谢谢你!这绝对有效,现在一切都运行完美,没有那个错误 =]
    • 抱歉,我的三星 S6 仍然出现黑屏。 .请帮忙
    【解决方案2】:

    我不确定,从你的代码和 cocos2d 代码来看,我看不出发生这种情况的确切原因,但考虑到你在屏幕上的精灵数量,我会一定要看看我对this 问题的回答,因为您很可能会遇到 cocos2d 围绕多个精灵的古怪小渲染错误之一。尝试 spritesheets 不会有什么坏处,这当然是在 cocos 中实际做 sprites 的正确方法。

    另外,绝对要为自己创建一个辅助实用程序来确定设备与原始图像尺寸相比的缩放比例,因为与 iphone 不同,android 确实有几乎无限的屏幕分辨率变化,以及一个简单的“比例”如果您想在任何其他设备上使用它,现在的实用程序代码将为您节省大量时间。

    【讨论】:

    • 您对使用该精灵表程序有任何指导或帮助吗?据我所知,它只链接图像,我基本上只使用 2 张图像作为移动精灵,1 张作为背景,所以我需要更多解释这个精灵表是如何在 Cocos2D 中工作的。此外,我确实告诉 Cocos2D 缩放渲染大小并保持纵横比,但我已经尝试以编程方式缩放背景图像,但效果并不好。你的意思是当我加载它时我应该缩小物理图像纹理?
    • 此外,即使只有 75% 的物理缩小比例然后放大以进行渲染,图像也能很好地工作......
    【解决方案3】:

    您应该尝试使用一种添加背景的方法,我正在这样做,尝试这样做,希望它对您有所帮助...这里 addBackGroundScene 是我的方法,我正在使用这种方法添加我的背景,scrXScaleFactor正在保持缩放我的屏幕的一部分试试这个......

    private void addBackGroundScene() {
            CCSprite bgForLevel1 = addBackgroundAtOrigin("prelevel1/bgMenu.jpg");
            bgForLevel1 .setScaleX(scrXScaleFactor);
                bgForLevel1 .setAnchorPoint(0, 0);          
                addChild(bgForLevel1 );
    
        }
    

    【讨论】:

    • 谢谢,但这似乎与仅在构造函数中制作背景没有太大区别。我确实在放大图像,但我的偏好是能够使用全尺寸图像作为背景,而不必放大较小的图像。
    猜你喜欢
    • 2014-10-30
    • 1970-01-01
    • 2018-10-22
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多