3

Learn COCOS2DブックのBOX2Dチュートリアルに従っていますが、コンソールで毎秒10回のようにこのエラーが表示され始めました。このエラーをグーグルで検索しましたが、関連する情報が見つかりませんでした。シェーダーファイルについて話している人もいますが、それらが何であるかはわかりません。複数のGLVIEWを使用しないように言っている人もいますが、私はそれを行っているとは思いません。以下は、実装ファイルのコード全体です。

エラーMSG:-[CCTextureAtlas drawNumberOfQuads:fromIndex:]556のOpenGLエラー0x0500

- (void)dealloc
{
    if(world){
        delete world;
        world = NULL;
    }
    if(debugDraw){
        delete debugDraw;
        debugDraw = nil;
    }
    [super dealloc];
}

+(id)scene{
    CCScene *scene = [CCScene node];
    PuzzleLayer *layer = [self node];
    [scene addChild:layer];
    return scene;
}

-(void)setupWorld{
    b2Vec2 gravity = b2Vec2(0.0f, -10.0f);
    //bool doSleep = true;
    world = new b2World(gravity);
}

-(void)createBoxAtLocation: (CGPoint)location withSize:(CGSize)size{
    CCLOG(@"Box location: %.0f, %.0f", location.x, location.y);
    b2BodyDef bodyDef;
    bodyDef.type = b2_dynamicBody;
    bodyDef.position = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);
    b2Body *body = world->CreateBody(&bodyDef);

    b2PolygonShape shape;
    shape.SetAsBox(size.width/2/PTM_RATIO, size.height/2/PTM_RATIO);
    b2FixtureDef fixtureDef;
    fixtureDef.shape = &shape;
    fixtureDef.density = 1.0;
    body->CreateFixture(&fixtureDef);
}

-(void)setupDebugDraw{
    debugDraw = new GLESDebugDraw(PTM_RATIO * [[CCDirector sharedDirector] contentScaleFactor]);
    world->SetDebugDraw(debugDraw);
}

-(void)draw{
    glDisable(GL_TEXTURE_2D);
    world->DrawDebugData();
    glEnable(GL_TEXTURE_2D);
}

-(id)init{
    if(self = [super init]){
        [self setupWorld];
        [self setupDebugDraw];
        [self scheduleUpdate];
        self.isTouchEnabled = YES;
    }
    return self;
}

-(void)registerWithTouchDispatcher{
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}

-(void)update:(ccTime)dt{
    int32 velocityIterations = 3;
    int32 positionIterations = 2;
    world->Step(dt, velocityIterations, positionIterations);
}
-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{
    CGPoint touchLocation = [touch locationInView:[touch view]];
    touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];
    touchLocation = [self convertToNodeSpace:touchLocation];
    b2Vec2 locationWorld = b2Vec2(touchLocation.x/PTM_RATIO, touchLocation.y/PTM_RATIO);
    [self createBoxAtLocation:touchLocation withSize:CGSizeMake(50, 50)];
    return TRUE;
}
4

1 に答える 1

5

OpenGLエラー0x0500=GL_INVALID_ENUM、openGLエラーの詳細については、こちらを確認してください

あなたのcocos2dバージョンは2.0以上だと思います。Cocos2d 2.0はopenGLES2.0を使用しており、openglイミディエートモードの呼び出しは許可されていません...コードglEnableが使用されていることを確認してください。

描画関数を次のように置き換えます

-(void) draw
{
    [super draw];
    ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
    kmGLPushMatrix();
    self.world->DrawDebugData();    
    kmGLPopMatrix();
}

これがもう1つのスレッドです。詳細については、同じスレッドを参照してください

于 2013-03-17T18:54:14.917 に答える