当前位置: 首页>>代码示例>>C++>>正文


C++ CCircle::OnCollisionFunc方法代码示例

本文整理汇总了C++中CCircle::OnCollisionFunc方法的典型用法代码示例。如果您正苦于以下问题:C++ CCircle::OnCollisionFunc方法的具体用法?C++ CCircle::OnCollisionFunc怎么用?C++ CCircle::OnCollisionFunc使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CCircle的用法示例。


在下文中一共展示了CCircle::OnCollisionFunc方法的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; // 衝突報告

}
开发者ID:photon70,项目名称:BTB,代码行数:60,代码来源:CollisionManager.cpp


注:本文中的CCircle::OnCollisionFunc方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。