アプリ置き場

アプリ置き場

http://www.moreread.net/

Xamarin + CocosSharp を使ってみたい ⑤

部分描画(画像の一部を切り出して描画する)
Sprite.TextureRectInPixels = new CCRect(sposx, sposy, sw, sh);
Sprite.ContentSize = new CCSize(sw, sh);
 
文字列の折り返し
CCLabel.Dimensions = new CCSize(w, h);
 
仮想キーパッド(てきとう)
protected override void AddedToScene()
{
var eventListener = new CCEventListenerTouchOneByOne();
eventListener.OnTouchBegan = CCEventListener_TouchBegan;
eventListener.OnTouchCancelled = CCEventListener_TouchEnded;
eventListener.OnTouchEnded = CCEventListener_TouchEnded;
AddEventListener(eventListener, this);
}
 
Dictionary<int, uint> keyDic = new Dictionary<int, uint>();
private Boolean CCEventListener_TouchBegan(CCTouch touch, CCEvent touchEvent)
{
if (button_left.BoundingBox.ContainsPoint(touch.Location))
{
keyDic[touch.Id] = BUTTON_LEFT;
pad.buttons |= BUTTON_LEFT;
}
elseif (button_right.BoundingBox.ContainsPoint(touch.Location))
{
keyDic[touch.Id] = BUTTON_RIGHT;
pad.buttons |= BUTTON_RIGHT;
}
return true;
}
 
private void CCEventListener_TouchEnded(CCTouch touch, CCEvent touchEvent)
{
if (keyDic.ContainsKey(touch.Id))
{
pad.buttons &= ~keyDic[touch.Id];
}
}
 
private void CCEventListener_TouchMoved(CCTouch touch, CCEvent touchEvent)
//TODO
}
 
iPhone実機の接続
なかなかiPhone実機で動かせなくてイライラ。3~4時間かかってしまった。
罠回避ポイント。
  • Info.plistの配置ターゲット
  • .iOSプロジェクト設定のビルド→サポートアーキテクチャ
  • iPhone認証後のMacエージェントの切断、再接続
  • バンドル識別子変更後のソリューションクリーンビルド
  • 他いろいろあったけど忘れた
とはいえなんとか環境は整ったので、あとは作り込むのみ。
 
iPhone実機でマルチタッチが効かない
View.MultipleTouchEnabled =true;
 
iPhone実機で透過PNGが透過されない
ググるiOSでは8bit pngは透過しない?まじか。いや、32bitでも透過されない場合があるぞ。
どうもirfanViewで作ったPNGがよろしくないようだ。透過色、背景色の設定によるんだろうか?
あたらめてirfanViewPNG変換をいろいろやってみると、色がおかしくなったりしてる。PNG変換まわりはなんかおかしい。標準仕様外の最適化でもしてるんじゃろか。違うソフトで変換するかー。
 
あと.iOSプロジェクトのプロパティにあるPNG画像を最適化するにチェックいれると透過できない場合があったのでこれも注意。
 
描画が重い

 
どうしよう、実機でもカックカク。
メインループは60回まわってきてても画面の描画が反映されてるのはかなり少なそう。ダメージを受けたときのエフェクトとして、1フレームごとに表示/非表示の点滅をしたら、消えっぱなしに。
いろいろオーバーヘッドあるけどバッファの解像度は320x180とめっさ小さいので、iPhone7なら余裕だろうと思ってたんだけどなぁ。
 
ちょいとしらべてみるとDrawNodeでDrawRectangleしまくってるのが遅い。画像描画したほうがましだった。描画自体が遅いのか、毎フレームのノードの生成が遅いのか、生成と破棄ともなうGCが遅いのかは調べてないけど。
がんばって最適化するかー。
 
描画のずれ
iPhoneで画像の描画が1ドットずれる。上側1ドットが表示されず、下側1ドットが2ドットに引き延ばされてる。0.5ドットずれてるとかそういうアレだろうか?厳密なドット単位の処理がきついなぁ。とりあえず0.5f足したらなおった気がする。