【问题标题】:Enabling debug draw on CCPhysicsNode causes crash在 CCPhysicsNode 上启用调试绘制会导致崩溃
【发布时间】:2016-06-30 10:59:19
【问题描述】:

版本:Cocos2D V3.4、Xcode 7.2.1、SpriteBuilder 1.4.9。

你可以下载我的项目here。它是用 SpriteBuilder 创建的。

在 CCPhysicsNode 上启用调试绘制会导致崩溃:

CCPhysicsNode *_physicsWorld;


_physicsWorld = [CCPhysicsNode node];
_physicsWorld.gravity = ccp(0,0);
_physicsWorld.debugDraw = YES;//if debugDraw set to NO, crash will not occur, it happens only when its set to YES
_physicsWorld.collisionDelegate = self;
[_scene addChild:_physicsWorld];

错误:

-[CCRenderStateGL 中的断言失败 initWithBlendMode:shader:shaderUniforms:copyUniforms:]

我将物理体添加到 CCSprite 的代码:

  _PlayerSprite.physicsBody = [CCPhysicsBody bodyWithRect:(CGRect){CGPointZero, _PlayerSprite.contentSize} cornerRadius:0]; // 1 

  _PlayerSprite.physicsBody.collisionGroup = @"playerGroup"; // 2

  [_PhysicsWorld addChild:lobjPlayerSprite
                        z:Z_ORDER_PLAYERS];

然后代码在CCRendererBasicTypes initWithBlendMode 崩溃:

-(instancetype)initWithBlendMode:(CCBlendMode *)blendMode shader:(CCShader *)shader shaderUniforms:(NSDictionary *)shaderUniforms copyUniforms:(BOOL)copyUniforms

crashes here:-
NSAssert(shader, @"CCRenderState: Shader is nil");

【问题讨论】:

  • 请解释其发生的原因
  • 编辑问题的标题。真的吓到我了。
  • 这意味着它为你工作..我应该与你分享我的代码......所以你可以有更好的概述
  • 好的。共享,但只共享您认为有错误的代码的相关部分。
  • 这里是项目的链接:- github.com/ud230688/SpaceShooter.spritebuilder 这里是代码关注的相关函数名称:- [VisualWorld addPlayer] 和 [GamePlayScene initWithVisualWorld:(VisualWorld*)lobjVW 资源:(NSArray* )larrayResources].....如果您对项目中的代码有任何问题或疑问,请检查并让我知道。 @psyco

标签: ios iphone cocos2d-iphone physics spritebuilder


【解决方案1】:

您的项目是使用 SpriteBuilder 创建的,自 2015 年 4 月以来一直没有更新。SpriteBuilder 附带的 Cocos2D 版本在 Xcode 7 之前发布,不包括 Xcode 7 和 iOS 9 的一些必要修复。您可以阅读更多关于这个here

要解决这个问题,您需要手动更新 Cocos2D。按照上一个链接上的步骤操作或使用this 作为参考(更直观)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多