数学ガールで受信する、問題の考え方

自分は数学が苦手なんですけど、最近プログラミングで使うことを覚えたら楽しくなってきました。 何に使うのか、Whyの答えが見えたからでしょうけど。

で、こういう何かを学ぶときって、考え方のコツみたいなものがあってそれをピピピッって受信できたら流れに乗れそうな感じがするんですよね。

数学ガールを読んでいると、いろんな考え方のキャラクターがいるので、そのキャラクターの中で自分の考え方に近い人を見つけて、そのキャラに対して説明された内容でどんどん覚えていけるのが素敵です。 (ちなみに秘密のノートシリーズが現在の自分に合うレベルでした)

数学記号はややこしいけど、数学者が楽をするためにつけた省略なんだよとか、

ユーリ「数学者って短く書くのが好きなの? しょっちゅうナントカを定義して短く書いているよね」

僕「短い方が計算が楽だからじゃないかな。計算が楽というか、書くのが楽というか。……

第119回 イチからゼロを通り越し(前編)|数学ガールの秘密ノート|結城浩|cakes(ケイクス)

問題を解くには、ポリアの問いかけを考えるといいよとか。

  • 問題の一部分を解くことはできるか
  • 求めるものは何か
  • 与えられているものは何か

数学ガールの秘密ノート/丸い三角関数

他にも数学の考え方を挟みつつ証明をしていくこの数学ガールシリーズ、お勧めです。 とりあえずポリアの問いかけが載っている書籍を貼っておきますね。

数学ガールの秘密ノート/丸い三角関数

数学ガールの秘密ノート/丸い三角関数

今回のタイトルや内容の『受信する』は、cakesで配信されている秘密のノート最新回で ユーリがやっていたので、ピピピッと受信して決めました。

cakes.mu

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でやりました。

github.com

コンバーターを起動したら、とりあえず.sspjファイルをドラッグ&ドロップして変換してみます。
特に問題なければ、プログラムコードの修正へ。

 

・全角文字エラー対策
Wikiより。

この時、全角があるとエラーが出ます。
ファイル名に全角文字を使用しないでください。
セル名、パーツ名、ラベル名に全角文字を使用しないでください。

上記以外に、ファイルパスにも全角あるとエラーになるので、
とりあえず.ssae、.ssceをテキストエディタで開いて、全角文字をひと通り無くします。自分は適当に半角英語に置換しておきました。

全角がなくなると、変換できると思います。
これで.ssbpファイルが出来ました。

 

2.プログラムコードの修正

次に、プログラムに反映します。

必要なファイルは、ssbpファイルと、エクスポート時に出力されていた画像ファイルです。

大体は

github.com

に書いてあるんですけど、
これだけだとわかりにくい部分を補足。

 

移行のサンプルコードにて、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を読みましょう。実は解決策が書いてあったりします。

github.com

 

でも原因がわからないと、解決策がわからないような部分があるので注意。

(テクスチャUV崩れる問題がそうでした)

 

FAQは、症状から検索できて、それの解決法を書くのが便利だと思いました。