ボクシング
バウンディングボリューム(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,
// ボーンにBoundingVolumeを設定する
bvFigure.setBV( bvHand, HandBoneId );
bvFigure.setBV( bvFoot, FootBoneId );
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 );
bvFigure = BVBuilder.createBVFigure( figure, Shape.TYPE_BOX, 1.f );
// 変換行列・アクションの設定
bvFigure.setTransform( trans );
作成したBVを用いて、プレイヤーの攻撃の当たり判定を行います。当たりが判定された場合、NPCにのけぞりのアクションをさせます。
// パンチの衝突判定
if ( player.isPunching() && npc.isPunchChance() ) {
// キックの衝突判定
if ( player.isKicking() && npc.isKickChance() ) {
if ( player.isPunching() && npc.isPunchChance() ) {
if ( collision.isHit(player.bvHand, npc.bvFigure, false, false) ) {
}
// パンチが当たったら
npc.action( NPC.ActIndexPHitted );
}
npc.action( NPC.ActIndexPHitted );
// キックの衝突判定
if ( player.isKicking() && npc.isKickChance() ) {
if ( collision.isHit(player.bvFoot, npc.bvFigure, false, false) ) {
}
// キックが当たったら
npc.action( NPC.ActIndexKHitted );
}
npc.action( NPC.ActIndexKHitted );

Boxing の実行時の画面

