adsense



[건프라] 3월 결산

핫따 시간 잘 간다. 벌써 3월이 끝나가네요.


어쩌다보니 3월 완성작은 모두 건프라입니다.


고대콩 봤습니다. 걸판 최종장 4DX 이후 딱 1년만의 영화관람..
도시를 그야말로 가루로 만들어버리는 최고의 괴수액션을 볼 수 있었지만, 한편으론 지쳐보이는 두 괴수가 짠하기도..


이어지는 내용

[건담계열 이것저것] 2월 결산


모형에 돈 안쓰고 가급적 있는 것만 완성하려 했는데 신너같은 소모품 떨어진 건 어쩔 수가 없네요.
모형이 큰 돈 드는 취미는 아닌데 그렇다고 또 무과금(?)으로 가능한 취미도 아닌..

[반다이] 피규어라이즈라보 호시노 후미나

1착은 역시 쉽게(?) 완성시킬 수 있는 피규어라이즈라보로.


이어지는 내용

[이것저것] 힘내본 1월 결산(?)

반다이 엔트리그레이드 팩맨


이어지는 내용

[cocos2d-x] JSON <-> ValueMap convert

/*Header*/
Value parseJSON2Value(rapidjson::Value& value);
ValueMap JSON2ValueMap(string jsonstr);
string parseValueMap2JSON(const Value& value);
string ValueMap2JSON(ValueMap vdata);
 
/*cpp*/
Value parseJSON2Value(rapidjson::Value& value)
{
switch (value.GetType())
{
case rapidjson::Type::kTrueType:
return Value(true);
break;
case rapidjson::Type::kFalseType:
return Value(false);
break;
case rapidjson::Type::kNullType:
return Value();
break;
case rapidjson::Type::kStringType:
return Value(value.GetString());
break;
case rapidjson::Type::kNumberType:
if (value.IsDouble())
return Value(value.GetDouble());
if (value.IsInt())
return Value(value.GetInt());
if (value.IsFloat())
return Value(value.GetFloat());
break;
case rapidjson::Type::kArrayType:
{
ValueVector _vector;
for (rapidjson::SizeType i = 0; i < value.Size(); i++)
{
auto _element = parseJSON2Value(value[i]);
_vector.push_back(_element);
}
return Value(_vector);
}
break;
}
 
return Value();
}
ValueMap JSON2ValueMap(string jsonstr)
{
ValueMap result;
 
rapidjson::Document d;
if (d.Parse(jsonstr.c_str()).HasParseError())
{
CCLOG("parse error %d", (int)(d.Parse(jsonstr.c_str()).GetParseError()));
return result;
}
//d is rapidjson::Type::kObjectType
for (auto it = d.MemberBegin(); it != d.MemberEnd(); ++it)
{
string _key = it->name.GetString();
auto _element = parseJSON2Value(it->value);
result[_key] = _element;
}
 
return result;
}
 
string parseValueMap2JSON(const Value& value)
{
string ret;
switch (value.getType())
{
case Value::Type::BOOLEAN:
ret = value.asBool() ? "true" : "false";
break;
case Value::Type::DOUBLE:
ret = SPRINTF("%f", value.asDouble());
break;
case Value::Type::FLOAT:
ret = SPRINTF("%f", value.asFloat());
break;
case Value::Type::INTEGER:
ret = SPRINTF("%d", value.asInt());
break;
case Value::Type::STRING:
ret = SPRINTF("%s", value.asString().c_str());
break;
case Value::Type::VECTOR:
{
ret = "[\n";
for (const auto val2 : value.asValueVector())
{
auto element = parseValueMap2JSON(val2);
ret += SPRINTF("%s,", element.c_str());
}
ret = ret.substr(0, ret.length() - 1);
ret += "\n]";
}
break;
}
 
return ret;
}
string ValueMap2JSON(ValueMap vdata)
{
string jsonwriter = "{\n";
 
for (auto& keyval : vdata)
{
string key = keyval.first;
const Value& val = keyval.second;
auto element = parseValueMap2JSON(val);
jsonwriter += SPRINTF("\"%s\":%s,\n", keyval.first.c_str(), element.c_str());
}
jsonwriter = jsonwriter.substr(0, jsonwriter.length() - 2);
jsonwriter += "\n}";
 
rapidjson::Document d;
if (d.Parse(jsonwriter.c_str()).HasParseError())
{
CCLOG("parse error %d", (int)(d.Parse(jsonwriter.c_str()).GetParseError()));
return "";
}
 
return jsonwriter;
}



JSON 문자열을 ValueMap으로 : JSON2ValueMap

ValueMap을 JSON 문자열로 : ValueMap2JSON

지원하는 자료형 : int, float, double, bool, string, array(ValueVector)

※ValueVector에 자료형을 섞어넣으면 변환된 JSON문자열은 파싱 에러가 납니다. 특히 number형은 int면 int, float면 float 명시 필요

주된 용도 : 게임 중에는 ValueMap으로 데이터를 관리하고, 서버에 데이타를 업로드 할 때는 JSON 문자열 하나로 만들어서 올리기

[매지카복셀+유니티3D] 에어울프


복셀에서 에어울프를 디자인


바디, 메인로터, 테일로터로 나누고 방향을 정렬


유니티에서 불러오고 로터의 위치를 맞춰준 후 스크립트 추가



♪두두두 ↗두두두 두↘두두 두두두♪

1 2 3 4 5 6 7 8 9 10 다음


Books

Geek라이프

메가 드라이브 퍼펙트 카탈로그
마에다 히로유키 저/조기현 역

미소녀 일러스트 테크닉
B-은하, pen스케, 카와이 저/정유진 역

핵심강좌! Cocos2d-x
이재환 저

피규어의 교과서 레진 키트 & 도색 입문 편
후지타 시게토시 저/김정규 역
예스24 | 애드온2
일본서적 전문사이트 NEPIC