【问题标题】:CCSprite not displayed correctly when using SpriteFrame使用 SpriteFrame 时 CCSprite 无法正确显示
【发布时间】:2015-08-06 12:55:13
【问题描述】:

我的 iOS 应用程序(使用 CocosSharp 构建,用于 Xamarin 的 Cocos2D 端口)以 640x960 像素的设计分辨率运行,并且我有一些从 spritesheet 加载的 64x64 精灵。
我正在使用 TexturePacker 创建 spritesheets,并对其进行了配置,因此它在帧之间没有任何间距。
每帧都是 64x64 像素,当我检查 spritesheet 时,它看起来非常好。

当我尝试基于帧 (SpriteFrame) 显示 CCSprites 时,它在设备上运行时看起来总是一团糟(iPhone 4)

如果我将每个帧保存为单独的精灵并显示它们,它可以正常工作,但当我使用 SpriteFrame 和精灵表显示它们时就不行了。

这是它在设备上的样子:

这是它在模拟器中的样子:

还有其他人经历过这种情况吗?
非常感谢所有帮助,我已经坚持了一天!

更新:
这是一个演示该问题的小演示解决方案(需要 Xamarin iOS 构建)。
您可以在模拟器或设备上运行它,两者都显示相同的问题。

SpriteFrame_Issue.zip

【问题讨论】:

  • 这是 .pvr 吗? cocos2d 什么版本?
  • 这是一个包含框架的PLIST。它是 CocosSharp 1.5.1,它是 Cocos2D 的一个端口。如果我手动为精灵帧指定 CCRects,也会出现此问题。
  • 好的...不确定为什么您需要使用 C# 版本为帧编码纹理裁剪...但是在我看来,它看起来像是一个围栏问题... texturePacker plists位置通常从 0 开始。
  • 但是为什么它会在模拟器中完美运行呢?
  • 添加了显示问题的演示代码

标签: cocos2d-iphone xamarin cocossharp


【解决方案1】:

我不适合'播放'csharp ...但是:plist ok,texture ok,代码看起来不错。此问题是“裁剪”问题,而不是渲染问题。

这让我想起了背景滚动条的一个常见问题,即在 2 个相邻纹理之间突然出现 1 px 的偏移!原来它与“幕后” int->float->int 转换有关,混合了放大/缩小,最终从“浮动”舍入中为您购买了一个额外的像素作为偏移量。对于这种异常,我能提供的最好的方法是“去库中查找”,专注于“spriteFrame”代码库。提示:模拟器是64位的,iPhone 4不是。

【讨论】:

  • 你是个天才!我从未想过 64/32 位的差异,但它非常有意义!我将与 CocosSharp 人员讨论这个问题,看看是否可以修复它。同时,我创建了带有选项“extrude:1,border:2,padding:2”的精灵表,这在很大程度上修复了它,因为“extrude”在每个帧的外部添加了一些额外的像素跨度>
猜你喜欢
  • 2020-09-24
  • 1970-01-01
  • 2021-10-06
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2020-01-06
  • 2020-01-28
相关资源
最近更新 更多