Cocos Studio v2をCocos2d-x3.3rc0で使ってみたメモ
ただのメモです。 あとで追記とかするかもです。
Cocos Studio v2.0.0.0beta0(for Mac)を使ってハマったことや、バグってるぽい箇所、v1.6.0.0で出来たことができないとかのメモ。
.csbと.csdをcocos2d-xで読み込む方法
.csd
: CocosStudio ドキュメント?(XMLっぽいファイル)- CocosStudioでイジるのはこっち
.csb
: CocosStudio バイナリ?(バイナリmsgパック?)- Publishすると吐出されるのがこっち
検証したのは、cocos2d-x3.3rc0
です。
.csd
cocos2d::Node *node = CSLoader::getInstance()->createNodeFromXML("HogeScene.csd"); this->addChild(node);
.csb
cocos2d::Node *node = CSLoader::getInstance()->createNodeFromProtocolBuffers("HogeScene.csb"); this->addChild(node);
良くなった点
- Macで作ったやつがcocos2d-xを改造しなくても読み込める
- 色々バグってたのが直ってる(Labelまわりとか)
色々あるんだけど、ぱっと思いつかない。。。
v1.6.0.0で出来たのに〜
- ListViewが使えない
- ルートノードに
Adaptive Resolution
を指定できない - Sizeに%を指定してもCocosStudio上で指定した画面サイズの%にしかならない
- Cocos2d-xで実際のDesignResolutionSizeを使用してくれない
バグっぽい
- publishしたcsbを読み込むとLabelに設定したOptionsが
ui::Text
反映されない- csdなら反映される
- 2014/11/29追記: Cocos2d-xの問題でした Modify that parsing attribute "fontName" of TextReader · 2ed51e0 · cocos2d/cocos2d-x · GitHub
- まだCocos2d-x3.3rc0に入ってない修正なので手動でパッチ当てが必要
- SceneのサイズがcontentSizeに反映されない(昨日PRして今日マージ済み)
- CocosStudioプロジェクト下にディレクトリを作成して、ディレクトリ内のNodeから別のcsdを参照するとパスがおかしくなる
- Labelの
AutoAdjust
がうまく効いてない時がある(最後の1文字が消える)- とりあえず、
AutoAdjust
やめてSizeを設定すれば大丈夫
- とりあえず、
2014/11/23追記:
- CocosStudio v1.6の時とかは設定できたZOrderがv2では設定不要になっているが、v1.6をimportすると隠しパラメータとして設定されているため、Layerの順番をどうやって変えても重なってしまう問題が起こる
- Vimとかで直接
.csd
を開いてZOrder=1
とかを全部削除すれば解消されます
- Vimとかで直接
注意点
- %でPositonやSizeを指定したNodeやPanelをコピペすると%が解除されてpxになる
- ひどいお。。。
.csd
間でNodeとかPanelをコピペできない(辛い)- Vimとかで直接開いて〜ってやればできそうなので、次バージョンで対応オナシャス!!!
- 2014/12/7追記:
Cut&Pasteを右クリックで行うと擬似コピー可能という裏ワザを発見 - 2015/1/12追記: v2.0.6で擬似コピー裏ワザ使えなくなった。。。バグ扱いで消えたか...
- UIEditorでつくったプロジェクトをv1.6.00のimportできるが、全部Node扱いになる(変更できない)
- 厳密にいうと直接.csdファイルをvimとかで開いてSceneにすればOK
- NodeのままだとAnchor周りの問題がおきる
- new Fileで作ったLayerは途中でサイズ変更できない
- vimとかで直接csdを開いてSizeをいじればなんとかなる
- Mac版だけかもしれないけど、名前入力中に勝手に半角スペースが挿入される時がある
- Google IMEのせい?
メモ
- Scale 9 Gridの設定の仕方が変わってる
- 引き伸ばさない部分のRectをpxで指定する感じになってる(Top, Bottom, Left, Right)
- マウスのスクロールで拡大縮小制御するには、「Preferences」 -> 「Mouse」 ->
Disable mouse wheel zoom
のチェックを外す - AnimationEditorで作ったやつのimportもできる
- SpriteFrameの切り替えが、それぞれSpriteが追加されてvisibleで切り替えたtimelineが作られる
- plistとpngのセットになったSpriteSheetもResourcesにimportできる
その他
publish先変える方法Qiitaに書いたけど、上記のバグ?でTextのOptionが読めてないから使ってない。(2014/12/6追記: Cocos2d-x3.3rc1では直ってます)
書いた / “cocos2d-x - Cocos Studio v2でpublish先のディレクトリを変更する方法 - Qiita” http://t.co/vInvqX1szZ
— きょこみ (@k_yokomi) October 29, 2014
今はプロジェクト直下にpublis.shを作って、CocosStudioで編集したら実行して(2014/12/6追記: Cocos2d-x3.3rc1では直ってるので、普通にpublishしてます).csd
を自分でrsyncしてる。
publish.sh
rsync -a --delete cocosstudio/ Resources/
ちょいちょい追記します。
Cocos2d-xで縦横いい感じのDesignResolutionSizeを指定する
以前の記事「Cocos2d-xでいい感じのDesignResolutionSizeを指定する」が縦画面の時にいい感じにならなかったので、調整しました。
環境
- Cocos2d-x3.3rc0
- CocosStudio 1.6.0.0(windows)
- Xcode6.1
ソースコード
使い方
上記のソースを丸コピーもしくはダウンロードしてプロジェクトに追加し、AppDelegate.cppで呼び出します。
AppDelegate.cpp
#include "AppDelegate.h" #include "GLViewUtil.h" USING_NS_CC; // 〜省略〜 bool AppDelegate::applicationDidFinishLaunching() { // initialize director auto director = Director::getInstance(); auto glview = director->getOpenGLView(); if(!glview) { glview = GLViewImpl::create("My Game"); director->setOpenGLView(glview); } // turn on display FPS director->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this director->setAnimationInterval(1.0 / 60); // ★横640は維持して640x960比率でフィットした画面にする(縦横の黒棒をなくす) auto fitSize = GLViewUtil::calcFitDesignResolutionSize(640, 960, GLViewUtil::FitType::WIDTH); glview->setDesignResolutionSize(fitSize.width, fitSize.height, ResolutionPolicy::SHOW_ALL); // create a scene. it's an autorelease object auto scene = HelloWorld::createScene(); // run director->runWithScene(scene); return true; } // 〜省略〜
CocosStudio側の配置
拡大時もいい感じの位置に配置するためには、以下を行います。
- RootNodeのPanelで
Adaptive Resolution
のチェックボックスをONにする - CocosStudio上で全部%でposition指定する
Adaptive ResolutionをONにする
Adaptive Resolution
のチェックボックスをONにするとWidget作成時にLayoutReader.cpp
の183行目辺りのLayoutReader::setPropsFromJsonDictionary
で、ContentSizeにCCDirector::getInstance()->getWinSize()
を設定してくれます。
CocosStudio上で全部%でposition指定する
結果
横 iPhone6+
縦 iPhone4s
縦 iPhone6
※2014/10/31 追記
上記の式を使うと(例: 640x960)で極稀にiPadAirなどが横幅(640px)を維持すると縦幅(960px)を維持できなくなるケースがあります。
その場合を考慮して、以下を用意しました。
基本はFitType::WIDTH
でwidth640を維持する形でいい感じのSizeに設定し、極稀なケースでheightが維持できなくなったら(960以下になる場合)FitType::HEGIHT
にしてのheight960維持する形に切り替わります。
auto fitSize = GLViewUtil::getFitDesignResolutionSize(640, 960, GLViewUtil::FitType::WIDTH); glview->setDesignResolutionSize(fitSize.width, fitSize.height, ResolutionPolicy::SHOW_ALL);
中でいい感じに計算した結果がもともとのhegith960以下になったらFitTypeをFitType::HEGIHT
に変更して再計算します。
こうするとwidthがおそらく640以上になるので、もともと画面の中央にSceneを配置するような工夫とかが必要です。
(よくある、vislbleSize.width /2 - layout->getContentSize().width /2
的なやつです)
かなり暫定的な処置なので、Androidの一部の端末だとダメなパターンとかあるかも・・・
こんな感じになります。
iPhone6
iPhone5s
iPhone4s
iPad Air
iPad2
nanapi勉強会 vol4に行ってきた感想
nanapi勉強会 vol4 - 【nanapi x はてな】はてなとnanapiの開発フロー
最近、感想ブログばかりになってます(笑
#nanapi_study 130人登録で、100人以上来てたのに、ブログ書いてる人あんまいないので、文化圏の違いもあるのかもしれないけど「blog書いてください」って言うの大事なんだなーとか思ったりしてる。941さんがイベントの度に毎回働きかけてるの大事なんだなーと。
— songmu (@songmu) 2014, 10月 6
確かに・・・このツイートみて書く気持ちが湧いてきたので、「blog書いてください」って言うの大事だなーと思いました。(す、すみません・・・)
内容
内容のまとめはこちらが参考になります。
めも帖 - nanapi 勉強会 vol.4 #nanapi_study に参加してきました
感想
というわけで、感想メインです。 (他の参加者で感想書かない人も自分と同じような感想で書きにくいのかなーとか思ってたり)
正直、この手の話は眩しすぎて 自分の関わってる業務とは別世界のように感じてしまう というのがざっくりした感想です。
もちろん色々導入したいですし、色々提案したりもしてるんですけどね・・・
以降、もうちょっと詳細な感想。
色々話を聴いていて、nanapi
さん、はてな
さんのどちらの方も、
そもそもの前提としてほとんどのメンバーが
新しい技術や取り組みに前向きな人が多いのかな?
と感じました。(違ったらすみません
自分の業務環境だと、こういった取り組みや新しい技術をいれることに 抵抗や拒絶を示すメンバーがほとんどで逆に自分だけで異端児のようになります。(Githubなにそれ?何がいいの?とかとか)
ゴリ押しで導入しても、「じゃあ好きにやってくれ」スタンスのメンバと一緒では、 どうやっても上手くいかないのでその辺の知見って需要ないのかな。。。 (上司の説得だけでも疲れる・・・本来の業務進捗に影響が出る)
自分としてはそういうツールとかを導入してもっと楽したいとか効率よくやりたいって考えが強いので、 その導入でプロジェクトの成功を〜とかその行動自体に意義を持ってる人に比べて、興味を持ってもらうように動いたりするのに労力を割くだけのリターンを得るのが難しい。
その辺、理解ある後輩が1人だけ居るので話してみると、 「実際、興味ないものを無理に勧められる側も辛そう」という結論。
なので、興味を持ってもらうように色々動くのも逆効果になるパターンも多そうでやっぱ難しい。。。
そして、「たぶん、先輩早いうちに辞めたほうがいいですね。。。」というお言葉を頂きました。
ぐぬぬ。。。
とりあえず、何となく理解したつもりだったScrum本をちゃんと読んでおこうと思います。
- 作者: 西村直人,永瀬美穂,吉羽龍太郎
- 出版社/メーカー: 翔泳社
- 発売日: 2013/02/13
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 13回
- この商品を含むブログ (28件) を見る
あと、リモートやる機会があれば、以下も読んでテンションあげたい。
- 作者: ジェイソンフリード,デイヴィッドハイネマイヤーハンソン
- 出版社/メーカー: 早川書房
- 発売日: 2014/04/01
- メディア: Kindle版
- この商品を含むブログを見る
YAPC::Asia Tokyo 2014行ってきました。
YAPC::Asia Tokyo 2014への参加は今回初めてなんですが、 何気に前夜祭〜2日目まで居ました。
まずスタッフの皆様の対応の良さに驚きました。ネットワーク環境も良く最後まで楽しめました。
本当にありがとうございました!!!!!!!!
そしてすみません、かき氷4つが限界でした・・・
あとは簡単にですが、 印象に残ったセッションなどざっと感想を述べたいと思います。
詳しい内容とかは、 各スピーカの方々の「〜話してきた」的なブログとかスライドを見たほうがよさそうなのであまり触れずに感想オンリーです。
前夜祭のLT10連発
初参加もあって雰囲気もわからなかったので、 勤務先が渋谷ということもありそこそこ近かったので物見遊山気分で行ったんですがめっちゃ面白かったです。
ビール飲みながらツマミ食いながらw(最強すぎる
コマンドラインツールについて語るときに僕の語ること
コマンドラインツールについて語るときに僕の語ること #yapcasia // Speaker Deck
以前、何度かGoの勉強会で別の発表を聴いていたんですが、さすがというか今回もスライドの内容や発表の仕方も上手くインパクトすごかったです。 ghrもcli-initもいつも使わせて頂いてます!!!
懇親会でチラッと話せてよかったです!
ベストトーク賞3位おめでとうございます。
初心者が Web エンジニアのコミュニティに触れてみて感じたこと - ゆとりエンジニアの成長戦略
YAPC::Asia 2014 でエモいトークをした - 404 Engineer Logs
去年までは業務多忙を言い訳にあまり参加できてなかったのですが、今年くらいから勉強会とか参加するようになり、 まったく同じようなことを最近思っていたのでとても共感できました。
ただ自分と違って、ここまで行動できていてすごい・・・自分ももっと頑張らないとな思いました。
@deeeetさんと同じく懇親会でチラッと話せてよかったです。
Twitterフォローもしていただけて恐縮です!!
Perlあるある
Perl初心者なので、もしかしたら・・・と思ってたのですが、全然そんなこともなく。
エンジニアあるあるっぽい感じで、面白かったですしめっちゃ気合入りました!
Keynote
@typestarさんのエンジニア道を貫き通してる感じがすごい伝わるKeynoteでした。
色々と熱いものを頂いたので、帰ってからも今日もずっとコード書いてました。
あとIngress始めましたw
Ingress始めた。
ランニング捗るわ。
— きょこみ (@k_yokomi) 2014, 8月 31
次は自分もLTとかやって、もうちょっとコミュ力あげて行こう。
golangでjson用のstructを生成するGo製ツール(gojson)
Goでjsonのデータを扱う機会は多いのですが、
その度にjson:"hogehoge"
を書くのがめんどくさいなーと思ってました。
jsonのI/Fが決まってるならそこからgoのコード生成すればいいかなと思い、作る前に類似ツールがないか調べていたら、すでに丁度いいのがあって便利だったので紹介したいと思います。
ChimeraCoder/gojson
install
$ go get github.com/ChimeraCoder/gojson
使い方
大きく2パターン?もっとありそうです。
ローカルにjsonがある場合
hoge.json
{ "id": 1111111111, "name": "kyokomi", "full_name": "kyokomi/kyokomi" }
普通にcat等でパイプで渡してやるといい感じです。
$ cat test/star.json | gojson -pkg=main -name=Starred > starred.go
引数の意味
-pkg
パッケージ名-name
structの名前
出力結果
実行結果は標準出力されるので、そのまま.go
とかに書き込めばいい感じになります。
package main type Hoge struct { FullName string `json:"full_name"` ID float64 `json:"id"` Name string `json:"name"` }
curlでパイプするのも可能
便利です。他にも色々使えそう。
curlする
$ curl https://api.github.com/users/kyokomi | gojson -pkg=main -name=GitHubUser
実行結果
package main type GitHubUser struct { AvatarURL string `json:"avatar_url"` Bio interface{} `json:"bio"` Blog string `json:"blog"` Company string `json:"company"` CreatedAt string `json:"created_at"` Email string `json:"email"` EventsURL string `json:"events_url"` Followers float64 `json:"followers"` FollowersURL string `json:"followers_url"` Following float64 `json:"following"` FollowingURL string `json:"following_url"` GistsURL string `json:"gists_url"` GravatarID string `json:"gravatar_id"` Hireable bool `json:"hireable"` HtmlURL string `json:"html_url"` ID float64 `json:"id"` Location string `json:"location"` Login string `json:"login"` Name string `json:"name"` OrganizationsURL string `json:"organizations_url"` PublicGists float64 `json:"public_gists"` PublicRepos float64 `json:"public_repos"` ReceivedEventsURL string `json:"received_events_url"` ReposURL string `json:"repos_url"` SiteAdmin bool `json:"site_admin"` StarredURL string `json:"starred_url"` SubscriptionsURL string `json:"subscriptions_url"` Type string `json:"type"` UpdatedAt string `json:"updated_at"` URL string `json:"url"` }
新しい言語で基礎学んだ後にやってはいけないこと/やるべきこと
新しい言語のHelloWorldが終わって、有名な人のライブラリとかもある程度使ってみた。 さて、いよいよどうするか。。。って時のメモです。
ちなみ自分がこの記事を書くときにイメージしたのはgolangです。
絶対にやってはいけないこと
本質は、新しい言語でガンガン開発することなので、 その他の要因で萎えたりしないようにする。
なんか新しいツールやWebサービスをつくる!
- アイディアが沸かない
- webアプリは、作り始めても結局フロントのcssとかjsとか書くのが必要になって萎える
基礎覚えたけど、忙しくなってちょっとやらなくなる
- 再開しようとしたけど全く覚えてない
え、また入門から・・・?そりゃ萎えるわー
これなら萎えないでいけそうな、やったほうがいいこと
※個人差はあります。参考程度にしていただけると
別言語で作った既存ライブラリやツールやWebサービスを書き直す
自分で作ったものがあると、まずこれをやるのがベターっぽい。 他人や有名なライブラリやツールは、すでに作られてるパターンが多いので、 そうじゃないものを探すのに疲れるからオススメしない。
別言語の書籍サンプルを実装してみる
自分は結構これが良いと思ってる。 Webアプリのサンプルとかもcssとかjsは大体あるので、そのまま使える。 サーバーサイドの新しく学ぶ言語だけ集中して取り組める。
練習問題っぽいやつ問いてみる
paizaとか
Goのbeta版あったけど、チェックスキルのやつでまだ選択できなかったのでやってない。
なんか問題読むのがだるい感じだったので、向いてないかも?
WebAPIのラッパーライブラリとかツールを書いてみる
自分は、業務で使ってるSlackとかGitlabとかのAPIのラッパーとか簡単なツールを作った。 GithubのAPIもちょっと触った。
これは、すでに類似ツールあるかもしれないけど、100%自分にあったツールは大体ない。 自分しか使わないくらいの気持ちでサクッとつくってしまうと丁度よかった。
とりあえず自分が毎日使ってるWebサービスがいいと思う。使ってないWebサービスは萎える・・・
業務とかですぐ使えそうなプチツールを作る
WebAPIの話に近いけど、 自社の業務ですぐ使えそうなプチツールとかをサクッと作るのも良さそう。
- 1、2回しか使わないかもでもいい
- 自分だけしか使わない感じでもいい
その他萎えるのを防止する支援ツール等
基礎学んでから、どれくらいサボってるかを可視化する。
Googleスプレッドシートで色つき星取り表をつける
やべぇ、今週ローグ開発やってないな。。。
ソースコードをgithubにpushして草を生やす
誰かが見てるとかはあまり気にしないで、ガンガンあげればいいと思う。
露骨なHelloWorldはSandbox的なOragnizationsを用意したりする。
ご意見ください
自分はこうしてるな〜とか、こういう萎える罠ハマったなーとかあれば教えていただけると。
そんな悩みないって人はスルーしてください・・・
Go lang勉強会に参加した感想
http://connpass.com/event/7814/
はじめに
Goはまだ入門して1〜2ヶ月くらいで、まだまだ初心者な感じで参加して大丈夫かなーと思ってましたが、とてもためにな話をたくさん聞けて参加できてよかったです。
場所や軽食などをご提供頂いたHDE様にも感謝です!
印象に残った発表を抜粋で紹介とポエムっぽい感想など述べたいと思います。
※各発表のスライドはちょっと全部拾いきれなかったので、connpass側にまとめられると期待して感想だけになります
Ship your CLI tool build by Golang
@deeeet さんの発表
Goで作ったツールとかをサクッと配布するツールを使って、ツールを使う人の障壁をとにかく減らすという話。 自分も最近は社内開発用ツールとかGoで書いてるので、参考にさせていただいてます!
cli-initすごく使ってます!!Githubスター100おめでとうございます。
同期的にプレゼンテーションするツール作った
@zoncoen さんの発表
発表者のスライドを手元のPCで同期して表示するDEMOを実際に体験しましたが、結構良かったです。 チラッと話してたかもしれませんが、 スライドの横とかにハッシュタグのTweetとかが表示されると楽しいかも〜と思いました。
ngrokというlocalhostを公開する便利なサービスも知りました。 こんな便利なものがあったとは・・・
インタフェースの実装パターン
@tenntenn さんの発表
Goの黒魔術っぽいテクニックがすごい衝撃的でした。 実際に実用すべき時が来るかはわかりませんが、 知識としてこういうこともできるというのを知っておけたのは良かったです。
Goとライセンス
@nabeken さんの発表
普段Goを書いてる時にあまり気にしてなかった政治的な話をガッツリ調べてわかりやすく説明いただけて、 とても勉強になりました。
How To Think Go
@lestrrat さんの発表
YAPCでの発表の前哨戦的な位置づけ?らしいです。資料の公開はYAPCまでお預けとのこと。
他の言語と同じような感覚(オブジェクト指向など)でGoプログラミングした際の地雷や注意点、考え方や例外処理の扱いなど目からウロコな話をたくさん話していただけました。
自分はinterfaceや埋め込み等の使い所が、まだまだ理解できていなかったのですが、埋め込みは継承ではなく移譲
といった考え方などライブコーディングを交えた説明だったので、とてもわかり易かったです。
カンファレンスというよりは、学校の授業っぽい感じでなんか新鮮な感じでした。
YAPCで改めて聴くのが楽しみです。