adsense



[건담계열 이것저것] 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] 에어울프


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


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


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



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

[cocos2d-x] ui 컴포넌트(Slider, CheckBox) 고유의 이벤트

슬라이더의 슬라이드 변경값을 실시간으로 체크하기

- gitbook의 용례를 보면 터치이벤트리스너를 사용하고 있는데, 이렇게 하면 슬라이드를 움직이고 있는 동안 값이 실시간으로 들어오지 않습니다.

- 슬라이드를 움직이는 동안 값을 계속 체크하려면 슬라이더 이벤트 리스너를 사용하는데, 3.17.x 이전 버전과 4.0에서 기술법이 크게 바뀌어서 정리해 둡니다.



//3.17.x under
{
auto slider = Slider::create();
slider->loadBarTexture(/*base texture*/);
slider->loadProgressBarTexture(/*progress texture*/);
slider->loadSlidBallTextures(/*ball normal, ball touched, bal disable, Widget::TextureResType*/);
slider->setPosition(/*Vec2*/);
addChild(slider);
 
slider->addEventListenerSlider(this, sliderpercentchangedselector(HelloWorld::changeSlider));
}
 
void HelloWorld::changeSlider(Ref* sender, SliderEventType type)
{
Slider* node = dynamic_cast<Slider*>(sender);
if (type == SliderEventType::SLIDER_PERCENTCHANGED)
{
float value = node->getPercent();
}
}
 
//4.0 over
{
auto slider = Slider::create();
slider->loadBarTexture(/*base texture*/);
slider->loadProgressBarTexture(/*progress texture*/);
slider->loadSlidBallTextures(/*ball normal, ball touched, bal disable, Widget::TextureResType*/);
slider->setPosition(/*Vec2*/);
addChild(slider);
 
slider->addEventListener((ui::Slider::ccSliderCallback)CC_CALLBACK_2(HelloWorld::changeSlider, this));//<-여기
}
 
void HelloWorld::changeSlider(Ref* sender, ui::Slider::EventType type)//<-여기
{
Slider* node = dynamic_cast<Slider*>(sender);
if (type == ui::Slider::EventType::ON_PERCENTAGE_CHANGED)//<-여기가 다르다
{
float value = node->getPercent();
}
}
 
 
체크박스도 비슷
3.17.x
checkbox->addEventListenerCheckBox(this, checkboxselectedeventselector(HelloWorld::clickCheck));
~
void HelloWorld::clickCheck(Ref* sender, CheckBoxEventType type)
 
4.0
checkbox->addEventListener((ui::CheckBox::ccCheckBoxCallback)CC_CALLBACK_2(HelloWorld::clickCheck, this));
~
void HelloWorld::clickCheck(Ref* sender, ui::CheckBox::EventType type)
 

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


Books

Geek라이프

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

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

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

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