本文整理汇总了C++中Character::Move方法的典型用法代码示例。如果您正苦于以下问题:C++ Character::Move方法的具体用法?C++ Character::Move怎么用?C++ Character::Move使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Character
的用法示例。
在下文中一共展示了Character::Move方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Strategy
void CreatureManager::Strategy()
{
//当前有单位行动中,等待其行动完成
if(m_nActionCreatureNum != -1)
return;
ResetAllCreature();
if (m_eCampTurn == eCampTurn_Enemy)
{
Character* enemy = GetNextEnemy();
if(enemy == NULL)
return;
if(enemy->GetActionStage() == eActionStage_WaitStage)
{
enemy->SetActionStage(eActionStage_MoveStage);
m_nActionCreatureNum = enemy->GetNum();
//m_nSelectNum = m_nActionCreatureNum;
int xMove = g_RandomInt(0,enemy->GetMoveAbility());
int yMove = enemy->GetMoveAbility() - xMove;
int xDir = (g_RandomInt(0,1)==0)?-1:1;
int yDir = (g_RandomInt(0,1)==0)?-1:1;
eErrorCode errorCode = enemy->Move(enemy->GetBlock().xpos+xMove*xDir,enemy->GetBlock().ypos+yMove*yDir);
//测试
if (errorCode != eErrorCode_Success)
{
enemy->SetFinish(true);
}
}
}
// enemy->Move((Direction)(App::sInstance().GetHGE()->Random_Int(0,4)));
}
示例2: React
bool SpaceMine::React()
{
bool reactFlag = false;
std::map<int, D3DXVECTOR3> targetList;
for ( int i = 0; i < REAL_PLAYER_NUM; ++i )
{
Character* targetCharacter = GObjectTable->GetCharacter( i );
if ( !targetCharacter )
continue;
// 범위 및 현재 거리 계산
D3DXVECTOR4 tempMat;
D3DXVECTOR3 minePosition = GetTransform()->GetPosition(); // ISS 좌표계 기준 좌표
// 현재 위치
D3DXVec3Transform( &tempMat, &minePosition, &m_Matrix );
minePosition = D3DXVECTOR3( tempMat.x, tempMat.y, tempMat.z );
// 일단 각 플레이어와의 거리 확인
D3DXVECTOR3 relativeDirection = minePosition - targetCharacter->GetTransform()->GetPosition();
float distance = D3DXVec3Length( &relativeDirection );
if ( distance <= SPACE_MINE_RANGE )
{
// 범위 안이면 일단 추가
targetList.insert( std::map<int, D3DXVECTOR3>::value_type( i, relativeDirection ) );
// 만약 다른 팀원이면 발동!
if ( m_Team != targetCharacter->GetTeam() )
reactFlag = true;
}
}
// 발동되었다!
// 발동 조건은 상대방 팀에 한정이지만 발동 후 효과 적용은 전체
if ( reactFlag )
{
printf_s( "react!!\n" );
for ( std::map<int, D3DXVECTOR3>::const_iterator it = targetList.begin(); it != targetList.end(); ++it )
{
// 밀려나는 방향 및 세기 결정
D3DXVECTOR3 force;
D3DXVec3Normalize( &force, &it->second );
force *= -SPACE_MINE_FORCE;
// 적용 및 방송
Character* targetCharacter = GObjectTable->GetCharacter( it->first );
assert( targetCharacter );
targetCharacter->Move( force );
targetCharacter->GetClassComponent()->SetMovementControlCooldown( COOLDOWN_STUN );
GObjectTable->GetActorManager()->BroadcastCharacterChange( it->first, ChangeType::KINETIC_STATE );
}
}
return reactFlag;
}
示例3: HandleKeyboardInput
void System::HandleKeyboardInput( Character& player ) {
// Handle input - Player controls
if (Key(sf::Key::Left) || Key(sf::Key::A)) {
player.Move(LEFT);
} else if (Key(sf::Key::Right) || Key(sf::Key::D)) {
player.Move(RIGHT);
}
if (Key(sf::Key::Up) || Key(sf::Key::W)) {
player.Move(UP);
} else if (Key(sf::Key::Down) || Key(sf::Key::S)) {
player.Move(DOWN);
}
if (Key(sf::Key::LShift)) {
player.SetSpeed( 10.0F );
}
else {
player.SetSpeed( 3.0F );
}
// Handle input - Program controls
if (Key(sf::Key::F4)) {
SetState(EXIT);
}
}
示例4: SelectCreature
void CreatureManager::SelectCreature()
{
//友方回合才可以进行选择操作,包括查看敌方行动范围
if (m_eCampTurn == eCampTurn_Friend)
{
Block mouseBlock = App::sInstance().GetMouseBlock();
Character* selectChar = NULL;
if (mouseBlock.xpos!=-1 && mouseBlock.ypos!=-1)
{
selectChar = GetCreature(mouseBlock.xpos,mouseBlock.ypos);
//选中单位
if(selectChar!=NULL)
{
//需要拦截点击操作界面的消息
if (g_getLButtonState(App::sInstance().GetHGE()) == eLButtonState_Up && !(UISystem::sInstance().GetWindow(eWindowID_Command)->IsOnControl()))
{
int nLastSelect = m_nSelectNum;
if (selectChar->GetCamp() == eCamp_Friend )
{
//上次没有选择单位
if(nLastSelect == -1)
{
//选中的未行动友方进入移动阶段
if(!selectChar->GetFinish())
{
m_nSelectNum = selectChar->GetNum();
selectChar->SetActionStage(eActionStage_MoveStage);
}
}
//连续两次点击同一友方单位
else if(nLastSelect == selectChar->GetNum())
{
if(!selectChar->GetFinish())
{
//跳过移动阶段,进入操作阶段
selectChar->SetActionStage(eActionStage_HandleStage);
//打开操作界面
UIWindow* commandWindow = UISystem::sInstance().GetWindow(eWindowID_Command);
if(commandWindow)
{
commandWindow->SetShow(true);
commandWindow->SetBindChar(selectChar);
}
}
}
//其他情况
else
{
Character* lastChar = GetCreature(nLastSelect);
if(lastChar != NULL)
{
//上次点的是别的友方
if(lastChar->GetCamp() == eCamp_Friend)
{
if(lastChar->GetFinish() && !selectChar->GetFinish())
{
m_nSelectNum = selectChar->GetNum();
selectChar->SetActionStage(eActionStage_MoveStage);
}
// //上次的友方返回至待命阶段
// lastChar->SetActionStage(eActionStage_WaitStage);
// selectChar->SetActionStage(eActionStage_MoveStage);
}
else if(lastChar->GetCamp() == eCamp_Enemy)
{
if(!selectChar->GetFinish())
{
m_nSelectNum = selectChar->GetNum();
selectChar->SetActionStage(eActionStage_MoveStage);
}
}
}
else
//这里是错误分支,不可以运行到这里
return;
}
}
else if (selectChar->GetCamp() == eCamp_Enemy)
{
Character* lastChar = GetCreature(nLastSelect);
if(lastChar!=NULL)
{
if(lastChar->GetCamp()==eCamp_Friend)
{
if(lastChar->GetActionStage() == eActionStage_AttackStage)
{
//判断是否可以攻击到选中单位
if(lastChar->CanHitTarget(selectChar))
{
lastChar->SetTarget(selectChar->GetNum());
lastChar->GeginHit();
m_nSelectNum = -1;
return;
}
}
}
else if (lastChar->GetCamp() == eCamp_Enemy)
{
m_nSelectNum = selectChar->GetNum();
}
//.........这里部分代码省略.........
示例5:
void Stage_1::update()
{
GetFrame();
Input_device->GetKeyState();
if( Input_device->IsKeyDown( DIK_ESCAPE ) )
{
obj->SetNextMode( obj->MODE_END );
obj->RemoveModeObject();
}else {
switch( sstate ) {
case MOVE_1:
for( _TaskIterator i( ListObj.Enemy ); i.HasNext(); )
{
Character* chara = static_cast< Character* >( i.Next() );
chara->Draw();
}
for( _TaskIterator i( ListObj.Player ); i.HasNext(); )
{
Character* chara = static_cast< Character* >( i.Next() );
chara->Draw();
}
DrawBase->Draw( 0.0f, 0.0f );
font_1->Draw( _T( "避けろ!" ), 130, 140 );
font_2->Draw( _T( "Zキーで始まる" ), 180, 220 );
if( Input_device->IsKeyPressed( DIK_Z ) )
{
sstate = MOVE_2;
}
break;
case MOVE_2:
for( _TaskIterator i( ListObj.Enemy ); i.HasNext(); )
{
Character* chara = static_cast< Character* >( i.Next() );
chara->Move();
}
for( _TaskIterator i( ListObj.Bullet ); i.HasNext(); )
{
Character* chara = static_cast< Character* >( i.Next() );
chara->Move();
if( !chara->GetAlive() ) {
chara->Uninit();
i.Remove();
}
}
for( _TaskIterator i( ListObj.Player ); i.HasNext(); )
{
Character* chara = static_cast< Character* >( i.Next() );
chara->Move();
if( !chara->GetAlive() ) {
chara->Uninit();
i.Remove();
sstate = MOVE_3;
}
}
for( _TaskIterator i( ListObj.Enemy ); i.HasNext(); )
{
Character* chara = static_cast< Character* >( i.Next() );
chara->Draw();
}
for( _TaskIterator i( ListObj.Player ); i.HasNext(); )
{
Character* chara = static_cast< Character* >( i.Next() );
chara->Draw();
}
for( _TaskIterator i( ListObj.Bullet ); i.HasNext(); )
{
Character* chara = static_cast< Character* >( i.Next() );
chara->Draw();
}
DrawBase->Draw( 0.0f, 0.0f );
TCHAR buf[10];
swprintf_s( buf, _T( "%d" ), count );
RECT rect;
rect = { 500, 205, 500, 205 };
font_3->Draw( buf, -1, &rect, DT_NOCLIP | DT_SINGLELINE, 0xFF000000 );
rect = { 465, 170, 465, 170 };
font_3->Draw( _T( "残り時間" ), -1, &rect, DT_NOCLIP | DT_SINGLELINE, 0xFF000000 );
frame = ( frame + 1 ) % 60;
if( frame == 0 ) { count--; }
if( count == 0 )
{
sstate = MOVE_4;
}
break;
case MOVE_3:
for( _TaskIterator i( ListObj.Enemy ); i.HasNext(); )
{
Character* chara = static_cast< Character* >( i.Next() );
chara->Draw();
}
DrawBase->Draw( 0.0f, 0.0f );
font_1->Draw( _T( "GAME OVER" ), 105, 140 );
font_2->Draw( _T( "Zキーで戻る" ), 180, 220 );
if( Input_device->IsKeyPressed( DIK_Z ) )
{
obj->SetNextMode( obj->MODE_TITLE );
obj->RemoveModeObject();
}
//.........这里部分代码省略.........
示例6: SelectCreature
void CreatureManager::SelectCreature()
{
//友方回合才可以进行选择操作,包括查看敌方行动范围
if (m_eCampTurn == eCampTurn_Friend)
{
Block mouseBlock = App::sInstance().GetMouseBlock();
Character* selectChar = NULL;
if (mouseBlock.xpos!=-1 && mouseBlock.ypos!=-1)
{
selectChar = GetCreature(mouseBlock.xpos,mouseBlock.ypos);
//选中单位
if(selectChar!=NULL)
{
if (g_getLButtonState(App::sInstance().GetHGE()) == eLButtonState_Up)
{
int nLastSelect = m_nSelectNum;
if (selectChar->GetCamp() == eCamp_Friend )
{
//上次没有选择单位
if(nLastSelect == -1)
{
//选中的未行动友方进入移动阶段
if(!selectChar->GetFinish())
{
m_nSelectNum = selectChar->GetNum();
selectChar->SetActionStage(eActionStage_MoveStage);
}
}
//连续两次点击同一友方单位
else if(nLastSelect == m_nSelectNum)
{
//过滤移动阶段,进入攻击阶段
selectChar->SetActionStage(eActionStage_AttackStage);
}
//其他情况
else
{
Character* lastChar = GetCreature(nLastSelect);
if(lastChar != NULL)
{
//上次点的是别的友方
if(lastChar->GetCamp() == eCamp_Friend)
{
// //上次的友方返回至待命阶段
// lastChar->SetActionStage(eActionStage_WaitStage);
// selectChar->SetActionStage(eActionStage_MoveStage);
}
else if(lastChar->GetCamp() == eCamp_Enemy)
{
if(!selectChar->GetFinish())
{
m_nSelectNum = selectChar->GetNum();
selectChar->SetActionStage(eActionStage_MoveStage);
}
}
}
else
//这里是错误分支,不可以运行到这里
return;
}
}
else if (selectChar->GetCamp() == eCamp_Enemy)
{
Character* lastChar = GetCreature(nLastSelect);
if(lastChar!=NULL)
{
if(lastChar->GetCamp()==eCamp_Friend)
{
if(lastChar->GetActionStage() == eActionStage_AttackStage)
{
//判断是否可以攻击到选中单位
eAttackRange attackRange = lastChar->GetAttackRange();
int tarX = 0,tarY = 0;
for (MAttackRange::iterator mit=m_mAttackRange.begin();mit!=m_mAttackRange.end();mit++)
{
if(mit->first == attackRange)
{
for (vector<Pair>::iterator it=mit->second.begin();it!=mit->second.end();it++)
{
tarX = it->x + lastChar->GetBlock().xpos;
tarY = it->y + lastChar->GetBlock().ypos;
if(selectChar->GetBlock().xpos == tarX && selectChar->GetBlock().ypos == tarY)
{
//在攻击范围内
lastChar->SetTarget(selectChar->GetNum());
lastChar->GeginHit();
m_nSelectNum = -1;
return;
}
}
}
}
}
}
else if (lastChar->GetCamp() == eCamp_Enemy)
{
m_nSelectNum = selectChar->GetNum();
}
}
else
//.........这里部分代码省略.........