void Cocos2dxView::saveObjectData(JsonX &data, BaseObject *object)
{
	std::string tmp = object->getTypeName();
	const char *type_name = tmp.c_str();
	ObjectType type = object->getObjectType();

	if (!data.has(type_name))
		data.insertArray(type_name);

	//存储同一类型对象的通用属性到数组对象
	rapidjson::Value &arr = data[type_name];
	if (type == ObjectType::COMMON_OBJECT)
	{
		if (!getObjectAttr(type_name, object->getFileName())) return;

		rapidjson::StringBuffer buf;
		rapidjson::Writer<rapidjson::StringBuffer> writer(buf);
		getObjectAttr(type_name, object->getFileName())->getDocument().Accept(writer);
		rapidjson::Document attr(&data.getAllocator());
		attr.Parse<0>(buf.GetString());

		rapidjson::Value v(object->getFileName().c_str(), data.getAllocator());
		attr.AddMember("filename", v, data.getAllocator());

		arr.PushBack((rapidjson::Value&)attr, data.getAllocator());
	}
	else if (type == ObjectType::CIRCLE_OBJECT)
	{
		CircleObject *circle = (CircleObject *)object;
		rapidjson::Document attr(&data.getAllocator()); 
		attr.SetObject();
		rapidjson::Value point(rapidjson::kObjectType);
		point.AddMember("x", circle->getCenterPoint().x, data.getAllocator());
		point.AddMember("y", circle->getCenterPoint().y, data.getAllocator());
		attr.AddMember("center", point, data.getAllocator());
		attr.AddMember("radius", circle->getRadius(), data.getAllocator());

		arr.PushBack((rapidjson::Value&)attr, data.getAllocator());
	}
	else if (type == ObjectType::POLYGON_OBJECT)
	{
		PolygonObject *polygon = (PolygonObject*)object;
		rapidjson::Document attr(&data.getAllocator());
		attr.SetObject();

		//存储形状点集
		rapidjson::Value shape_arr(rapidjson::kArrayType);//shape_arr.SetArray()
		for (auto pos : polygon->getPolyPoints())
		{
			rapidjson::Value point(rapidjson::kObjectType);
			point.AddMember("x", pos.x, data.getAllocator());
			point.AddMember("y", pos.y, data.getAllocator());
			shape_arr.PushBack(point, data.getAllocator());
		}
		attr.AddMember("shape", shape_arr, data.getAllocator());

		arr.PushBack((rapidjson::Value&)attr, data.getAllocator());
	}

	//保存对象的特定属性
	rapidjson::Value &attr = (rapidjson::Value&)object->getObjectAttribute();
	for (auto iter = attr.MemberonBegin(); iter != attr.MemberonEnd(); iter++)
	{
		rapidjson::Value k(iter->name.GetString(), data.getAllocator());
		rapidjson::Value v(iter->value.GetString(), data.getAllocator());
		arr[arr.Size() - 1].AddMember(k, v, data.getAllocator());
	}

	//保存对象常规属性
	//rapidjson::Value &arr = data[type_name];
	rapidjson::Value v(rapidjson::kObjectType);
	v.AddMember("x", object->getPositionX(), data.getAllocator());
	v.AddMember("y", object->getPositionY(), data.getAllocator());
	arr[arr.Size() - 1].AddMember("position", v, data.getAllocator());

	rapidjson::Value sv(rapidjson::kObjectType);
	sv.AddMember("width", object->getSprite()->getContentSize().width, data.getAllocator());
	sv.AddMember("height", object->getSprite()->getContentSize().height, data.getAllocator());
	arr[arr.Size() - 1].AddMember("size", sv, data.getAllocator());

	arr[arr.Size() - 1].AddMember("rotate", object->getRotation(), data.getAllocator());
	arr[arr.Size() - 1].AddMember("scale", object->getScale(), data.getAllocator());
}