如果我在子类中运行AI,我会遇到问题。

这是我的主要循环,其中访问玩家和敌人的 Action ,逻辑和表演功能类。

//Logic
        myPlayer.player_move();
        myEnemy.enemy_logic();
//Rendering
        myPlayer.player_show();
        myEnemy.enemy_show();

因此,我访问了播放器类的可移动播放器的函数,然后访问了敌人类的逻辑(AI)函数。
void Enemy::enemy_move(){

eX -= 2;

}

void Enemy::enemy_logic(){
    Player myPlayer;
    if(myPlayer.x > SCREEN_WIDTH / 2){
        enemy_move();
    }
}

因此,如果“玩家”的x值大于屏幕的一半,我希望敌人开始向左移动

我可以编译程序,但是当我将播放器移过屏幕的中点时,敌人什么也没做。如果我将这个if语句放在main.cpp中,那么它将正常工作。有什么建议吗?

最佳答案

这是因为您正在重新初始化Player类的实例。而是将其作为参数传递:

void Enemy::enemy_logic(Player myPlayer){
    if(myPlayer.x > SCREEN_WIDTH / 2){
        enemy_move();
    }
}

这样,函数将使用您的实例,而不是其他作用域中的新实例。

关于c++ - C++ Game AI仅在主版本中有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17912344/

10-13 08:22