-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
243 lines (183 loc) · 9.7 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[kuroyam's blog]]></title>
<link href="http://kuroyam.github.io/atom.xml" rel="self"/>
<link href="http://kuroyam.github.io/"/>
<updated>2014-05-14T01:06:17+09:00</updated>
<id>http://kuroyam.github.io/</id>
<author>
<name><![CDATA[kuroyam]]></name>
</author>
<generator uri="http://octopress.org/">Octopress</generator>
<entry>
<title type="html"><![CDATA[picojsonを使ってみた]]></title>
<link href="http://kuroyam.github.io/blog/2014/05/13/picojson/"/>
<updated>2014-05-13T23:46:00+09:00</updated>
<id>http://kuroyam.github.io/blog/2014/05/13/picojson</id>
<content type="html"><![CDATA[<p><a href="https://github.com/kazuho/picojson">kazuho/picojson</a></p>
<p>久々にcocos2d-xでゲームを作っているけれど、plistでデータを持つのはC++11っぽくないし、<br/>
jsonを使いた〜い、ということでC++のjsonライブラリを探していた。</p>
<p>なにやら rapidjson と picojson がよさげとのこと。<br/>
ブログ記事とかあさった感じだと</p>
<p>速さ: rapidjson > picojson<br/>
使いやすさ: picojson > rapidjson</p>
<p>という感じらしい。<br/>
C++を使いこなしてるわけでもないので今回は使いやすいという picojson を使ってみることにした。</p>
<hr />
<h4>使ってみた</h4>
<p>例えばこういうjsonがあるとして</p>
<pre><code>{
"width" : 10,
"height" : 10,
"mapchips" : [
1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
1, 1, 1, 0, 1, 0, 0, 0, 0, 1,
1, 1, 0, 0, 1, 0, 0, 0, 0, 1,
1, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 3, 3, 0, 0, 0, 0, 1,
2, 2, 2, 2, 3, 2, 2, 2, 2, 3,
2, 2, 2, 2, 2, 2, 2, 2, 3, 3
]
}
</code></pre>
<p>こんな感じでパースできる</p>
<pre><code>void TerrainNode::parseJson(const char* jsonString)
{
picojson::value value;
std::string error;
picojson::parse(value, jsonString, jsonString + strlen(jsonString), &error);
if (!error.empty()) {
log("Json parse error: %s", error.c_str());
}
picojson::object& object = value.get<picojson::object>();
_width = object["width"].get<double>();
_height = object["height"].get<double>();
picojson::array& array = object["mapchips"].get<picojson::array>();
for (auto i = array.begin(); i != array.end(); i++) {
_mapChips.push_back(static_cast<Terrain>(static_cast<int>(i->get<double>())));
}
}
</code></pre>
<hr />
<h4>感想</h4>
<ul>
<li>ヘッダファイル一個なので簡単に使えるのがいい</li>
<li>数値をdoubleで取得するのでenum classにキャストするときに2回やらなくちゃいけない</li>
<li>とはいえかなりお手軽に使えるのでとてもありがたい</li>
</ul>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[cocos2d-x3.0betaでの変更点をざっくりまとめた]]></title>
<link href="http://kuroyam.github.io/blog/2014/01/08/cocos2dx3-dot-0-beta-update/"/>
<updated>2014-01-08T23:03:00+09:00</updated>
<id>http://kuroyam.github.io/blog/2014/01/08/cocos2dx3-dot-0-beta-update</id>
<content type="html"><![CDATA[<h2>・create_project.py</h2>
<p>旧:</p>
<pre><code>./create_project.py -p KusoGame -k com.kuroyam.kusogame -l cpp
</code></pre>
<p>新:</p>
<pre><code>./create_project.py -n KamiGame -k com.kuroyam.kamigame -l cpp -p /User/kuroyam/dev/game
</code></pre>
<p>プロジェクト名は<code>-p</code>ではなく<code>-n</code>で指定、そのかわりに<code>-p</code>でプロジェクトが作られる場所を自由に指定できるようになったようです。</p>
<h2>・proj.iosとproj.macの統合</h2>
<p>proj.ios_macとなり、xcodeprojも一つに。</p>
<h2>・入力周りが大きく変更</h2>
<p><code>TouchDispatcher</code>が削除され<code>EventDispatcher</code>を使う形に変更されました(alphaからあったっぽい?)。<br/>
名前がちょろっと変わっただけかなとおもいきや、けっこう大きく変わっているので詳細は公式で・・・</p>
<p>・<a href="http://www.cocos2d-x.org/cocos-docs/manual/framework/native/input/event_dispatcher/en">Mechanism of EventDispatcher</a></p>
<p>スマホだけに作る場合は余計にめんどくさくなった感じもするけれど、PC向けに作ったり、スマホとPCどっちもって時には<code>EventDispatcher</code>のほうがよさげっぽい。<br/>
Layerだけじゃなくて各Nodeに<code>EventListener</code>を割り当てられるっぽいので、Layerがごちゃごちゃにならなくて済みそう。<br/>
ここらへんはもうちょっと突っ込んで調べる。</p>
<h2>cocos2d::Vector<>とcocos2d::Map<>の追加</h2>
<p>std::でもよくね?という感じが。<br/>
余談だけど地図という意味でMapという名前のクラスを作ってたので衝突してしまった・・・</p>
<h2>・まとめ</h2>
<p>たぶんこれで全部ではない気がする。<br/>
全体的にC++11っぽく、クロスプラットフォームを意識して進化してるといった印象。<br/>
alphaと完全に互換してるわけではないけど、新規で作ったプロジェクトに/Classと/Resourceをコピペして、<code>EventDispatcher</code>対応をすれば乗り換えもそこまで大変ではないかな。</p>
<hr />
<p>参考<br/>
<a href="http://www.cocos2d-x.org/news">http://www.cocos2d-x.org/news</a></p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[cocos2d-xとラムダ式でCCCallBlockっぽいことをする]]></title>
<link href="http://kuroyam.github.io/blog/2013/10/26/cocos2d/"/>
<updated>2013-10-26T23:50:00+09:00</updated>
<id>http://kuroyam.github.io/blog/2013/10/26/cocos2d</id>
<content type="html"><![CDATA[<p>cocos2d for iPhoneには CCCallBlock というすごく便利なメソッドがありました。</p>
<p>アニメーションシーケンスの中でblocksを呼べちゃうやつですね。<br/>
アニメーション終了時になにか処理したいときとか、callbackとしてblocksを渡したりしたいときに便利でした。</p>
<pre><code>- (void)deadAnimation {
id animation = [CCAnimation animationWithSpriteFrames:_frames];
id animate = [CCAnimate actionWithAnimation:animation];
id blocks = [CCCallBlock actionWithBlock:
^{
[_sprite removeFromParentAndCleanup:YES];
[_score addScore:1000];
[_sound playSE];
}];
id sequence = [CCSequence actions:animate, blocks, nil];
[_sprite runAction:sequence];
}
</code></pre>
<p>cocos2d-x2.xではblocksを使えないのでCCCallFuncを使うしかありません。</p>
<pre><code>void Hoge::deadAnimation() {
CCAnimation animation = CCAnimation::createWithSpriteFrames(mFrames);
CCAnimate animate = CCAnimate::create(animation);
CCCallFunc func = CCCallFunc::create(this, callfunc_selector(Hoge::dead));
CCSequece sequence = CCSequence::create(animate, func, NULL);
mSprite->runAction(sequence);
}
void dead() {
mSprite->removeFromParentAndCleanup(true);
mScore->addScore(1000);
mSound->playSE();
}
</code></pre>
<p>cocos2d-x3.0からC++11に対応したらしいのでラムダ式とか使ってCCCallBlockっぽく書けます。</p>
<pre><code>void Hoge::deadAnimation() {
auto animation = Animation::createWithSptireFrames(mFrames);
auto animate = Animate::create(animation);
auto func = CallFunc::create(
[&](){
mSprite->removeFromParentAndCleanup(true);
mScore->addScore(1000);
mSound->playSE();
});
auto sequence = Sequence::create(animate, func, nullptr);
mSprite->runAction(sequence);
}
</code></pre>
<p>インデントがちょっとすっきりしないけど、わりといい感じ!</p>
<p>ちなみにcallbackを受け取りたいときは</p>
<pre><code>void Hoge::hogeAnimation(const std::function<void ()> &func) {
auto animation = Animation::createWithSptireFrames(mFrames);
auto animate = Animate::create(animation);
auto callback = CallFunc::create(func);
auto sequence = Sequence::create(animate, callback, nullptr);
mSprite->runAction(sequence);
}
</code></pre>
<p>みたいにできるはず。</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Hello Octopress]]></title>
<link href="http://kuroyam.github.io/blog/2013/10/24/octopress/"/>
<updated>2013-10-24T23:11:00+09:00</updated>
<id>http://kuroyam.github.io/blog/2013/10/24/octopress</id>
<content type="html"><![CDATA[<p>もっとアウトプットしていこうと思ったので。</p>
<p>なんかこう、エンジニアっぽい感じがするって理由で Github Pages と Octopress を使うことにした。<br/>
Markdownの練習も兼ねてる</p>
<hr />
<p>参考<br/>
・<a href="http://tokkonopapa.github.io/blog/2011/12/30/octopress-on-github-and-bitbucket/">Octopressのインストールから運用管理まで – T.I.D.</a><br/>
・<a href="http://blog.glidenote.com/blog/2011/12/20/how-to-use-custom-domain-on-github-pages/">GitHub PagesでCustom Domainを利用する – Glide Note – グライドノート</a></p>
]]></content>
</entry>
</feed>