2013-11-15 7 views
1

Я немного в пробке. Я создаю игру, и по какой-то нечетной причине я не могу вызывать переменные из одного класса в другой. это было только в этом конкретном разделе кода, в котором он не работает, поэтому любая помощь приветствуется. Заранее спасибо:C++ помощь в программировании игр. 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); 
} 

так что проблема, в каждом случае заявление, я получаю ошибку «ERRO: символ„“не был объявлен в этой области»; Я тоже пытался прототипировать класс, который не решает проблему. Я ценю любую помощь, даже отрицательную обратную связь, по крайней мере, это что-то.

+2

Ну, 'символ' * нет * заявлено в этом объеме. Или где-нибудь еще в вашем примере, если на то пошло. Где это объявлено и что это должно быть? –

+0

Я понятия не имею, что вы здесь делаете, кроме гигантского беспорядка. Вы слышали о циклах 'for'? Как сделать базовую математику для определения номера кадра? Как насчет 'frame = character.characterHealth/5'? – tadman

+0

это объект класса игроков. Я не знаю хрен о наследовании, и я действительно не знаю, как «объявить его» – user2949299

ответ

1

В вашем классе не указано поле «символ». Смотрите сами:

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

Вы frame, HealthBar и offset. Тем не менее, в каждом методе, который вы декалировали, вы пытаетесь получить доступ к «персонажу».

знак был объектом из другого класса.

Класс C++ не знает, что существует другой объект. Чтобы получить доступ к другому объекту, вы должны либо передать его в метод по ссылке или указателю:

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

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

Или она должна быть объявлена ​​как глобальная переменная ДО тела функции, которая пытается получить к нему доступ.

Character character;//or extern Character character; 

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

Если «символ» не был упомянут ни в какой форме, прежде чем компилятор встречает функционировать орган, который пытается получить доступ характера, компилятор не будет знать, что «характер».

Как правило, рекомендуется избегать использования глобальных переменных, когда это возможно.

+0

символ был объектом другого класса ... – user2949299

+4

Передайте его в качестве аргумента. C++ не является экстрасенсом. 'void render (character & the_character)' возможно? – tadman

+0

@tadman OK Я вижу.Shankz – user2949299

Смежные вопросы