2014年7月13日日曜日

物理演算:剛体をSpriteからズラす

以前の記事で、紐付けした剛体を
Spriteの中心からどれくらいズラすか、という指定が
Box2dではできる的な事を書いたわけですが、
Box2dを使わずとも同じ事ができる事に気づいたのでメモ。



cocos2dxで、Scene::createWithPhysics(); のクラスを
使用して物理演算をする場合(いわゆるchipmunk的処理)、
スプライトと紐付けられた剛体は自動的に中心で重なるわけですが、
PhysicsBodyのクラスファイルを眺めていたら
剛体を作るメソッドの第三引数で
スプライトの中心からどれくらいズラすかの指定ができる事に気づく。

剛体を作るメソッドってのは
PhysicsBody::createBox あるいは
PhysicsBody::createCircle の事ね。
で、そのメソッドの第三引数でPoint(x,y)形式で座標位置を指定すると。

つまり記述としては、ズレがない場合は
PhysicsBody* hogehoge = PhysicsBody::createBox
                        (hogeRect->getContentSize(),material)

だとしたら、ズラす場合は
PhysicsBody* hogehoge = PhysicsBody::createBox
                        (hogeRect->getContentSize(),material,Point(100,100));

という感じ。

で、なんでズラす必要があるの?と思う人もいるかもしれないけど、
剛体をSpriteからズラせると、結構便利ですよ。


例えばこんな感じ。赤の四角は可視化した剛体。
①だと人物スプライトの画像が
地面スプライトの画像のアスファルト部分に接地する前に
剛体同士(人物と地面の剛体)がくっついてしまい、
絵面的に何かヘン。
こんな時、人物側の剛体をスプライトの中心から
上へとズラしておけばうまい具合に重なってくれたりしたり。
あるいは、地面側の剛体を下へとさげても同じ結果が得られますね。

あ、この例だと、別に剛体をスプライトの中心からズラさなくても
剛体の形を小さくするだけでいいじゃん、て話だけど
これはあくまでも一例でして、
アイデア次第で融通の効く使い方ができそう感丸出しですよ、って話。

ここら辺の物理演算はv3でだいぶ強化されたんですって。
v3使ってよかった!




☆★というわけでcocos2d-xで制作しました★☆
☆★物理演算もすこぶる快調に組み込まれてます★☆

レッド・ザ・パニッシャー ―スタイリッシュレトロアクション―
カテゴリ: アクション
Google Playで詳細を見る

今なら(永久に)無料! 今すぐチェック!!

0 件のコメント:

コメントを投稿