今度はPolycodeの2D空間上で画像を表示させてみましょう。
今まで同様、PolycodeTemplateApp.cppのコンストラクタに下記のコードを追加します。
追加するコード:
core = new CocoaCore(view, 640,480,false,0,60); CoreServices::getInstance()->getResourceManager()->addArchive("default.pak"); CoreServices::getInstance()->getResourceManager()->addDirResource("default"); // Write your code here! // 2Dの場合はScreenを使います。 Screen* screen = new Screen(); Image* image = new Image("../Resources/icon.png"); ScreenImage* screenImage = new ScreenImage(image); screenImage->setPosition(100, 100, 0); screen->addChild(screenImage); }
実行結果がこれ。画面にアイコンが表示されています。
Polycodeでは、2D空間の場合はScreen、3D空間の場合はSceneというクラスのインスタンスをつかって空間を表します。
今回は2D空間に画像を表示させるサンプルなので、Sceenを使っています。
次に、画像を表示させるまでの方法ですが、紛らわしいですがImageクラスとScreenImageクラスを使っています。
2つの違いとしては、
- Imageクラス
- メモリ上に存在する、ビットマップデータ
- ScreenImageクラス
- 2D空間上に画像を表示させる表示オブジェクト
といったところです。
ActionScriptになじんでいる方であれば、BitmapDataクラスとBitmapクラスの違い、と理解すると良いと思います。
表示オブジェクトの座標は、setPositionメソッドを使って設定します。引数はx, y, z座標の順番になっています。
2D空間の場合、z座標を0以外にすると表示されないので気をつけましょう。
ImageクラスにはsetPixelというこれまたActionScriptに慣れた人には分かりやすいメソッドがあり、これを使う事でピクセル毎の操作ができるようになります。
Imageクラスのコンストラクタに画像ファイルパスを指定すると、パスにある画像を読み込みます。ただし、今現在はpng形式の画像にしか対応していない様です。
ScreenImageクラスのコンストラクタにImageクラスのインスタンスを入れる事で、Imageを表示させる事ができるようになります。
僕はMacでコードを書いているのですが、表示させている画像はXCodeのプロジェクトにicon.pngという画像を追加していますが、ビルド後の実行ファイルと画像などの格納場所との位置関係を考慮し、”../Resources/”とパスを追加しています。
VisualStudioの場合はこういったことはしなくてよかったはず。
最後、表示させるにはscreenオブジェクトのaddChildメソッドを使って表示オブジェクトに表示させます。これもActionScript使いにはなじみが強いですね。
しばらくはつまらない基礎編が多いですが、いきなりOpenNIで表示、みたいな事をやってもわけがわからなくなるので順番に書く事にします。