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

フニゲの開発日記

Electronとか...

CSNFの詳細について

ルートフォルダの下にstory.json、各ページのデータはページ毎にページ番号のついたディレクトリに記録されている。 1 ├── 1 │ ├── ly_d0 │ ├── ly_f0_b │ ├── ly_f0_s │ ├── ly_t0_b │ ├── ly_t0_bt │ ├── ly_t0_t │ ├── ly_t1_b │ ├── ly_t1_bt │ ├── ly_t…

tar-streamのテスト

いま作っているのは、.csnfという超マイナーなフォーマットのエディタだ。これは簡単に言うと(あんまり簡単に言いたくないんだけど)JSONと画像データをtarで固めたもの。編集とか保存はおいおい作ることにして、まず既存のデータを読み込んで画面に表示す…

Pointer Eventsのテスト

WindowsのIEではだいぶ前から使えたらしいけど、Chromeでも55から使えるようになったのでテストしてみる。 Electron(今はv1.4.13)ではまだ使えないが、そんなに遠くない将来使えるようになるはずだ。 <html> <head> <script> document.addEventListener("pointerdown", function(</head></html>…

ダイアログの表示とか

ダイアログの表示はDialogを使う。requireの書き方は古いドキュメントがあって迷うけど、 const {dialog} = require('electron'); でいいらしい。 使い方は公式のドキュメントを読むのがいちばんわかりやすいと思う。 前回の続きでまずネイティブメニューにA…

とりあえずネイティブメニュー

// main.js app.on('ready', function () { createWindow(); installMenu(); // 追加 }); ... function installMenu() { var menu = Menu.buildFromTemplate([ { label: 'MyApp', submenu: [ { label: 'About MyApp' }, { label: 'Quit MyApp', accelerator:…

もうプログラムを書くことも無いだろうと思っていたのだが

ちょっと作りたいツールができたので、今はelectronとかいじってます。 javaScriptの知識だけで何でも簡単に作れてしまうので、これは便利ですね。 練習を兼ねて「PaintBBS NEO」というのを作りました。昔よく使ったお絵描きアプレットのhtml5製クローンです…

やっぱり絵の仕事は切り離し

絵の話は別の名前でやることにしますね。 すぐ気が変わるのは申し訳ないんだけど、まあ検索で飛んでくる人にも悪いし。 あんまり相乗効果もなさそうなので……

Spineのショートカット

最近Spineの仕事をしたので自分用のまとめ。 ショートカットを覚えると劇的に効率が上がるんだけど、日本語の情報があんまり無いのでメモ。ごめんたくさんあった。 使っているのは、Mac用の2.1.27Proです。 一番良く使うTransformの切り替え Cで回転 Vで平行…

Pixi.jsの継承パターン

大きなプログラムを書こうとすると、どうしても必要になるクラスの継承。 正直JavaScriptのprototype継承はよくわからないのだが、あまり深く考えずに丸暗記していいと思う。 javascript - three.js inheritence pattern - Stack Overflow Three.jsで新しいH…

Three.jsも使ってみよう

3Dも使う必要があって、いまさらな感じもするがThree.jsもやってみた。 2013年のPixi.jsがリリースされたときのアナウンスを見ると「Pixi.jsはThree.jsの2D版」という考え方が示されていて、まあ確かに似ている部分が多いと思う。片方勉強していれば、もう片…

PIXI.loader

画像やjsonファイルなどを最初にまとめて読み込むときはPIXI.loaderを使う。 前回のサンプルをPIXI.loaderを使って書き直してみる。 頂点データをjsonファイルに分離して、例えばmodel.jsonという名前で読み込むことにする。まあ実際のゲームではそうなるだ…

メッシュ変形

Pixi.jsのメッシュ操作は気が抜けるぐらい簡単だ。昔Cocos2d-html5でこれと同じ事をやろうとして何日かかったことか。 var renderer = PIXI.autoDetectRenderer(800, 600); //var renderer = new PIXI.CanvasRenderer(800, 600); // Canvasでも動くぞ docume…

Pixi.jsはじめました

Appleのリジェクトにウンザリしたというわけではないのだが、スマホのブラウザで動くゲームを作ることになって、いいフレームワークを探している。 最終的にネイティブアプリにしてリリースする予定があるなら、今でもCocos2d-JSをおすすめするのだが、ブラ…

広告SDKでリジェクトの話

iOSでリジェクトされた件をツイートしたら結構RTされたので、正確な情報が知りたい人もいると思うので、いちおう全文載せときますね。 2年ぐらい前に作ったゲームで、その頃からアイモバイルのバナーとアスタのアイコン広告は入っていました。久しぶりにバグ…

Creatureてすと

CreatureはシンガポールのKestrel Moon Studiosが3月にリリースした2Dアニメーション製作用のツール。¥11800。www.youtube.com Cocos2d-html5 V4のalphaプレビューで見かけたので試してみたのだが、まだ不具合が多いのであまりお薦めできない。いろいろ痒い…

加速度センサーを使う

加速度センサーはMacBookのブラウザでも普通に使えるし、スマホのブラウザでもだいたい使える。Windowsのノートは何年も触ってないので知らないのだが、たぶん使えると思う。 ctor:function () { this._super(); var size = cc.director.getWinSize(); this.…

リプレイ機能を作る

リプレイ機能そのものはまあ、あんまり需要ないかもしれないが、例えばチュートリアルを作るときとか、デモプレイを作るときに、操作の履歴をJSONデータに書き出して簡単に再生できるようにしておくと便利だ。 チュートリアルは開発の最後に短期間で作らざる…

ネイティブ(Objective-CとかJava)のメソッドを呼び出す

このへんはだいぶ楽になった。v2の時と同じようにLocalStorage経由で情報を渡すハックもできるが、もう使うことはないかも知れない。 例として、iOSのバンドルID(またはAndroidのパッケージ名)を返すメソッドを書いてみる。複数のアプリで同じソースコード…

ネイティブ環境で動かすときの注意点

何となく不安なので、開発中のゲームがネイティブ環境で動くかテスト。 Full版のcocosコマンドを使って、適当なバンドルIDのプロジェクトを作成する。 $ cocos new -l js --ios-bundleid com.hogere.nativetest nativetest ios-bundleidの前の「--」はマイナ…

Cocos2d-JS 3.4beta0

3.4で3D関係のモジュールやテストが追加された模様。 ただし、iOSやAndroidなどのネイティブ環境でしか動かない。ブラウザ環境では「近い将来3Dをサポートする予定はない」そうで……。 3DやるならUnityを使えば、って意見は正しいと思うんだけど、ちょっとだ…

cc.ScrollViewでページング

ゲームのステージ選択でよく使う、ページ単位で横スクロールするビューです。 昔使ってた物を書き直したのですが、このへんはv2の時とあんまり変わってないですね。もうちょっと簡単に書けそうな気がするけど、まあ動けばいいのです。 onTouchEndedでスクロ…

あれっぽいあれを作ってみる

あれというのはちょっと前にヒットした物理ゲーム「Q」です。これは本当に面白い。 ググるとサンプルコードが見つかるので、ああこれをパクっちゃえばいいのねと思うわけだが、残念ながらこれはBox2Dのようなので、 Pedro's Tech Mumblings: Freehand drawin…

物理モデルにテクスチャを貼るところ

前回の続き。 前回の描画はcc.PhysicsDebugNodeにお任せだったが、一応テクスチャを貼っておこう。ここには魔法のメソッドはない。毎割り込み地味に位置と角度を調べて貼り直すだけだ。 まずaddBody()の最後にコードを追加して、シェイプと同じ大きさのスプ…

Cocos2-JSなら物理ゲームも楽勝(のような気がする)

物理エンジンとしてはBox2Dの方が有名だったと思うのだが、Cocos2d-JSはChipmunk2Dに絞ってサポートしていく方針なのだと思う。Box2D用のツールとか簡単に捨てるわけにもいかないのだが、まあしょうがない。 Chipmunk2Dが選ばれた理由は「簡潔だから」に尽き…

描画順序の制御とイベントリスナー

新しいCocos2d-JSではこれまでのsetLocalZOrder()に加えてsetGlobalZOrder()ができたのだが、web版ではsetGlobalZOrder()は動かない。互換性のためにメソッドは存在するが、ブラウザでは何の効果もないので注意。とりあえず忘れよう。 新しいイベントリスナ…

Cocos2d-JSのクラスとインスタンスの取得

まあ公式の移行ガイドをよく読め、ということに尽きるのですが。 v2時代のオブジェクトの初期化については、前にちょっと書いたことがあった。 例えばスプライトを生成して初期化する場合、cc.Sprite.create()を使ってこんな感じに初期化していた。 // v2ま…

Cocos2d-JSはLite版からはじめよう

Lite版は、ブラウザゲームの開発に特化したCocos2d-JSです。AndroidやiOSなど他のプラットフォームで動かすための機能は含まれていませんが、そのぶんコンパクトで、APIの全体像やゲームの作り方を習得するのに最適と言えます。 ゲーム自体はブラウザで効率…

記事がすっかり古くなってしまいました

これまでの記事を整理しています。 整理するために過去の記事を読んでいて思うのは、古くなって役に立たない情報や思い違いも、それはそれで記録として価値があるなあということです。価値がないのは、愚痴や怠惰の言い訳を書いたものですね。本当に読むに耐…

Learning Cocos2d-JS Game Development

イタリアのEmanuele FeronatoさんがCocos2d-JSの入門書を出しています。 いいチュートリアルを書く人なので、前にも紹介したような気がしますが、新しい本はこれからCocos2d-JSを勉強する人におすすめです。Learning Cocos2d-JS Game Developmentposted with…

cocos2d-x2.2.6のjsbでgetStringFromFileがおかしい

cocos2d-x。仕事ではまだv2系から抜けられないのです。 2月からiOSの開発が64bit対応必須になって、v2系を使用しているユーザーのために64bit対応版の2.2.6がリリースされたのですが、javascriptで書いたゲームを2.2.6で動かすと、なぜかうまく動きません。 …

iOS8のシミュレータでアプリを削除してもCCUserDefaultが消えない

ios - NSUserDefaults not cleared after app uninstall on simulator - Stack Overflow iOS8になって仕様が変わったのかと一瞬焦ったが、何のことはないシミュレータのバグ。リセット方法は、iOS Simulator -> Reset Content and Settings。

howler.jsでオーディオスプライト

iOSのsafariで動くブラウザゲームを作る用事があって、まあ最新版は勉強中なので古いCocos2d-html5のv2.2とか使っていたのだが、モバイルでは効果音がぜんぜん鳴らないんだな。 html5のaudio機能は実に面倒くさいことになっている。 iOS における HTML5 の a…

XCode6のiOS simulatorでHTTP通信ができない

(追記)どうも嘘を書いたようなので、取り消します。すみません。セキュリティソフトをオフにしても動かないときは動かない。 なんか他の条件があるようです。解決したように見えるときもあるんですけど。 検索に引っかからなくて一晩無駄にしたので、ちょ…

Cocos2d-JS v3.0 Final

Cocos2d-JS v3.0 Final released ! Finally ! | Cocos2d-x とうとうFinalリリースが出ちゃいました。「まだ不安定だから」とか言い訳してたけど、安定版が出てしまったら真面目にやらざるを得ない。 とりあえず何か作ってみよう。

Androidではmp3よりoggがいいのだな

自分用のメモ。まあ何となく知ってたことではある。 曖昧に「Androidではoggの方がいいんじゃないの」と書いてる記事が多いのだが、要するに「ogg必須」のようだ。 mp3を使ってBGMを流していると、一部の端末でBGMが突然鳴らなくなる症状が発生する。oggに変…

Cocos2d-html5本が公式で紹介されました

Books Hub | Cocos2d-x まあ読んではいないと思うんですけどね。日本のAmazonでしか買えないし。 ほんと申し訳ない。

Cocos2d-JS v3.0を試す

まずcocos2d-x.orgからcocos2d-js-v3.0-alpha2.zipをダウンロード。 解凍して~/cocos2d-jsに置いたとしよう。 ……いやしかし、その前にantのインストールだな。 なんとなく毛嫌いしていたのだが、ここは避けて通れないようだ。 このへんを読むと、「brew upda…

5月

ぼんやりしているとどんどん時間がたってしまう。人生は短い。 今月からまた記事を書くことにしようと思う。仕事でCocos2d-xを使うことが多くなったので、Cocos2d-xの備忘録にしてもいいのかな。 Cocos2d-html5はver2.2.3がリリースされて、前の2.2.2で導入…

Cocos2d-xでcurlとかjsonとか

サーバーと通信してデータをJSONで取得する処理。 本当はCCHttpRequestを使いたいのだが、Cocos2dとUIKitを併用しているゲームの場合、UIKitでメニューを表示している間はCocos2dのイベントループが動いていないので、CCHttpRequestを投げてもレスポンスが返…

Cocos2d-xでsqlite3を使う

iOSだけなら、XCodeに入っているlibsqlite3.0.dylibを使う手もあるんだけど。A simple Tutorial How to use SQLite in cocos2d-x ……(Tutorial by YUYE) - Cocos2d-x Forum YUYEさんのGitHubからsqlite3.cとsqlite3.hをコピーして、自分のプロジェクトに追…

Cocos2d-JS v3.0 alpha

Cocos2d-x v3.0 RC0 and Coordinate Release | Cocos2d-x Cocos2d-html5とCocos2d-x JSBindingを合わせて「Cocos2d-JS」と呼ばれるようになっています。変更点が多いので、かなりアップデートに苦しみそうです。 バグが取れて安定するまで触らないのが賢明だ…

Cocos2d-xをiOSのUIViewControllerの中で動かす

仕事でかなり困ったのでメモ。 とりあえず、いつも頼りになるRay Wenderlichさんのサンプルを追いかければだいたいできるのだが、残念ながらこれはCocos2d-iPhone用で、Cocos2d-xとは細かい所が違う。 How To Integrate Cocos2D and UIKit - Ray Wenderlich …

サイズ0のスプライトを作る

cc.SpriteBatchNodeにはcc.NodeをaddChildできないので、cc.Nodeの代わりにサイズ0のスプライトを使う。 ええと。 どういう時に必要になるか、サンプルとか作って説明するべきなのだが、今ちょっと忙しいので後で。このへんに答が書いてあった。CCNode hier…

ブログを検索から隠す

教科書通りにrobot.txtを書くか、<head>の中にmetaタグを書ければいいんだけど、どちらも使えないブログの場合どうすればいいのかという話。(常識だったらごめんなさい) metaタグはどこに書いてもいいのですね。 ためしにページの最後の方、ブログのフッタに <m</head>…

Genymotionを試す

Gemymotionはちょっと試したときCocos2d-xで動かなかったのでそのままよく調べもせずに放置してたんだけど、いやこれは便利ですね。 食わず嫌いでだいぶ時間を無駄にした。GenyMotionで実行しようとするとINSTALL_FAILED_CPU_ABI_INCOMPATIBLEというエラーが…

Cocos2d-html5 v2.2.2

v2.2.1 -> v2.2.2 は「何にもエラーが出ないなあ」と思ってボンヤリしていましたが、うっかり更新をミスっていただけでした。 御指摘を頂いて(ありがとうございます)相違点をチェックしています。 Upgrade Guide from Cocos2d-html5 v2.2.1 to v2.2.2 今回…

applicationDidEnterBackgroundとか

Androidで電話がかかってきたりして、アプリケーションがバックグラウンドに入るときの処理をjsbで書きたい。 適当なハンドラが見あたらないので(見落としてるかも)、C++側のapplicationDidEnterBackground() から直接呼び出すように書いてみよう。 // Cla…

javaのメソッドの結果をjsbで取得する

Androidでjsbからjavaのメソッドを叩く方法は前に書いたが、戻り値が欲しいときもあるだろう。以下では、デバイスのdpiを取得してみる。 前回と同じようにsys.localStorageを使う。 // cocos2dx/platform/android/java/src/org/cocos2dx/lib/Cocos2dxLocalSt…

purgeCachedDataが無い…

本の訂正ばかり書いているような気がする。 ステージ毎に新しいリソースを読み込む場合、前のステージのリソースを削除してメモリを空けなければいけないのだが、cocos2d-xでは cc.Loader.purgeCachedData が使えなかった。なぜだ。 ぐぐったら「要らないか…

はじめてのシェーダ

OpenGLにはいい思い出がない。 うっかりどこか書き換えると画面に何も出なくなって、何日も原因が分からずに途方に暮れるとか、昔の記憶がよみがえって、いやな汗が出る。 確実に動くものから、少しずつ作りはじめて、迷ったらいつでも戻れるように足場を固…