本文整理汇总了C++中CCircle::SetCollisionState方法的典型用法代码示例。如果您正苦于以下问题:C++ CCircle::SetCollisionState方法的具体用法?C++ CCircle::SetCollisionState怎么用?C++ CCircle::SetCollisionState使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CCircle
的用法示例。
在下文中一共展示了CCircle::SetCollisionState方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: VSquareSize
bool suken::CCollisionManager::CollisionCircle(CCircle &A , CCircle &B)
{
// 前位置及び到達位置におけるパーティクル間のベクトルを算出
suken::Vector2D C0 = B.center.prePosition - A.center.prePosition;
suken::Vector2D C1 = B.center.position - A.center.position;
suken::Vector2D D = C1 - C0;
// 衝突判定用の2次関数係数の算出
float P = VSquareSize( D );
// 同じ方向に移動
if(P==0){
return false;
}
float Q = VDot( C0, D );
float R = VSquareSize( C0 );
// 距離
float r = A.radius + B.radius;
// 衝突判定式
float Judge = Q*Q - P*(R-r*r);
if( Judge < 0 ){
// 衝突していない
return false;
}
// 衝突時間の算出
float t_plus = (-Q + sqrt( Judge ) ) / P;
float t_minus = ( -Q - sqrt( Judge ) ) / P;
// 衝突位置の決定
suken::Vector2D pOut_colli_A = A.center.prePosition + ( A.center.position - A.center.prePosition) * t_minus;
suken::Vector2D pOut_colli_B = B.center.prePosition + ( B.center.position - B.center.prePosition) * t_minus;
// 衝突時間の決定(t_minus側が常に最初の衝突)
float pOut_t0 = t_minus;
float pOut_t1 = t_plus;
// 時間内衝突できるか?
// t_minusが1より大きいと届かず衝突していない
// t_plus、t_minusが両方ともマイナスだと反対方向なので衝突しない
if( (t_minus > 1) || (t_minus < 0 && t_plus < 0) ){
return false;
}
//衝突処理
A.SetCollisionState(true);
B.SetCollisionState(true);
A.OnCollisionFunc();
B.OnCollisionFunc();
#ifdef DEBUG_DRAW
DxLib::DrawCircle((int)(A.center.position.x +0.5), (int)(A.center.position.y+0.5) , (int)(A.radius+0.5) ,GREEN ,true );
DxLib::DrawCircle((int)(B.center.position.x +0.5), (int)(B.center.position.y+0.5) , (int)(B.radius+0.5) ,GREEN ,true );
#endif
CollisionCircleCalc(A ,B ,( 1.0f - abs(pOut_t0) ) / 60.0f );
return true; // 衝突報告
}