簡體   English   中英

C ++游戲編程幫助。 超簡單

[英]C++ game programming help. Super-Simple

我有點卡紙。 我正在開發游戲,由於某些奇怪的原因,我無法調用從一個類到另一個類的變量。 它只是在代碼的此特定部分中不起作用,因此不勝感激。 提前致謝:

這是代碼:

class HeadsUpDisplay
{
private:
    int frame;
public:
    SDL_Rect HealthBar[20];
    SDL_Rect offset;
    void init();
    void render();
}HUD;

void HeadsUpDisplay::init(){
    offset.x = SCREENW*.9;
    offset.y = SCREENH/10;
    HealthBar[0].x = 0;
    HealthBar[0].y = 0;
    HealthBar[0].w = 204;
    HealthBar[0].h = 14;

    HealthBar[1].x = 204*1;
    HealthBar[1].y = 0;
    HealthBar[1].w = 204;
    HealthBar[1].h = 14;

    HealthBar[2].x = 204*2;
    HealthBar[2].y = 0;
    HealthBar[2].w = 204;
    HealthBar[2].h = 14;

    HealthBar[3].x = 204*3;
    HealthBar[3].y = 0;
    HealthBar[3].w = 204;
    HealthBar[3].h = 14;

    HealthBar[4].x = 204*4;
    HealthBar[4].y = 0;
    HealthBar[4].w = 204;
    HealthBar[4].h = 14;

    HealthBar[5].x = 204*5;
    HealthBar[5].y = 0;
    HealthBar[5].w = 204;
    HealthBar[5].h = 14;

    HealthBar[6].x = 204*6;
    HealthBar[6].y = 0;
    HealthBar[6].w = 204;
    HealthBar[6].h = 14;

    HealthBar[7].x = 204*7;
    HealthBar[7].y = 0;
    HealthBar[7].w = 204;
    HealthBar[7].h = 14;

    HealthBar[8].x = 204*8;
    HealthBar[8].y = 0;
    HealthBar[8].w = 204;
    HealthBar[8].h = 14;

    HealthBar[9].x = 204*9;
    HealthBar[9].y = 0;
    HealthBar[9].w = 204;
    HealthBar[9].h = 14;

    HealthBar[10].x = 204*10;
    HealthBar[10].y = 0;
    HealthBar[10].w = 204;
    HealthBar[10].h = 14;

    HealthBar[11].x = 204*11;
    HealthBar[11].y = 0;
    HealthBar[11].w = 204;
    HealthBar[11].h = 14;

    HealthBar[12].x = 204*12;
    HealthBar[12].y = 0;
    HealthBar[12].w = 204;
    HealthBar[12].h = 14;

    HealthBar[13].x = 204*13;
    HealthBar[13].y = 0;
    HealthBar[13].w = 204;
    HealthBar[13].h = 14;

    HealthBar[14].x = 204*14;
    HealthBar[14].y = 0;
    HealthBar[14].w = 204;
    HealthBar[14].h = 14;

    HealthBar[15].x = 204*15;
    HealthBar[15].y = 0;
    HealthBar[15].w = 204;
    HealthBar[15].h = 14;

    HealthBar[16].x = 204*16;
    HealthBar[16].y = 0;
    HealthBar[16].w = 204;
    HealthBar[16].h = 14;

    HealthBar[17].x = 204*17;
    HealthBar[17].y = 0;
    HealthBar[17].w = 204;
    HealthBar[17].h = 14;

    HealthBar[18].x = 204*18;
    HealthBar[18].y = 0;
    HealthBar[18].w = 204;
    HealthBar[18].h = 14;

    HealthBar[19].x = 204*19;
    HealthBar[19].y = 0;
    HealthBar[19].w = 204;
    HealthBar[19].h = 14;

}

void HeadsUpDisplay::render(){


    if(character.characterhealth >95 && character.characterhealth <= 100)
    {
        frame = 19;
    }
    if(character.characterhealth >90 && character.characterhealth <=95)
    {
        frame = 18;
    }
    if(character.characterhealth >85 && character.characterhealth <= 90)
    {
        frame = 17;
    }
    if(character.characterhealth >80 && character.characterhealth <= 85)
    {
        frame = 16;
    }
    if(character.characterhealth >75 && character.characterhealth <= 80)
    {
        frame = 15;
    }
    if(character.characterhealth >70 && character.characterhealth <= 75)
    {
        frame = 14;
    }
    if(character.characterhealth >65 && character.characterhealth <= 70)
    {
        frame = 13;
    }
    if(character.characterhealth >60 && character.characterhealth <= 65)
    {
        frame = 12;
    }
    if(character.characterhealth >55 && character.characterhealth <= 60)
    {
        frame = 11;
    }
    if(character.characterhealth >50 && character.characterhealth <= 55)
    {
        frame = 10;
    }
    if(character.characterhealth >45 && character.characterhealth <= 50)
    {
        frame = 9;
    }
    if(character.characterhealth >40 && character.characterhealth <= 45)
    {
        frame = 8;
    }
    if(character.characterhealth >35 && character.characterhealth <= 40)
    {
        frame = 7;
    }
    if(character.characterhealth >30 && character.characterhealth <= 35)
    {
        frame = 6;
    }
    if(character.characterhealth >25 && character.characterhealth <= 30)
    {
        frame = 5;
    }
    if(character.characterhealth >20 && character.characterhealth <= 25)
    {
        frame = 4;
    }
    if(character.characterhealth >15 && character.characterhealth <= 20)
    {
        frame = 3;
    }
    if(character.characterhealth >10 && character.characterhealth <= 15)
    {
        frame = 2;
    }
    if(character.characterhealth >5 && character.characterhealth <= 10)
    {
        frame = 1;
    }
    if(character.characterhealth >0 && character.characterhealth <= 5)
    {
        frame = 0;
    }
    SDL_BlitSurface(health, &HealthBar[frame], screen, &offset);
}

所以問題是,在每個if語句中,我得到錯誤“ erro:在此范圍內未聲明'character'”; 我也嘗試對類進行原型設計,但未能解決問題。 我很感謝您的幫助,甚至是負面的反饋,至少是這樣。

Y我們的班級沒有“字符”字段。 你自己看:

class HeadsUpDisplay
{
    private:
       int frame;
    public:
       SDL_Rect HealthBar[20];
       SDL_Rect offset;
       void init();
       void render();
};

您具有frameHealthBaroffset 但是,在您采用的所有貼花方法中,都嘗試訪問“字符”。

角色是另一個類的對象。

C ++類不知道另一個對象存在。 要訪問另一個對象,您應該通過引用或指針將其傳遞給方法:

void HUD::render(Character &character){
    if (character.whatever)
        ....
}

void HUD::render(Character *character){
    if (character->whatever)
        ....
}

或者應將其聲明為嘗試訪問它的全局變量BEFORE函數體。

Character character;//or extern Character character;

void HUD::render(){
    if (character.whatever)
        ....
}

如果在編譯器遇到試圖訪問字符的函數體之前未以任何形式提及“字符”,則編譯器將不知道“字符”是什么。

通常最好避免使用全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM