through, though, thought
パッと見で、以下の単語の見分けがつかない。
- through
- though
- thought
各意味は、
- ~を通り抜けて、~を手段として
- ~にもかかわらず、たとえ~でも、~だけど
- 思考(thinkの過去・過去分詞形)
並べてみると、やっぱり見分けがつかない。
through, though, thought
・though・through・thoughtこの三種の単語の読み方が綴りが似ているの... - Yahoo!知恵袋
thoroughという単語もある。恐ろしい。 (意味は、完全な・徹底的なという意味)
SpriteStudio For cocos2d-xを、SSPlayerからSS5Player移行したメモ
Wikiやりながらやったけど、結構時間かかったのでメモ。
1.ssbp形式への変換
sspjなどのプロジェクトを開けるファイル一式データを用意します。
- .sspj
- .ssae
- .ssce
- 元画像ファイル(多分不必要)
データを直接いじる可能性があるので、バックアップも取っておいたほうがいいです。
・データをコンバートする
コンバーターをダウンロードします。
自分はMacでやりました。
コンバーターを起動したら、とりあえず.sspjファイルをドラッグ&ドロップして変換してみます。
特に問題なければ、プログラムコードの修正へ。
・全角文字エラー対策
Wikiより。
この時、全角があるとエラーが出ます。
ファイル名に全角文字を使用しないでください。
セル名、パーツ名、ラベル名に全角文字を使用しないでください。
上記以外に、ファイルパスにも全角あるとエラーになるので、
とりあえず.ssae、.ssceをテキストエディタで開いて、全角文字をひと通り無くします。自分は適当に半角英語に置換しておきました。
全角がなくなると、変換できると思います。
これで.ssbpファイルが出来ました。
2.プログラムコードの修正
次に、プログラムに反映します。
必要なファイルは、ssbpファイルと、エクスポート時に出力されていた画像ファイルです。
大体は
に書いてあるんですけど、
これだけだとわかりにくい部分を補足。
移行のサンプルコードにて、SSPlayerの作成までは同じ処理の代用になっていますが、
// ImageList(png名)の読み込み
ssPlayer->setData("sample");
// "ssae名/アニメーション名"で呼び出し可
ssPlayer->play("sample/hoge");
ここの引数の意味を調べる必要があります。
・setDataの引数
setDataが SSImageList::createでやっていた処理と同じく、画像を読み込む処理になります。
このsetDataの文字列は.ssceの名前じゃなくて、読み込んだ.ssbpの名前を指定する必要があるみたいです。
コメントではpng名と書いてあるのですが、png名で読み込めるパターンがあるのでしょうか……?
・play関数の引数
play関数の引数のアニメーション名は、以前は指定しなくても動いていた?ので、調べる必要があります。
再生するアニメーション名の調べ方ですが、
まず、ssaeファイルをテキストエディタで開き、animeListタグを探します。
<animeList>
<anime>
<name>animation</name>
この、animeタグ内のnameタグに囲まれている文字列を、playするときに指定する必要があります。(この場合animation)
ssPlayer->play("[.ssaeのファイル名]/animation");
こんな感じ。
自分の場合は、もともと1ファイルにつき1アニメーションだったので、1つの指定でいけました。複数ある場合は複数調べて、アニメーション切り替えタイミングでそのアニメーション名を指定すればいけるはず。
3.テクスチャのUV座標が崩れる問題
これで再生されたと思ったら、テクスチャのUVがグチャグチャになる人が出てくると思います。ぱっと見、なんとなくUV座標がおかしいのはわかるのですが、変換がミスったのか、再生するプログラムが悪いのか、わかりづらいので困りますね。
この問題は、cocos2dx側でDirector::getInstance()->setContentScaleFactorを呼んでいる場合に起こります。
対策は、Wikiに書いてあるとおり、
UVをスケールに合わせて補正する
Playerクラスのメンバ関数setContentScaleEneble()にtrueを設定すると、cocosに設定されたスケールからUVを補正して表示します。
ssPlayer->setContentScaleEneble(true);を呼ぶと解決すると思います。
この問題の解決策、マルチ解像度対応についての注意点に書いてあったので、原因を探すのに時間かかりました……
これで動くはず。
あとアニメーション再生が早いと思ったら、ssPlayer->setStepとかで調整すればいいと思います。
4.上記で解決しない、他にわからないことがあったら?
Wikiを読みましょう。実は解決策が書いてあったりします。
でも原因がわからないと、解決策がわからないような部分があるので注意。
(テクスチャUV崩れる問題がそうでした)
FAQは、症状から検索できて、それの解決法を書くのが便利だと思いました。
実現駆動開発と知識駆動開発
Xを実現したいことと定義する。
今までの自分は、将来的にXをやるためにXの知識を得ようと思い、勉強をしてきました。
これは知識駆動開発。
これからの自分は、将来的にXをやるためにXを実装していこうと行動する。
これを実現駆動開発。
と勝手に呼びます。
こういうのは、単語を定義しておくのが自分の中で納得いくと思われる。
実現駆動開発は、知識駆動開発時にメインになる『改善』をちゃんと取り入れないと、実現はできたけど実行速度が遅いとかツメが甘いことが多々起こると思いますので、PDCAサイクルはやるべきでしょう。
さらに、実現したいことが出てこないと動けないので、仕事などでは後出しになりがちで時代に一歩遅れることが起きやすい。
既に実現されていることなのに、実装の試行錯誤が凄い時間がかかるなどデメリットももちろんある。
(実現したいことが最新技術の時もあると思いますが、日本の業界では情報も少なく、チャレンジはなかなかできなさそう……)
ただそれに比べて知識駆動開発は、結局何に使うの?といったことが起こりやすいので、日本の学校の勉強に近い気がする。個人的にこの知識を得たというきっかけはあまりモチベーションが続かないし、使いどころがわからなくて知識とのギャップが大きく、時間を浪費しやすい。だけど、知識は既に書いてあることを詰め込むだけなので手を出しやすい。使うところがわかると、すごくワクワクしますけどね。
最近数学が楽しいのも、プログラミングに使うことで便利なことに気づいたからですし、それがある理由を経験から感じることって大事だ。
経験はイメージ記憶になるでしょうし、概念としても取り出しやすそう。
以上の考えから、経験から感じるためには、実現に向かわなくてはいけない。
……でもなんというか、既に方法があるなら、こういう方法があるよって教えてくれる環境って成長速度に非常に影響があると思う。そういうためにも、「一番下手なプレイヤーであれ」という環境に、どんどん突っ込むべきかなと。
いい先生・師匠に会うってすごく大事。
というわけで、来月とある塾に通います。果たしてその結果は……?