1:
“void CreatorReader::parseColliders(cocos2d::Node* node, const buffers::Node* nodeBuffer) const
{
const auto& collidersBuffer = nodeBuffer->colliders();
const auto& groupIndex = nodeBuffer->groupIndex();
Collider *collider = nullptr;
for (const auto& colliderBuffer : *collidersBuffer)
{
const auto& type = colliderBuffer->type();
const auto& offsetBuffer = colliderBuffer->offset();
cocos2d::Vec2 offset(offsetBuffer->x(), offsetBuffer->y());
if (type == buffers::ColliderType::ColliderType_CircleCollider)
collider = new CircleCollider(node, groupIndex, offset, colliderBuffer->radius());
else if (type == buffers::ColliderType::ColliderType_BoxCollider)
{
const auto& sizeBuffer = colliderBuffer->size();
cocos2d::Size size(sizeBuffer->w(), sizeBuffer->h());
collider = new BoxCollider(node, groupIndex, offset, size);
}
else if (type == buffers::ColliderType::ColliderType_PolygonCollider)
{
const auto& pointsBuffer = colliderBuffer->points();
std::vectorcocos2d::Vec2 points;
for (const auto& pointBuffer : *pointsBuffer)
points.push_back(cocos2d::Vec2(pointBuffer->x(), pointBuffer->y()));
** collider = new PolygonCollider(node, groupIndex, offset, points);**
}
else
assert(false);
if (collider)
_collisionManager->addCollider(collider);
}
}
”
2:
“void ColliderManager::addCollider(Collider* collider)
{
const auto& result = std::find(_colliders.begin(), _colliders.end(), collider);
if (result == _colliders.end())
{
for (auto& other : _colliders)
if (shouldColider(collider, other))
_contracts.pushBack(new Contract(collider, other));
_colliders.pushBack(collider);
}
}
”
这些加黑的标记都没有对应的 Delete 操作。