だらだら〜自由自在〜

インディーゲーム制作チーム GAME GABURI でプログラム担当してます

Metal cocos 2

ビルドを通して、cpp_empty_testのHelloWorldシーンをSprite, Label描画系をすべてマスクして実行する(すなわち、画面には何も出ない)状態になっている。
ここで、cocosロゴのスプライト描画のみマスクを外す。当面の目標はこのスプライトを描画できるようになるまで。
といっても道のりは長い。シェーダ、テキスチャ、レンダラーが正常に動作していないと動かない。

ShaderごとにRenderPipeLineオブジェクトを用意しておくっぽい。
renderEncorderにたいしてRenderPipelineオブジェクトをセットするので、ShaderUseのときにそうしてやればOKか

Shaderの仕様側であるRendererに着手、こいつがcocosの描画コマンドをrenderEncorderにしてDrawする。
TriangleとQuadでコマンドが分かれているが、SpriteNodeはQuadをつかうのでTriangleは後回し、MeshCommandも後回し。

SurfacePro3

SurfacePro3を勢いで買って数ヶ月。まったく使っていない…。
元は性能的にMainで使えることを期待していたけど、自分の用途だと次の2点が気に入らなかったため売却を検討中。
1つは、解像度が高いせいかニコ動とかで動画を見るとすぐCPUが唸りだして排気を始めるのだけど、その排気音がうるさいという点。
もう1つは、これが決定的なのだけど。外部ディスプレイを使って、本体と併用で2画面出力しているとき本体側の画面と外部ディスプレイ側で描画スケールを別個に設定できないという点。本体側に合わせてスケールをかけていると外部ディスプレイ側では画面が広く使えないし、外部ディスプレイ側に合わせると本体側で文字が小さすぎて読めない…。
あと、タブレットとして使う場合だけど、前述のとおり結構加熱しやすいので手で持つと熱い。
てわけで、売ってしまってmac-miniとでかいディスプレイ買おうかなーと思ってるこの頃。
今はMBA11インチつかってるのだけど、cocos2d-xのビルド待ち時間が結構するし、画面サイズが…。まぁmac-miniのDualCore程度じゃいうほど変わらないかもしれないけど、総ディスプレイ解像度も上がるし。
いつも使っている買い取り屋に査定メールを出してみた。15万ぐらいになったら嬉しいんだが。

Metal cocos

cocos2d-xをMetalに置き換えよう。ということをやっている。まず、OpenGLを外すことから初めて。OpenGL関係のFrameworkを全部はずして、リンクエラーが出たところを全部潰してなんとかビルドを通したところ。
OpenGLがはびこっているので大変だこりゃ。
ちなみに本家のMetal対応は2015年とかどっかでちら見したけど気にしない。

iPhone6は家庭用ゲーム機を超える? iOS8で注目のMetal対応状況|Mac - 週アスPLUS

Swiftでなんかゲームを5

swiftでvoid*でバッファを確保しつつ、任意の構造体にキャストして値を書き込む。ということをやってみた。頂点バッファなどにつかいたい

struct Int3 {
    var x: Int = 1
    var y: Int = 2
    var z: Int = 3
}
var allocSize = sizeof(Int3)*10
var usp = UnsafeMutablePointer<Void>.alloc(allocSize)
for var i:Int=0; i<10; i++ {
    var tmp = Int3()
    tmp.x = i
    tmp.y = i
    tmp.z = i
    var usptmp = UnsafeMutablePointer<Int3>(usp) + i
    memcpy(usptmp, &tmp, UInt(sizeof(Int3)))
}
for var i=0; i<10; i++ {
    var usptmp = UnsafePointer<Int3>(usp) + i
    var i3 = usptmp.memory
    print("\(i) : \(i3.x),\(i3.y),\(i3.z)")
}
usp.dealloc(allocSize)

書き込みで、memcpyつかってるけど、直接 usptmp.memory.x でアクセスしても良い。
てか、はてな記法ってswiftのSyntaxHilight対応してないのか…?

Swiftでなんかゲームを4

SpriteKit放り出してMetalやってるのですが。3次元ベクトルや4x4行列のデータ構造とそれを操作する関数群ってどこにあるんですかね・・・?

OpenSourceのライブラリかなんかを使うものなんでしょうか?さっぱりわからん。

Swiftでなんかゲームを3

Swiftでなんかゲームを2

  • Swiftの仕様もよくわからないけど、SpriteKitの仕様のほうがもっとわからない。
    • でもSpriteKitで頑張る!
  • Spriteアニメーションをしたい。
  • Swiftの仕様がガンガン変わっていたお陰で、ネット上の以前の言語仕様に基づいて書かれた記事を見て書いてもビルド通らないとか...。今から入った人間だと状況がわかってないからキツイ
  • Floatにキャストする時でもやもやする。
    • intとCGFloatの値が混ざった式でintをFloatにキャストしたらエラー。 SwiftでObjCも利用したアプリ開発のときにハマったこと - Qiita こちらの記事にあるようにCGFloatでコンバージョンすればOKだった。これすごいモヤモヤする。Architectureにarm64含めてビルドしたからCGFloatがDoubleのエイリアスになっているためだと思うが。arm64ってなんやねん。
      • 64bitアーキテクチャか...。てことはもし切るとしたらarmv7とかになるのかな?(そっちのほうが古いやつだと思うので)となるとCGFloat==Doubleになるわけでめっちゃキモくない?って思ったりするわけだけど。
  • Spriteアニメーションできた。 アニメーション - SpriteKit.jp こちらの解説をSwiftで書きなおしただけ。
  • とりあえずGithubに上げる
  • ボタンをおいて、それで自機移動してみよう
    • ボタンはSkLabelNodeで文字を置いて、touchBeganメソッド中でNodeとの衝突をチェックするやり方なようだ。
    • LabelのPositionは、スクリーンの左下が原点なようだ
      • Nodeのhorizontal/verticalAlignmentを調整しても思ったような座標に表示できない...。SceneのFrameサイズが1024/768とかなってるのでそれな気がする。Sceneのsksを編集したいが方法がわからない・・・。ちょっと他のゲームのコードをみてみよう
      • 何かで fullstackio/FlappySwift · GitHub こちらが参考に良いと聞いた気がするのでこれでGameScene.sksがどうなってるのかみてみる
        • ビルドエラーでるなぁ。Nullable(という言い方で良いのか。。。)でエラー。!をつけてやるとOKぽいが数がおおい。
      • 結局良くわからんかった;放置しよ

Swiftでなんかゲームを

Swiftで何かゲームを作ってみたい。
何か。というかネタは一応あるんだけど、始めに習作として一つ簡単なのを作ってみたい。
例によって爆裂カブトムシで・・・。


XcodeGM seedをインストールしてGameのスケルトンプロジェクトを開いてみたけど分からない部分多い...。
やっぱりiOSアプリをObjectCとかXcodeでガリガリ作ったこと無いのでそのへんのハンディキャップがでかいなぁ。Swift言語自体も仕様知らないけど。言語もライブラリも何も知らない状態でゲーム作ってみるって中々チャレンジングでいいですねぇ。ちゃんと続くのかが問題だけど。