Japanese | English | Korean

Samples

ボクシング

バウンディングボリューム(BV)の当たり判定を利用して、ボクシングをするサンプルです。 NPC(青トランクス)はランダムに防御を繰り返しています。プレイヤー(赤トランクス)を操作し、隙をついてNPCを攻撃してください。

目次






1.攻撃の当たり判定

攻撃の当たり判定は、プレイヤーの手足のボーンに設定したBVとNPCの全てのボーンに設定したBVの衝突判定で行います。プレイヤー側のBVとNPC側のBVが衝突した際、NPCが防御状態でなければ当たったと判定します。




2.ボクシングのサンプルコード

ここでは、BVによる攻撃の当たり判定を中心にサンプルコードを説明します。 以下のコードは、プレイヤーの手足のボーンにBVを設定します。

// BVFigureの作成と設定
bvFigure = BVBuilder.createBVFigure( figure );

// 変換行列・アクションの設定
bvFigure.setTransform( trans );

// 手足のボーンからBoundingVolumeを作成する
bvHand = BVBuilder.createBoneBV( figure, HandBoneId, 0,
Shape.TYPE_SPHERE, 1.f, BoundingVolume.ROTATE_NONE );
bvFoot = BVBuilder.createBoneBV( figure, FootBoneId, 0,
Shape.TYPE_SPHERE, 1.f, BoundingVolume.ROTATE_NONE );

// ボーンにBoundingVolumeを設定する
bvFigure.setBV( bvHand, HandBoneId );
bvFigure.setBV( bvFoot, FootBoneId );

また、以下のコードは、NPCの全てのボーンにBVを設定します。

// BVFigure・BVの作成と設定
bvFigure = BVBuilder.createBVFigure( figure, Shape.TYPE_BOX, 1.f );

// 変換行列・アクションの設定
bvFigure.setTransform( trans );

作成したBVを用いて、プレイヤーの攻撃の当たり判定を行います。当たりが判定された場合、NPCにのけぞりのアクションをさせます。

// パンチの衝突判定
if ( player.isPunching() && npc.isPunchChance() ) {
if ( collision.isHit(player.bvHand, npc.bvFigure, false, false) ) {
// パンチが当たったら
npc.action( NPC.ActIndexPHitted );
}
}

// キックの衝突判定
if ( player.isKicking() && npc.isKickChance() ) {
if ( collision.isHit(player.bvFoot, npc.bvFigure, false, false) ) {
// キックが当たったら
npc.action( NPC.ActIndexKHitted );
}
}

 
Boxing の実行時の画面