読者です 読者をやめる 読者になる 読者になる

フニゲの開発日記

Electronとか...

二本指で拡大縮小

マルチタッチのジェスチャーはPCのブラウザでは再現できないのでどうしても後回しになってしまうのだが、避けて通るわけにもいかない。 ピンチズーム(2本指で拡大縮小)のサンプル。 init:function () { this._super(); this.bg = cc.Sprite.create(...); t…

やっぱり販売停止が来た

ブログの記事を本にまとめるとKDPの審査に引っかかるという噂は聞いていたのだが、面倒くさいなあ。 KDP にご関心をお寄せいただき、ありがとうございました。以下のタイトルに関して、お客様が出版に必要な権利を保有していることを確認できる内容をまだい…

cc.FileUtils.dictionaryWithContentsOfFile

これがCocos2d-xのjsbでは動かない。 どうも設定ファイルはplistではなくJSONを使えという方針らしい。そうは言ってもテクスチャアトラスはplist使ってるんだし、C++でも使えるんだから、そんな固いこと言わないでちょっとjsbでも使わせてくれればいいのにと…

嘘ばっかり書いてる

Cocos2d-html5では layer._ignoreAnchorPointForPosition = false; で動くけど、Cocos2d-xは layer.ignoreAnchorPointForPosition(false); じゃないと動かなかった(そりゃそうだ)。すみません。 直しておきます。 あとcc.MenuもCocos2d-html5とCocos2d-xで…

Invalid Native Object

公式に書いてある通りなんだけど、なかなか厄介なメモリ管理の問題。Memory Management of JSB Cocos2d-x (C++) のメモリ管理はiOS開発者にはおなじみのretainカウント方式なのだが、javaScriptバインディングではほとんど意識することがないように、うまく…

cc.AudioEngineで2回目以降の音が出ない

自分で書いた原稿の通りにやっていたら、効果音が一度だけ鳴って2回目から何も鳴らなくなってしまう。BGMをループにしたら1周目しか音が出ない。 焦ったのだけど、これはChromeの(開発ツールを開いてる間だけ)キャッシュを無効にするオプションがチェック…

KDPで本を作ってみました

日曜日の昼に審査に出して、夜には通りました。審査速すぎ。 ブログの記事を本にすると審査落ちるという噂も聞いていたのだけど、そういうことは無かったようです。内容はブログの原稿の内容とまったく同じなので、購入する必要はありません。 イラストも何…

カバー

なんか直せば直すほどおかしくなる。これでいいや。

二冊目を考える

このままじゃ終われないなあというところ。 書ける人は一冊目からちゃんとした本が書けるし、そうでない人は何冊書いても駄目なんだろうという気はするのだが、もう一冊ぐらい書いてみてもいいんじゃないか。来年はBox2Dとか物理エンジンを使ったゲームの入…

epubの改ページとか見た目の調整とか

原稿が複数のファイルでできているときは、常にファイルとファイルの境界に改ページが入る。それ以外の場所で強制的に改ページしたいときは、スタイルシートを使う。 h1 { page-break-before:always; } /* h1の前に改ページ */ h1 { page-break-after:always…

cc.EditBox

Cocos2d-html5ではキーボードから入力された文字列を扱うためにcc.TextFieldTTFとcc.EditBoxの2つのクラスがある。cc.TextFieldTTFはよく設計されている感じなのだが、どうもアカデミックというか、大卒のエリート的な印象のクラスだ。 cc.EditBoxの方はいか…

Chrome31でcocos2d-html5が動かなくなる問題

Google Chrome v31 breaks cocos2d-html5 古いバージョンを使って書いたゲームは自分で直さないといけないのか。 Cocos2d-html5-v2.2.min.jsを使っている場合だと、検索で「precision mediump float」って書いてあるところを探して「precision highp float」…

やっぱり萌え絵は無しの方向で

どうも間に合わないので、今回は挿絵無しでまじめな入門書にしようと思う。 できないとは思わないが、今は完全にやる気が空回りしている。滑ってるときにアクセルを踏めばコントロールを失うだろう。 平凡に行こう。

epubファイルの作成

やっぱりはてな記法が扱いやすいので、原稿はブログの編集画面から取ってきて、xhtmlに変換→zipに固めるスタイルで行こうと思う。はてなのパーサは、rubyだとHparserというのがあるのでこれを使う。 HParser require 'hparser' raise unless filename = ARGV…

主な登場人物

2014/02/15修正。 v2.2.2対応。 眠いときにプログラムをしていると、意識が朦朧として、何もコードを変えてないのに突然まったく動かなくなったり、逆に直したつもりのないバグがいつの間にか直ってたり、不思議な経験をよくします。そんなときには、コンピ…

Cocos2d-html5の基礎

2014/02/15修正。v2.2.2対応。 前章でだいたい書きたいことは書いてしまったような気もしますが、まだいくつか大事なことが残っています。ちょっと基礎を補強しておきましょう。 シーングラフを理解する 前章で登場した文字やスプライト、レイヤーなどはすべ…

Chromeのキャッシュを無効にしよう

ブラウザを使った開発は、JavaScriptのソースやスタイルシートを更新してブラウザで結果を見る作業の繰り返しですが、突然何度リロードしても更新が読み込まれなくなることがあります。この条件がよくわからないんだけど、とにかく突然起こる。 何となく「お…

iOSアプリの作成

2013/12/07校正 XCodeの環境設定 iOSアプリの開発は、XCodeのインストールからです。Windows用のXCodeは無いので、WindowsではiOSのアプリは開発できません。 iPhoneやiPadにプログラムを転送して実行するには有料の開発者登録が必要ですが、XCodeのiPhoneシ…

Androidアプリの作成

2013/12/07校正 ADT (Android Development Kit) の環境設定 Androidのアプリを作る時まず最初にするべきなのは、Android 2.2以上の携帯かタブレットを入手してUSBで接続することです。エミュレータも一応ありますが、とにかく遅くてやる気を根こそぎ奪われて…

だいぶ飽きてきた

2章ではcc.Layerとかcc.Spriteとかcc.TableViewとかダラダラ何十個も説明しないといけない。これがきつい。何とか退屈しないで読めるようにする方法はないかとずっと考えていたのだが……萌え擬人化したらどうだろう。1クラス1枚カラーイラストを描いて。 Spri…

Cocos2d-xへ...

2014/02/15修正。v2.2.2対応。 Cocos2d-html5にもようやく慣れたところですが、そろそろブラウザの外の世界へ出発する時が来たようです。 本書後半では、これまで学んできたことを使って、モバイルゲームを開発する手順を説明します。AndroidやiOSの開発環境…

はじめてのゲーム (2)

2014/02/15修正。v2.2.2対応。 キャラクターを動かす はじめてのゲームはできるだけ単純にしたいので、平凡ですが、宇宙船が隕石を避けて進む横スクロールのゲームにしました。 宇宙船と、隕石です。心の目で見てくださいね。赤いコメント隕石が右から左に激…

はじめてのゲーム (1)

2014/02/15修正。 まずindex.htmlから ここから実際に手を動かして、ゲームを作っていきたいと思います。サンプルなので、Sampleという名前にしましょう。そのまんまですね。まず前章で見たサンプルのHelloHTML5Worldをそっくりコピーして、Sampleという名前…

40秒で支度しな

2013/12/07校正 Cocos2d-html5のダウンロード 何はともあれ、Cocos2d-html5をダウンロードしましょう。これがないと何もできません。Cocos2d-html5は公式サイトから無料でダウンロードできます。 http://www.cocos2d-x.org/download 現在(2013年12月)の最…

Cocos2d-html5へようこそ

2013/12/07修正 2014/1/4いろいろ控えめに修正 Cocos2dとは Cocos2dは2008年にアルゼンチンで生まれた2Dゲーム用のフレームワークです。 「Cocos2dの父」Ricardo Quesadaさんの説明によると、Cocos2dのCocosというのはアルゼンチンのコルドバ州にあるロス・…

cc.Loderを使う

前回のステージ毎のテクスチャの初期化をcc.Loaderで書き直し。 勉強しながら書いていると、どうしても同じ処理の書き直しが多くなる。前の記事はいらなくなっちゃうんだけど、消すのも何だかもったいないし。 // resource.js var g_stage0 = [{src:"res/sta…

テクスチャの非同期読み込み

テクスチャが少なければ起動時にすべて読み込むのが無難だが、量が増えてくるとそうもいかない。ステージのはじめに必要なテクスチャをロードして、次のステージに行く前にメモリを解放する手続きが必要になる。cc.TextureCacheは、dumpCachedTexture()でロ…

さらにcc.drawingUtil

今回はRay Wenderlichのこの記事をcocos2d-html5でやりたかったんだけど、 How To Create A Game Like Tiny Wings with Cocos2D 2.X ……OpenGLが難しすぎる。挫折した。 代わりにcc.drawingUtilを使ってポリゴンを描くことにする。drawSolidPolyで描けるのは…

cc.drawingUtil

点やラインをちょっと表示したいときに便利なcc.drawingUtil。 cocos2d-html5に同梱のサンプルHelloHTML5Worldでも使われている。 // HelloHTML5World/src/myApp.js var CircleSprite = cc.Sprite.extend({ _degree:0, ctor:function () { this._super(); },…

ctorとかinitとかonEnterとか

cc.Layerを継承するとき、初期化のコードはどこに書いたらいいのか。 ここで初期化というのは、例えばスコアを0に初期化したり、レイヤーにスコアを表示するラベルを貼り付けることなんだけど、どこに書くのが正しいのか。cc.Layerを継承したクラスでは、イ…

KDPのアカウントを作る

まあいろいろ言われているが、本を出すならやっぱりKindleだ。 いつの間にかKindle Direct Publishingの登録画面からW-8BENの申請ができるようになっていて、超便利。具体的な手順はいろいろなブログで書かれている。この辺を参考に埋めていく。 KDPの税に関…

cc.Scale9Sprite

ボタンの背景画像などによく使うストレッチ可能なスプライト。 extensions/GUI/CCControlExtension/CCScale9Sprite.jsを読んでもいまいちよくわからないのだが、まあ使ってみよう。 // resource.js var s_me = "res/me.png"; ... var g_ressources = [ {src:…

cocos2d-html5 2.2

ここで書いてる範囲では、あんまり違った感じはしない。 cc.RectMakeがdeprecatedでcc.rectに直せと言われたくらい。 cocos2d-x 2.2も入れたのだが、wp8のprojectはまだjsbからは使えない。

本を書こう

来月はcocos2d-html5本を書いてKindleストアに出すことに決めた。 本当はまだ迷ってるんだけど、ここで書くって書いたらもうやるしかねえ。「Cocos2d−HTML5でどこでも動くゲームを作るよ(仮題)」 準備 はじめてのゲーム〜Cocos2dの基礎Sprite。LabelTTF。…

cc.associateWithNative

ってもう書かなくていいの?

ならばZソートだ

続き。 Zソートはプログラムのあちこちに分散してしまうので簡潔にまとめるのが難しいな。やってることは簡単なんだけど。 // zombie.js var Zombie = cc.Class.extend({ ctor:function () { this.node = cc.Node.create(); var sprite = cc.Sprite.create(s…

Zバッファを使う

2Dのゲームでもスプライトを奥行きで並べ替える場面は結構ある。 reorderChild()を使ってZソートするべきなのだと思う。しかしcocos2dでは親子関係にあるスプライトはまとめて描画される決まりなので、ちょっと困る。例えば各オブジェクトの地面の影は他のオ…

cocos2d-html5の入門書とか

書こうかな。 電子書籍の出版というのも一度やってみたかった。 そもそもこのレベルで書いていいのか、というのが疑問だが。なんかゲーム作りから逃げることばかり考えている気がする……。

スプラッシュスクリーンの画像を変える

ロード中に表示される画像は cocos2d/CCLoader.js に埋め込まれているので、これを何とかすればいい。applicationDidFinishLaunching()で差し替えるのが簡単かな。 // main.js ... applicationDidFinishLaunching:function () { var director = cc.Director.…

cc.TMXTiledMap

後回しにしていたTiledの勉強。タイルセット(*.png)とマップデータ(*.tmx)の2つが出力されるので、これをresource.jsで先読みしておく。 // resource.js var s_tile = "res/test.tmx"; var s_tile_png = "res/test.png"; ... var g_ressources = [ {src:s_t…

nendのバナーをセンタリングして表示

メモ ... public class giin extends Cocos2dxActivity{ private static NendAdView nendAdView = null; private static giin me = null; private static RelativeLayout relativeLayout = null; protected void onCreate(Bundle savedInstanceState){ super…

logcatのログが表示されるけどすぐに消えてしまう

これもうちの環境だけかも知れないが、ADT(Android Developer Tools) に実機をつないでログを取ってると、必要のないシステムメッセージが多すぎてバッファがすぐに溢れる。デバッグのために入れたcc.logとかLog.dとかが読む前に消えてしまうので困った。Log…

Android2本目

HTMLで動くものをAndroidでリリースし直すというのはなかなか退屈な作業だ。慣れればもうちょっと効率よくできるようになるだろう。 イクラダ? Funige価格:無料 平均評価:0.0(0 件)

生産性がなかなか上がらない

どこがボトルネックか人によって違うので一般論は言えないのだが、自分の場合画像やサウンドの素材作成がボトルネックになっている。 cocos2d-html5でプログラムは10倍くらい楽に書けるようになったが、それはボトルネックがプログラムから絵に移ったという…

MouseJointのテスト

Box2DではQueryAABB()というのを呼ぶとマウスの下にあるbodyを見つけることができるらしい。 サンプルローダーのtestbed.jsを見るとコールバックの書き方が2種類あるみたいなんだけど、そのへんは深入りせずに簡単に書けるものは簡単に書く。 // game.js var…

BGMをループさせる

cc.AudioEngineのplayMusic()にはループのオプションがあるので、これをtrueにしてやれば終わり。のはずなのだが、なんだか動作が怪しいぞ。 あとループのつなぎ目がどうしても不自然になる。実機で正常に動けば別にいいんだけど、ここはループ再生機能を信…

RUBEで作ったシーンを表示する

R.U.B.E Box2D Editorはマジで使えるBox2Dエディタ(Really Useful Box2D Editor)。¥3000。無料の体験版もある。完成度が高くて、とにかく使っていて気持ちのいいツールだ。 玄人好みの操作系で最初戸惑うのだが、詳しいチュートリアルビデオがあるので我慢…

7日目 カステラ切るよ!

カステラ切るよ!むかし母親に「下手でいいから大きくはっきりと書きなさい」と言われました。自信がないからと言って小さく書いたり隠したりするのが良くないと。そんなことを思い出しつつアップロード。 結局7本で3週間かかったが、簡単にまとめておこう。…

実行環境で場合分け

ローカライズは var language = cc.Application.getCurrentLanguage(); if (language == cc.LANGUAGE_JAPANESE) { // 日本語だよ } で書ける。と思ったが、微妙に違うな。 var language; if (cc.Application.getCurrentLanguage) { language = cc.Applicatio…

Androidでツイートとかランキングとか

本当はjsbindingとかplugin-xとか使うらしいのだが、正直さっぱりわからない。いつもお世話になっているがおまるの開発ブログに、JNIを使わず簡単にjavaのコードを叩く方法が書かれているので、これを参考にして作ってみる。cocos2d-xからツイートする[Andr…