0

这让我发疯。我必须在实现模拟侧视图中的水的 CCNODE 类的实现中进行下一个分配的 GLfloat(它来自我在 cocos2dForum 中找到的一个类)更新:

-(id)initWithBounds:(CGRect)bounds count:(int)count damping:(float)damping diffusion:(float)diffusion;
{

    if((self = [super init])){
        _bounds = bounds;
        _count = count;
        _damping = damping;
        _diffusion = diffusion;

        _color = ccc4f(1.0f, 1.0f, 1.0f, 1.0f);

        _h1 = calloc(_count, sizeof(float));//Here 
        _h2 = calloc(_count, sizeof(float));// And here, is where I get the error.




        WaterTexture = [[CCTextureCache sharedTextureCache] addImage:@"watter.png"];
        //shader_ = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_Position_uColor];
        shader_ = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTexture];
        _textureLocation = glGetUniformLocation(shader_->_program, "u_texture");
        texturesize= 256*CC_CONTENT_SCALE_FACTOR();
        offset=0;

    }

    return self;
}

- (void)dealloc
{
free(_h1);
free(_h2);

[super dealloc];
}

此类在 Cocos3d 项目中实现。在添加 Box2d 库之前,一切正常,模拟了水,但是在添加 Box2D 库之后,XCode 开始抱怨说“从不兼容的类型 void 分配给 GLfloat” 为什么会发生这种情况?这真的很罕见......问候。卡洛斯。

4

1 回答 1

1

我假设 _h1 的类型是 CGFloat* 或 CGFloat[] - 如果它不是指针类型,那么这是一个问题。另一件事是 calloc 返回 void* 所以你需要转换它的返回值:

_h1 = (CGFloat*)calloc(..);

添加 Box2D 后发生错误很可能是由于 Objective-C++ 的行为与 Objective-C 编译器不同,显然在这种情况下它不会执行隐式转换,需要您手动添加转换。也许尽管编译器已经警告过你,但现在它被视为一个错误(因此建议:永远不要忽略警告!)。

于 2013-06-06T08:58:59.040 回答