ページ 11

cocos2d ver3.xでの表示座標について

Posted: 2015年1月08日(木) 12:25
by 池田
こちらでの質問が適しているかわからないのですが、ご質問させて下さい。
かなり無理やりですが、cocos2dでリバーシを組んで見ました。

当初は640×1136の画面サイズを想定して作っていたため、
iPadサイズなど他の端末に入れてみたところ、表示座標が物凄いずれておりました。

こちらの掲示板様に使っている方がいらっしゃれば
ご意見をお聞かせ願いたいのですがどのように対処しているのでしょうか。

①可能であれば左下を(0,0)ではなく左上を(0,0)としたい。
 →DXライブラリと同じような形です!現状は画面サイズを測定し、座標を引いて出しております。
  参考プログラムを見てみるとこのようにしている所が、ほとんどないので正しいかもわからないです・・・。

コード:

//イメージ
#define     WIN_W   (cocos2d::Director::getInstance()->getVisibleSize().width)
#define     WIN_H   (cocos2d::Director::getInstance()->getVisibleSize().height)

xx->setPositionX( WIN_H-x );
②2次元配列の座標計算がやっかいです。
リバーシを作っていて思ったのですが、2次元配列の表示がY軸を反転しなければならないため、計算が厄介でした。
「①」の状況を作り出せるなら楽かと思うのですが、こういった場合、どのように回避しているのでしょうか。

③端末ごとの表示場所を同じくしたいのですが、どのように行えばよいのでしょうか。
iPhone5,iPhone4だと横サイズは同じなのですが、高さが違うため、表示にズレが発生してしまいます。

 Delegateにて
 glview->setDesignResolutionSize( 640, 960, ResolutionPolicy::SHOW_ALL );

として座標系を固定してしまうと、やりやすい気もするのですが
黒帯が入ってしまうため、折角の見栄えが勿体無いです。

3つも質問してしまってすみません・・・。
ネットの情報を見たり、本をみたのですが、
ココらへんで躓いている方が多いみたいで。。。

Re: cocos2d ver3.xでの表示座標について

Posted: 2015年1月08日(木) 13:45
by softya(ソフト屋)
Cocos2dではなく、Cocos2d-xですよね? 似てますがすでに枝分かれして久しいので区別をお願いしますね。
別々に活動してるのが現状です。
「Cocos2D – Swift Open Source Game Engine」
http://www.cocos2d-swift.org/
「Cocos2d-x: World's #1 Open Source Game Development Platform」
http://jp.cocos2d-x.org/

①可能であれば左下を(0,0)ではなく左上を(0,0)としたい。
出来なくはないみたいですがバグの温床になりそうです。
「[Cocos2d-x] Cocos2d-xの座標系の基本とまとめ:要点はanchorPoint(アンカーポイント) | Ouka Studio」
http://site.oukasei.com/?p=1157

②2次元配列の座標計算がやっかいです。
スプライトのアンカーポイントを変えれば、それほど複雑でもないと思います。

③端末ごとの表示場所を同じくしたいのですが、どのように行えばよいのでしょうか。
難しいです。余白を背景画像など何かで埋めるしか無いと思います。アスペクト比を変えてしまうと見栄えが悪いので。

Re: cocos2d ver3.xでの表示座標について

Posted: 2015年1月08日(木) 19:30
by coco
AndroidだとIPhone以上に端末毎のサイズ差が激しいため、自分はアスペクト比は気にせず拡大縮小を行っています。

背景画像など基準となるサイズを予め決める(例えば500×500)
端末画面サイズを取得してスケール値を求める(端末が横幅1000だとすれば500/1000の0.5fがスケール値)
このスケール値をスプライトに掛け合わせる事で大体の端末に対応出来ます。

座標はそういうものだと慣れてしまったので、対策の仕方は分かりません・・・。

Re: cocos2d ver3.xでの表示座標について

Posted: 2015年1月08日(木) 21:45
by 池田
お二方ともご回答ありがとうございます!
なるほど・・・やはり開発者様ごとに独自の方法で行っているのですね。
すぐに試すとして、座標を固定するしかないみたいです。

ご回答ありがとうございました!
cocoさんの場所にかける方法試させて下さい。