本文整理汇总了C++中Enemy::GetPos方法的典型用法代码示例。如果您正苦于以下问题:C++ Enemy::GetPos方法的具体用法?C++ Enemy::GetPos怎么用?C++ Enemy::GetPos使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Enemy
的用法示例。
在下文中一共展示了Enemy::GetPos方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Hit
//----------------------------------
//機能:当たり判定
//引数:pTarget 敵の位置情報
//戻値:TRUEorFALSE
//----------------------------------
BOOL Bread::Hit(UnitBase *pTarget)
{
if (typeid(*pTarget) == typeid(Enemy))
{
Enemy *pEnemy = (Enemy*)pTarget;
if (isbread == TRUE)
{
//敵の位置をGetPosを通して受け取る
enemyPosition = pEnemy->GetPos();
//位置の計算を行う
int distance =
(int)(position.x - (enemyPosition.x + g_stageScrollPosition.x)) *
(int)(position.x - (enemyPosition.x + g_stageScrollPosition.x)) +
(int)(position.y - (enemyPosition.y + g_stageScrollPosition.y)) *
(int)(position.y - (enemyPosition.y + g_stageScrollPosition.y)); //(0-0)*(0-0)+(0-0)*(0-0) =((0-0)*(0-0)) + ((0-0)*(0-0))
if (distance <= (28 * 48))
{
//弾が当たったら弾を消す
Reset();
pEnemy->Kill();
return TRUE;
}
}
}
return FALSE;
}
示例2: UpdateEnemyPathing
void MultiplayerMap::UpdateEnemyPathing()
{
for (int i = 0; i < towers.size(); i++)
{
Tower *t = towers.at(i);
int x = t->GetX() / 32;
int y = t->GetY() / 32;
pathingArr[TILES_X * y + x].type = 1;
pathingArr[TILES_X * (y + 1) + x].type = 1;
pathingArr[TILES_X * y + (x + 1)].type = 1;
pathingArr[TILES_X * (y + 1) + (x + 1)].type = 1;
}
for (int i = 0; i < enemies.size(); i++)
{
Enemy *en = enemies.at(i);
Vector2f pos = en->GetPos();
TileNode enemyPos = TileNode(pos.x / 32, pos.y / 32, nullptr);
TileNode destination;
if (en->GetOwnerID() == 1)
{
destination = endNode;
}
else
destination = startNode;
vector<TileNode> enemyPath = pathfinder->Search(enemyPos, destination);
enemyPath.insert(enemyPath.begin(), enemyPos);
en->UpdatePath(enemyPath);
}
}
示例3: Hit
//——————————————————————
// 機能:衝突判定処理
// 引数:なし
// 戻値:成功/失敗
//——————————————————————
HRESULT Player::Hit(UnitBase* pTarget)
{
//ターゲットが敵だったら
if (typeid(*pTarget) == typeid(Enemy))
{
//敵の現在の位置
Enemy* enemy = (Enemy*)pTarget;
D3DXVECTOR2 enemyPos = enemy->GetPos();
//プレイヤーから敵までの距離の2乗を求める
int distance = (position.x - enemyPos.x) * (position.x - enemyPos.x) +
(position.y - enemyPos.y) * (position.y - enemyPos.y);
//キャラサイズの2乗以内だったら
if (distance <= (ACTOR_SIZE * ACTOR_SIZE))
{
//プレイヤー死ぬ
status = STATUS_DEAD;
}
}
//ターゲットがブロックだったら
if (typeid(*pTarget) == typeid(Block))
{
//現在の位置
Block* block = (Block*)pTarget;
int x = position.x;
int y = position.y;
if (block->GetMap(y , x) == 1 )
{
move.y = 0;
}
}
//ターゲットがアイテムだったら
if (typeid(*pTarget) == typeid(Item))
{
//現在の位置
Item* item = (Item*)pTarget;
D3DXVECTOR3 itemPos = item->GetPos();
//プレイヤーからブロックまでの距離の2乗を求める
int distance = (position.x - itemPos.x)*(position.x - itemPos.x) +
(position.y - itemPos.y)*(position.y - itemPos.y);
//2乗以内だったら
if (distance <= ACTOR_SIZE*ACTOR_SIZE)
{
}
}
return S_OK;
}
示例4: update
void MultiplayerMap::update(float elapsed_seconds)
{
if (updates++ % 30 == 0)
{
SendPlayerSync();
for (int i = 0; i < enemies.size(); i++)
{
Enemy *en = enemies[i];
UpdateEnemyStruct ues;
ues.health = en->GetHealth();
ues.UID = en->GetUID();
ues.x = en->GetPos().x;
ues.y = en->GetPos().y;
if (peerConnection)
peerConnection->Send(ues);
}
}
if (localPlayer->GetLives() <= 0)
{
on_show_winner(false);
return;
}
else if (remotePlayer->GetLives() <= 0)
{
on_show_winner(true);
return;
}
passiveIncomeCD += elapsed_seconds;
if (passiveIncomeCD > SECONDS_PER_PASSIVE_INCOME)
{
localPlayer->AddGold(localPlayer->GetPassiveIncome());
remotePlayer->AddGold(remotePlayer->GetPassiveIncome());
//SendPlayerSync();
passiveIncomeCD = 0;
on_creep_killed(0);
}
DoProjectileCollision();
if (peerConnection)
peerConnection->Update(elapsed_seconds);
}
示例5: Hit
//playerのHit関数
//引数:UnitBase型のポインタ
//(UnitBaseクラスを継承した子クラスの情報が扱える)
//戻り値:HRESULT型-成功かどうか
HRESULT Player::Hit(UnitBase* pTarget)
{
//ステージとの当たり判定
if (typeid(*pTarget) == typeid(Stage))
{
//pTargetをステージと判断し、stage型にキャスト
Stage* stage = (Stage*)pTarget;
//RayCastData型の変数を作る
RayCastData ray;
//レイが出る位置
ray.start = position;
ray.start.y = position.y+10;
//レイを向ける方向
ray.dir = D3DXVECTOR3(0, -1, 0);
//レイの情報を格納したアドレスを渡す
stage->GetModel()->RayCast(&ray);
//Rayが当たっているかつ
//ステージの位置Yがプレイヤー位置Y-1より大きかったら
if (ray.hit && ray.pos.y >= (position.y - 1) && ground_flg == FALSE)
{
jump_flg = TRUE;
jump_Count = 0;
ground_flg = TRUE;
position = ray.pos + D3DXVECTOR3(0, 0.5, 0);
}
else if (ground_flg == TRUE)
{
position = ray.pos + D3DXVECTOR3(0,0.5,0);
}
//目の前にステージがあるかの判定
ray.start = position;
D3DXMATRIX matR;
D3DXMatrixRotationY(&matR, D3DXToRadian(dir));
D3DXVECTOR3 rayVec = D3DXVECTOR3(0, 0, 1);
D3DXVec3TransformCoord(&rayVec, &rayVec, &matR);
ray.dir = rayVec;
stage->GetModel()->RayCast(&ray);
if (ray.hit && ray.dist < 2)
{
isWallHit = TRUE;
wallNormal = ray.normal;
}
else
{
isWallHit = FALSE;
}
ray.start = position;
ray.dir = D3DXVECTOR3(0, 0, -1);
stage->GetModel()->RayCast(&ray);
D3DXVECTOR3 v = stage->GetPos() - position;
//プレイヤーとカメラの間にステージがあるか
D3DXVECTOR3 pToCdist = camVec-position;
if (D3DXVec3Length(&v) < D3DXVec3Length(&pToCdist))
{
camVec = D3DXVECTOR3(position.x, 5, position.z);
}
}
//敵との当たり判定
if (typeid(*pTarget) == typeid(Enemy))
{
static int count = 0;
count--;
Enemy* enemy = (Enemy*)pTarget; //UnitBase型をEnemy型にキャスト
BOOL flg = item->Hit(enemy->GetPos()); //アイテムが当たったかどうか
if (flg)
{
enemy->KnockBack();
count = 100;
}
D3DXVECTOR3 v = enemy->GetPos() - position; //プレイヤーから敵に向かうベクトルを求める
if (D3DXVec3Length(&v) < 2) //ベクトルの長さが2以下だったら
{
if (count >= 0)
{
enemy->Kill();
g_gameScene = SC_CLEAR;
}
else
{
g_gameScene = SC_GAME_OVER;
}
}
}
if (typeid(*pTarget) == typeid(Invisible))
{
Invisible* invisible = (Invisible*)pTarget;
D3DXVECTOR3 inTopVec = invisible->GetPos() - position;
if (D3DXVec3Length(&inTopVec) < 1)
{
//.........这里部分代码省略.........