void CObject::CheckHitRect(CBullet &bullet, CPlayer &player) { /*敵弾とプレイヤーとの処理*/ for(int i = 0;i < BULLET_MAX;i++) { if(bullet.Flag[i]) { if(HitCheck(bullet.HitRect[i], player.HitRect) ) { if(player.IsWolf) { bullet.Flag[i] = FALSE; } else if(player.IsClear) { } else { if(!player.IsInvince) { player.CalcDamage(bullet.Attack, player.Defence); player.KnockBack(); } bullet.Flag[i] = FALSE; } } if(player.umbrella.IsExist) { if(HitCheck(bullet.HitRect[i], player.umbrella.HitRect) ) { if(player.umbrella.counter >= 5 && player.umbrella.counter <= 8) { Se[SE_REFRECT].PlaySoundA(); bullet.Flag[i] = FALSE; player.bullet.CreateRefBullet(player.umbrella.Get_PosX(), player.umbrella.Get_PosY(), i); player.bullet.IsRefrect[i] = TRUE; } else { player.bullet.IsRefrect[i] = FALSE; } } } } } }
//=============================================== //当たり判定処理 //=============================================== void CObject::CheckHitRect(CPlayer &player, CEnemy &enemy) { if(enemy.IsExist) { if(HitCheck(player.HitRect, enemy.HitRect) ) { if(player.IsWolf) { enemy.CalcDamage(30, 0); } else if(player.IsClear) { } else { if(!player.IsInvince) { player.CalcDamage(enemy.Attack, player.Defence); player.KnockBack(); } } } } }
void CObject::CheckHitRect(CBullet &bullet, CBoss &boss) { for(int i = 0;i < BULLET_MAX;i++) { if(bullet.Flag[i]) { if(boss.IsExist && boss.counter > 200) { if(HitCheck(bullet.HitRect[i], boss.HitRect) ) { bullet.Flag[i] = FALSE; bullet.IsRefrect[i] = FALSE; bullet.SetPosition(i); boss.CalcDamage(bullet.Attack, boss.Defence); AddScore(boss.Score); } } } } }
void CObject::CheckHitRect(CPlayer &player, CBoss &boss) { if(boss.IsExist && boss.counter > 200) { if(HitCheck(player.HitRect, boss.HitRect) ) { if(player.IsWolf) { boss.CalcDamage(30, 0); } else if(player.IsClear) { } else { if(!player.IsInvince) { player.CalcDamage(boss.Attack, player.Defence); player.KnockBack(); } } } } }
void CObject::CheckHitRect(CBullet &bullet, CEnemy &enemy) { for(int i = 0;i < BULLET_MAX;i++) { if(bullet.Flag[i]) { if(enemy.IsExist) { if(HitCheck(bullet.HitRect[i], enemy.HitRect) ) { bullet.Flag[i] = FALSE; bullet.IsRefrect[i] = FALSE; bullet.SetPosition(i); AddScore(enemy.Score); enemy.CalcDamage(bullet.Attack, enemy.Defence); Se[SE_REFRECT].PlaySoundA(); } } } enemy.Dead(); } }
void SQRChartLineGraph::OnMouseMove(uint32 hostIndex, uint32 nFlags, int32 x, int32 y) { const int index = HitCheck(x, y); if(index >= 0) { //TRUSERLINE("lk-yangmingzhe", "mouse x,y=%d,%d point x,y=%d,%f", x, y, index, m_data[index]); OnHitPoint(hostIndex, x, y, index, m_data[index]); } else { m_phost->SetMouseOverDesc(""); } }
void Pshot::Update() { shiftLevel = Player::GetShiftLevel(); // シフトレベルを手に入れる bomb->Update(); SetFirePosition(Game::GetPlayerPos().x, Game::GetPlayerPos().y); // 発射位置を設定 Input(); // 入力管理 Move(); // 動き計算 HitCheck(); // 当たり判定 effect->Update(); // エフェクト更新 Reset(); // 弾をリセット ShotCount(); // 発射準備のカウント管理 CopyStaticMem(); // staticメンバに値をコピー }
void CObject::CheckHitRect(CChara &chara, CBoss &boss) { if(chara.IsExist) { if(boss.IsExist) { if(HitCheck(chara.HitRect, boss.HitRect ) ) { AddScore(boss.Score); boss.CalcDamage(chara.Attack, boss.Defence); } } } }
void CObject::CheckHitRect(CChara &chara, CEnemy &enemy) { if(chara.IsExist) { if(enemy.IsExist) { if(HitCheck(chara.HitRect, enemy.HitRect ) ) { AddScore(enemy.Score); enemy.CalcDamage(chara.Attack, enemy.Defence); enemy.Dead(); } } } }
//プレイヤーキャラが他のキャラ、壁、お助けブロックと接触したときの処理 void HitChara(void) { //他プレイヤーとの接触判定 if(HitCheck(PlayP[i],PlayP[1-i],16,16)==TRUE){ POINT2D Haziki; Haziki.x=(PlayP[i].x-PlayP[1-i].x)/4.0f; Haziki.y=(PlayP[i].y-PlayP[1-i].y)/4.0f; PlayP[i].x+=Haziki.x; //自キャラ吹き飛び量 PlayP[i].y+=Haziki.y; PlayP[1-i].x-=Haziki.x; //相手キャラ吹き飛び量 PlayP[1-i].y-=Haziki.y; } //壁との当たり判定 if(PlayP[i].x<-274) PlayP[i].x+=2.0; if(PlayP[i].x>274) PlayP[i].x-=2.0; if(PlayP[i].y<-170) PlayP[i].y+=2.0; if(PlayP[i].y>86) PlayP[i].y-=2.0; //お助けブロックとの接触判定 for(j=0; j<2 ; j++){ if(HitCheck(PlayP[i],Iti[j],16,16)==TRUE){ POINT2D Haziki; Haziki.x=(PlayP[i].x-Iti[j].x)/4.0f; Haziki.y=(PlayP[i].y-Iti[j].y)/4.0f; PlayP[i].x+=Haziki.x; PlayP[i].y+=Haziki.y; } } }
void CObject::CheckHitRect(CBullet &bullet, CChara &chara, CBoss &boss) { if(chara.IsExist) { if(boss.IsExist && boss.counter > 200) { if(HitCheck(chara.HitRect, boss.HitRect) ) { boss.CalcDamage(chara.Attack, boss.Defence); chara.IsExist = FALSE; bullet.ChargeFlag = FALSE; AddScore(boss.Score); } } } }
//プレーヤー関連に対する敵1体のコリジョンを取る void Enemy::HitCheck2Player(){ //敵と自弾が接触しているか? int damage = _playerPtr->BltGrp.HitCheckAll(GetX(),GetY(),GetHitW(),GetHitH()); ReduceHP(damage); //接触している分だけHPを減らす //自機と敵が接触しているか? if(_playerPtr->GetState() == PlayerShip::Exist && HitCheck(GetX(),GetY(), _hitW,_hitH, _playerPtr->GetX(), _playerPtr->GetY(), PlayerShip::HitRect,PlayerShip::HitRect) == true){ /* _人人 人人_ > 突然の死 <  ̄Y^Y^Y^Y ̄ */ _playerPtr->SetDead(); } }
void CObject::CheckHitRect(CBullet &bullet, CChara &chara) { for(int i = 0;i < BULLET_MAX;i++) { if(bullet.Flag[i]) { if(chara.IsExist) { if(HitCheck(bullet.HitRect[i], chara.HitRect) ) { bullet.Flag[i] = FALSE; bullet.SetPosition(i); chara.IsExist = FALSE; } } } } }
void SceneGame::update(float dt) { //updateCallByChild(dt); //调用父类的方法,让背景动起来 //响应加速计 //ResponseAcceleration(dt); //产生星球 GenerationAsteroid(); //产生陨石 GenerationStone(); GenerationUFO(); //碰撞检测 HitCheck(); HitCheckWithUfo(); //_brainControlShow->Brain(); //忘记调用这个,导致脑波相关的两个进度条不显示 //设置游戏显示生命值和分数。 //_brainControlShow->SetLabelLives(_brainControlShow->_lives, 100); }
int BSPFinite(BSPNode *bsp) { return !HitCheck(bsp,1,float3(999999,9999999,999999),float3(999999,9999999,999999),NULL); }
void NNBulletManager::Update( float dTime ) { NNObject::Update( dTime ); //자식 업데이트 RemoveCheck(); HitCheck(); }
//ボールが壁、プレイヤーキャラ、お助けブロックに接触した時の処理 void HitBall(void) { //壁との当たり判定 if(Ball[i].pos.x<-280) Ball[i].mov.x = fabs(Ball[i].mov.x); if(Ball[i].pos.x>280) Ball[i].mov.x = -fabs(Ball[i].mov.x); if(Ball[i].pos.y>226){ Ball[i].mov.y = -fabs(Ball[i].mov.y); if(cpuflag[i] == 1) CPUT(i); //CPUはこの瞬間で目標点の計算を行う } //キャラとの当たり判定 if(HitCheck(Ball[i].pos,PlayP[i],10,16)==TRUE){ POINT2D Haziki; Ball[i].mov.x = (Ball[i].pos.x - PlayP[i].x) / (170.0f - (nsel * 50));//難易度により速度が変わる Ball[i].mov.y = (Ball[i].pos.y - PlayP[i].y) / (170.0f - (nsel * 50));//nselが大きいほど難易度高 Haziki.x=(Ball[i].pos.x-PlayP[i].x)/6.0f; Haziki.y=(Ball[i].pos.y-PlayP[i].y)/6.0f; Ball[i].pos.x += Haziki.x; Ball[i].pos.y += Haziki.y; } //お助けブロックとの接触判定 for(j=0 ; j < 2 ; j++){ if(HitCheck(Ball[i].pos,Iti[j],10,16)==TRUE){ POINT2D Haziki; Ball[i].mov.x = (Ball[i].pos.x - Iti[j].x ) / (170.0f - (nsel * 50)); Ball[i].mov.y = (Ball[i].pos.y - Iti[j].y ) / (170.0f - (nsel * 50)); Haziki.x=(Ball[i].pos.x-Iti[j].x)/6.0f; Haziki.y=(Ball[i].pos.y-Iti[j].y)/6.0f; Ball[i].pos.x += Haziki.x; Ball[i].pos.y += Haziki.y; if(cpuflag[i] == 1){ //CPUの場合 if(Ball[i].mov.y > 0){ //玉のY方向の速度が正なら目標点のX座標はボールのX座標 comT[i].y = 40 - nsel * 90;//Y座標は難易度にあわせて決める(難易度が高いほど下の方で動き回る) comT[i].x = Ball[i].pos.x; } else CPUT(i); //玉のY方向の速度が負なら目標点計算 } cflag[j] = 30; //衝突したらブロックの色が変わる、その為の判定用フラグ ocunt[j]++; //数回衝突すると何かが起こる Dotti[j] = i; //衝突した玉はP1のものかP2のものか判定 } } //破壊ブロックとの接触判定 for(Bloop2 = 0 ; Bloop2 < 4 ; Bloop2++){ for(Bloop1 = 0 ; Bloop1 < 17 ; Bloop1++){ if(Blife[Bloop1][Bloop2]>0){ //ライフ0のブロックは対象外 if(HitCheck(Ball[i].pos , Bpos[Bloop1][Bloop2] , 10 , 16)==TRUE){ //跳ね返り方向計算 Ball[i].mov.x = (Ball[i].pos.x - Bpos[Bloop1][Bloop2].x ) / (170.0f - (nsel * 50)); Ball[i].mov.y = (Ball[i].pos.y - Bpos[Bloop1][Bloop2].y ) / (170.0f - (nsel * 50)); if(cpuflag[i] == 1){ if(Ball[i].mov.y < 0) CPUT(i);//ボールのY方向の速度が負ならCPUの目標点計算 } Blife[Bloop1][Bloop2] -= 1; //接触したらブロックのライフ−1 if (Blife[Bloop1][Bloop2] == 0){ poi[i]++; //ブロックを破壊したらポイントプラス if(poi[i] == 20) fflag = 1; //ポイントが20溜まったらゲーム終了 chflag[i] = 1; //キャラ顔変化判定用フラグ=1(喜び顔) chcunt[i] = 200; //カウントが0になるまで顔は喜び顔のまま fin++; //ブロックの破壊数プラス if(fin == 68) fflag = 1; //全てのブロックが壊れたらゲーム終了 } } } } } }
//お助けキャラが壁、プレイヤーキャラ、破壊ブロックに接触した時の処理 void HitOtasuke(void) { //壁との当たり判定 if(Ball[i].pos.x<-284) Ball[i].mov.x = fabs(Ball[i].mov.x); if(Ball[i].pos.x>284) Ball[i].mov.x = -fabs(Ball[i].mov.x); if(Ball[i].pos.y>230) Ball[i].mov.y = -fabs(Ball[i].mov.y); //お助けブロックとの当たり判定 for(j=0 ; j < 2 ; j++){ if(HitCheck(Ball[i].pos,Iti[j],12,16)==TRUE){ Ball[i].mov.x = (Ball[i].pos.x - Iti[j].x ) / 100.0f; Ball[i].mov.y = (Ball[i].pos.y - Iti[j].y ) / 100.0f; cflag[j] = 30; //衝突したらブロックの色が変わる、その為の判定用フラグ } } //キャラとの当たり判定 //お助けブロック1から出たお助けキャラ if(i < 5){ if(HitCheck(Ball[i].pos,PlayP[Dot[0]],12,16)==TRUE){ Ball[i].mov.x = (Ball[i].pos.x - PlayP[Dot[0]].x) / 100.0f;//お助けイベントを発生させたキャラなら触れる Ball[i].mov.y = (Ball[i].pos.y - PlayP[Dot[0]].y) / 100.0f;//Dot[0]=0ならプレイヤー1、1ならプレイヤー2 } } //お助けブロック2から出たお助けキャラ else{ if(HitCheck(Ball[i].pos,PlayP[Dot[1]],12,16)==TRUE){ Ball[i].mov.x = (Ball[i].pos.x - PlayP[Dot[1]].x) / 100.0f; Ball[i].mov.y = (Ball[i].pos.y - PlayP[Dot[1]].y) / 100.0f; } } //破壊ブロックとの接触判定 for(Bloop2 = 0 ; Bloop2 < 4 ; Bloop2++){ for(Bloop1 = 0 ; Bloop1 < 17 ; Bloop1++){ if(Blife[Bloop1][Bloop2]>0){ //ライフ0のブロックは対象外 if(HitCheck(Ball[i].pos , Bpos[Bloop1][Bloop2] , 12 , 16)==TRUE){ //跳ね返り方向計算 Ball[i].mov.x = (Ball[i].pos.x - Bpos[Bloop1][Bloop2].x ) / 100.0f; Ball[i].mov.y = (Ball[i].pos.y - Bpos[Bloop1][Bloop2].y ) / 100.0f; Blife[Bloop1][Bloop2] -= 1; //接触したらブロックのライフ−1 if (Blife[Bloop1][Bloop2] == 0){ //お助けブロック1から出たお助けキャラ if(i < 5){ poi[Dot[0]]++; //ブロックを破壊したらポイントプラス if(poi[Dot[0]] == 20) fflag = 1; chflag[Dot[0]] = 1; chcunt[Dot[0]] = 200; } //お助けブロック2から出たお助けキャラ else { poi[Dot[1]]++; if(poi[Dot[1]] == 20) fflag = 1; chflag[Dot[1]] = 1; chcunt[Dot[1]] = 200; } fin++; if(fin == 68) fflag = 1; } } } } } }
void Cf3MapObjectfunya::OnMove() { if (!IsValid()) return; if (!m_pParent->IsPlayable()) return; if (m_bFirst) { HitCheck(); m_bFirst = false; } float Wind = m_pParent->GetWind(floor(m_X/32),floor(m_Y/32)); float Friction = m_pParent->GetFriction(floor(m_X/32),floor((m_Y+14)/32)); float Gravity = GetGravity(); if (m_pParent->ItemCompleted()) Smile(); if (theSetting->m_Hyper) m_nPower=4; // 動かしま〜す if (m_State==STANDING||m_State==SLEEPING||m_State==BLINKING) { // 立ってるとき m_DX -= WINDFACTOR*(m_DX-Wind)*RUNFRICTION; BringClose(m_DX,0.0f,Friction); if (m_DX==0) m_Direction = DIR_FRONT; if (m_State==STANDING && ++m_Sleepy>=30*40/3) Sleep(); if (m_State==BLINKING && --m_PoseCounter==0) m_State = STANDING; if (m_State==STANDING && CApp::random(120)==0) Blink(); if (m_PowerY<=0 && m_pInput->GetKeyPressed(F3KEY_JUMP)) StartJump(); if (m_PowerX<=0 && m_pInput->GetKeyPressed(F3KEY_LEFT)) Run(DIR_LEFT); if (m_PowerX>=0 && m_pInput->GetKeyPressed(F3KEY_RIGHT)) Run(DIR_RIGHT); if (m_pInput->GetKeyPressed(F3KEY_DOWN)) Sit(); if (m_pInput->GetKeyPushed(F3KEY_ATTACK)) BreatheIn(); if (!m_HitBottom) { Fall(); } }ef(m_State==RUNNING) { // 走ってるとき int AXL = 0, AXR = 0; if (m_PowerX<=0 && m_pInput->GetKeyPressed(F3KEY_LEFT)) AXL = 1; if (m_PowerX>=0 && m_pInput->GetKeyPressed(F3KEY_RIGHT)) AXR = 1; m_DX -= Friction*(m_DX-Wind)*RUNFRICTION; m_DX += Friction*2.0f*(AXR-AXL); if (AXL&&!AXR) m_Direction = DIR_LEFT; if (AXR&&!AXL) m_Direction = DIR_RIGHT; if (!AXL&&!AXR) Stop(); if (m_PowerY<=0 && m_pInput->GetKeyPressed(F3KEY_JUMP)) StartJump(); if (m_pInput->GetKeyPressed(F3KEY_DOWN)) Sit(); if (m_pInput->GetKeyPushed(F3KEY_ATTACK)) BreatheIn(); if (!m_HitBottom) { Fall(); } }ef(m_State==WALKING) { // 歩いてるとき int AXL = 0, AXR = 0; if (m_PowerX<=0 && m_pInput->GetKeyPressed(F3KEY_LEFT)) AXL = 1; if (m_PowerX>=0 && m_pInput->GetKeyPressed(F3KEY_RIGHT)) AXR = 1; m_DX += WALKACCEL*(AXR-AXL); m_DX -= m_DX*WALKFRICTION; if (AXL&!AXR) m_Direction = DIR_LEFT; if (AXR&!AXL) m_Direction = DIR_RIGHT; if (!AXL&!AXR) m_Direction = DIR_FRONT; if (!m_pInput->GetKeyPressed(F3KEY_DOWN)) Stop(); if (m_PowerY<=0 && m_pInput->GetKeyPushed(F3KEY_JUMP)) StartJump(); if (m_pInput->GetKeyPushed(F3KEY_ATTACK)) BreatheIn(); if (!m_HitBottom) Fall(); }ef(m_State==CHARGING) { // パワー充填中 if (m_ChargePower>0) { m_ChargePower -= m_ChargeDec; if (m_ChargePower<0) m_ChargePower = 0; } m_X -= m_DX; if (m_pInput->GetKeyPushed(F3KEY_DOWN)) Sit(); if (m_pInput->GetKeyPushed(F3KEY_ATTACK)) BreatheIn(); if (!m_pInput->GetKeyPressed(F3KEY_JUMP)) Jump(); if (!m_HitBottom) Fall(); }ef(m_State==JUMPING) { // 空中 if (m_DY>=0) { int AXL = 0, AXR = 0; if (m_PowerX<=0 && m_pInput->GetKeyPressed(F3KEY_LEFT)) AXL = 1; if (m_PowerX>=0 && m_pInput->GetKeyPressed(F3KEY_RIGHT)) AXR = 1; m_DX -= (m_DX-Wind)*JUMPFRICTIONX; m_DX += JUMPACCEL*(AXR-AXL); if (AXL&!AXR) m_Direction = DIR_LEFT; if (AXR&!AXL) m_Direction = DIR_RIGHT; } if (m_HitLeft||m_HitRight) m_Direction = DIR_FRONT; m_DY += Gravity; if (m_DY>=0) { if (m_PowerY>=0 && m_pInput->GetKeyPressed(F3KEY_DOWN)) m_DY += Gravity*ADDGRAVITY; m_DY -= m_DY*JUMPFRICTIONY; if (m_pInput->GetKeyPressed(F3KEY_UP)) { m_DY += Gravity; m_DY -= m_DY*JUMPFRICTIONY; } } if (m_pInput->GetKeyPushed(F3KEY_ATTACK)) BreatheIn(); if (m_HitBottom) Land(); }ef(m_State==BREATHEIN) { // 冷気充填中 m_ChargePower+=1.0f; if (m_pInput->GetKeyPushed(F3KEY_LEFT)) m_Direction = DIR_LEFT; if (m_pInput->GetKeyPushed(F3KEY_RIGHT)) m_Direction = DIR_RIGHT; if (m_pInput->GetKeyPushed(F3KEY_UP)) m_Direction = DIR_FRONT; if (m_HitBottom) { m_DX -= WINDFACTOR*(m_DX-Wind)*RUNFRICTION; BringClose(m_DX,0.0f,Friction); if (m_pInput->GetKeyPushed(F3KEY_DOWN)) Sit(); }else { m_ChargePower+=1.0f; if (m_DY>=0) { m_DX -= (m_DX-Wind)*JUMPFRICTIONX; } m_DY += Gravity; if (m_DY>=0) { m_DY -= m_DY*JUMPFRICTIONY; } } if (!m_pInput->GetKeyPressed(F3KEY_ATTACK)) BreatheOut(); }ef(m_State==BREATHEOUT) { // 冷気放出!! m_ChargePower-=1.0f; if (m_HitBottom) { m_DX -= WINDFACTOR*(m_DX-Wind)*RUNFRICTION; BringClose(m_DX,0.0f,Friction); }else { if (m_DY>=0) { m_DX -= (m_DX-Wind)*JUMPFRICTIONX; } m_DY += Gravity; if (m_DY>=0) { m_DY -= m_DY*JUMPFRICTIONY; } } if (m_ChargePower<=0.0f) { if (m_nPower) { if (m_HitBottom) Land(); else Fall(); }else { Tire(); } } }ef(m_State==TIRED) { // ちかれたー! m_PoseCounter--; if (m_HitBottom) { m_DX -= WINDFACTOR*(m_DX-Wind)*RUNFRICTION; BringClose(m_DX,0.0f,Friction); }else { m_DX -= (m_DX-Wind)*JUMPFRICTIONX; if (m_HitLeft||m_HitRight) m_Direction = DIR_FRONT; m_DY += Gravity; m_DY -= m_DY*JUMPFRICTIONY; } if (m_PoseCounter==0) Land(); }ef(m_State==FROZEN) { // 凍っちゃった… m_PoseCounter--; if (m_HitBottom) { m_DX -= WINDFACTOR*(m_DX-Wind)*RUNFRICTION/5; BringClose(m_DX,0.0f,Friction/5); }else { m_DX -= (m_DX-Wind)*JUMPFRICTIONX/5; m_DY += Gravity*(1+ADDGRAVITY); m_DY -= m_DY*JUMPFRICTIONY/5; } if (m_PoseCounter==0) Land(); } // 速度飽和(めり込み防止) Saturate(-RUNMAX,m_DX,RUNMAX); Saturate(-JUMPMAX,m_DY,FALLMAX); // 実際の移動+当たり判定 // 1回の移動ごとに当たり判定 // という手順ですり抜けバグは解消されるはず m_HitLeft = m_HitRight = m_HitTop = m_HitBottom = false; m_X += m_DX; HitCheck(); if (!m_HitTop&&!m_HitBottom) { m_Y += m_DY; HitCheck(); } }