现在使用的cocos2dx 版本为3.3.骨骼动画是用spine作的,其中主角很奇怪,导入工程运行时候,经常会crush,偶尔又是正常的.
crush的代码是cocos2dx 给spine封装用的PolygonBatch.cpp flush()里面的glDrawElements这句,附件我会给出spine的资源,创建骨骼动画的lua语句如下
local skeletonNode = sp.SkeletonAnimation:create(self._Bonespng … “.json”, self._Bonespng … “.atlas”,1)
skeletonNode:registerSpineEventHandler(function (event)
self:animationEventListen(nil,nil,nil,event.eventData.name)
end, sp.EventType.ANIMATION_EVENT)
skeletonNode:setPosition(cc.p(0,0))
skeletonNode:addAnimation(0, “attack”, false)
skeletonNode:addAnimation(0, “death”, false)
skeletonNode:addAnimation(0, “hit”, false)
skeletonNode:addAnimation(0, “idle”, true)
skeletonNode:addAnimation(0, “run”, true)
如下:
void PolygonBatch::flush () {
if (!_verticesCount) return;
GL::bindTexture2D(_texture->getName());
GL::bindVAO(0);
glEnableVertexAttribArray(GLProgram::VERTEX_ATTRIB_POSITION);
glEnableVertexAttribArray(GLProgram::VERTEX_ATTRIB_COLOR);
glEnableVertexAttribArray(GLProgram::VERTEX_ATTRIB_TEX_COORDS);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(V2F_C4B_T2F), &_vertices.vertices);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(V2F_C4B_T2F), &_vertices.colors);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_TEX_COORDS, 2, GL_FLOAT, GL_FALSE, sizeof(V2F_C4B_T2F), &_vertices.texCoords);
glDrawElements(GL_TRIANGLES, _trianglesCount, GL_UNSIGNED_SHORT, _triangles);
CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, _verticesCount);
_verticesCount = 0;
_trianglesCount = 0;
CHECK_GL_ERROR_DEBUG();
}
}
}
