У меня много проблем с тем, чтобы понять, почему мой код не работает. Мне больше не к кому обратиться за помощью, поэтому я надеюсь, что кто-то здесь сможет мне помочь.

Я работаю над игрой на C ++, и мне нужно, так сказать, отрезать землю. Вот мой код в том виде, в котором он есть сейчас:

Это в моем main.cpp:

if(en1.getBottom() > jello1.getGroundHeight())
    {
        jello1.setHealth(jello1.getHealth() - 25);
        jello1.setGroundHeight((int)screen1.getScreenDimensions().y (int)jello1.getSize().y);
    }

if(jello1.getHealth() == 75)
    {
        jello1.update1(jello1, lane1, screen1);
    }

Это мой заголовок для моего класса Jello:

#ifndef JELLO_H
#define JELLO_H

#include"ScreenDimensions.h"
#include"Lane.h"

class Jello
{
public:

    sf::RectangleShape ground;

    void update1(Jello jello, Lane lane, ScreenDimensions screen);

private:

    sf::Vector2f mPositionJello;
    sf::Vector2f mSizeJello;
    sf::Color mColorJello;
    int mGroundHeight;
    int mHealth;
};

#endif // JELLO_H

А это мой файл Jello.cpp:

#include"Jello.h"

void Jello::update1(Jello jello, Lane lane, ScreenDimensions screen)
{
    jello.ground.setSize(sf::Vector2f((float)screen.getScreenDimensions().x / 8, 15.0f));
    jello.ground.setPosition(sf::Vector2f((float)lane.getLanePositionX(), (float)screen.getScreenDimensions().y - 10.0f));
}

Кажется, я не могу понять, почему моя функция update1 не работает. Я написал свой код другим способом, который есть только в моем main.cpp, но в нем много повторяющегося кода, и я хочу, чтобы он выглядел чище.

Я попытался сократить свой код, чтобы сделать этот пост короче, но если он неясен, я могу опубликовать весь свой код, чтобы помочь.

Заранее благодарим всех, кто нашел время, чтобы прочитать это и попытаться помочь мне.

-1
Jack Reggin 4 Мар 2015 в 14:13

2 ответа

Лучший ответ

Ваш вопрос довольно расплывчатый, но на первый взгляд: вы пытаетесь внести изменения в свои переменные "jello, lane" и т. Д. Вы должны передать их по ссылке:

void update1(Jello &jello, Lane &lane, ScreenDimensions &screen);

(или с помощью указателя). дополнительная информация о передаче по ссылке

1
Chris Maes 4 Мар 2015 в 11:17

Вы передаете jello по значению, что означает, что вы создаете копию объекта и обновляете ее, а не обновляете переданный объект.

Чтобы исправить это, просто передайте его по ссылке:

void Jello::update1(Jello &jello, const Lane &lane, const ScreenDimensions &screen)
//                        ^ here

Вы должны передать два других объекта по константной ссылке, чтобы избежать ненужного копирования. Обратите внимание, что это будет работать, только если функции, которые вы вызываете для этих объектов, объявлены const, что, вероятно, и должно быть.

0
TartanLlama 4 Мар 2015 в 11:17