Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
#1

Взаимодействие объектов - C++

18.03.2014, 17:31. Просмотров 469. Ответов 2
Метки нет (Все метки)

При написании менеджера объектов для движка столкнулся с проблемой взаимодействия объектов между собой. Например есть классы Player и Enemy, которые наследуют BaseObject. Как объекту pl узнать о существовании всех объектов Enemy с возможностью записи в них? Пытался использовать shared_ptr но чувствую что не то.
О великие гуру, наставьте на путь истинный .
BaseObject
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/**
 * \file    src\BaseObject.h
 *
 * \brief   Declares the base object class.
 */
 
/**
 * \class   BaseObject
 *
 * \brief   A base object.
 *
 * \author  Koncord
 * \date    14.03.2014
 */
 
class BaseObject
{
public:
 
    /**
     * \fn  virtual void BaseObject::OnInit() = 0;
     *
     * \brief   Событие инициализации объекта
     *
     * \author  Koncord
     * \date    14.03.2014
     */
 
    virtual void OnInit() = 0;
 
    /**
     * \fn  virtual void BaseObject::OnEvent() = 0;
     *
     * \brief    Событие взаимодействия с периферией
     *
     * \author  Koncord
     * \date    14.03.2014
     */
 
    virtual void OnEvent() = 0;
 
    /**
     * \fn  virtual void BaseObject::OnStep() = 0;
     *
     * \brief   Событие перед отрисовкой.
     *
     * \author  Koncord
     * \date    14.03.2014
     */
 
    virtual void OnStep() = 0;
 
    /**
     * \fn  virtual void BaseObject::OnRender() = 0;
     *
     * \brief   Событие отрисовки.
     *
     * \author  Koncord
     * \date    14.03.2014
     */
 
    virtual void OnRender() = 0;
 
    /**
     * \fn  virtual void BaseObject::OnQuit() = 0;
     *
     * \brief   Событие завершения работы программы.
     *
     * \author  Koncord
     * \date    14.03.2014
     */
 
    virtual void OnQuit() = 0;
};

Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <boost\shared_ptr.hpp>
struct Rect
{
    int x,y,w,h;
}
class Player: public BaseObject
{
    public:
        void OnInit();
        void OnEvent();
        void OnStep() {}
        void OnRender() {}
        void OnQuit() {}
        Rect BBox;
        boost::shared_ptr<class Enemy> enemy;
};
 
class Enemy: public BaseObject
{
    public:
        void OnInit();
        void OnEvent(){};
        void OnStep() {}
        void OnRender() {}
        void OnQuit() {}
        Rect BBox;
};
 
void Player::OnInit()
{
    BBox.h = 32;
    BBox.w = 32;
    BBox.x = 0;
    BBox.y = 0;
}
void Enemy::OnInit()
{
    BBox.h = 32;
    BBox.w = 32;
    BBox.x = 32;
    BBox.y = 32;
}
void Player::OnEvent()
{
    fprintf(stdout, "%d", enemy->BBox.w); // как тут получить BBox всех Enemy??
}
 
 
int main(int argc, char *argv[])
{
    Player pl;
    pl.OnInit();
    pl.OnEvent();
    Enemy en;
    en.OnInit();
    Enemy en2;
    en2.OnInit();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2014, 17:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Взаимодействие объектов (C++):

Взаимодействие двух объектов - C++
Есть объект класса А. В нём есть массив объектов класса В. Программой предусмотрено поочерёдное обращение к элементам массива, с целью...

Взаимодействие объектов 1-го класса - C++
Помогите! Нужна программа следующей функции: есть объект Fighter там есть переменная хп и урон нужно что-бы я создавал 2 объекта и у...

Взаимодействие объектов разных классов - C++
Я или туплю или чего-то не понимаю\не до понимаю. Вопрос в самом коде. class Player { int health; int damage; public: ...

Взаимодействие двух контейнеров объектов - C++
Здравствуйте. Вопрос, наверное, уместнее задать на геймдеве, но всё же попробую здесь. Есть два контейнера объектов (монстры и пули),...

Создать классы "Computer", "Software", "User" и реализовать взаимодействие объектов этих типов между собой - C++
Помогите решить задачку,нужна в инст на экзамен. Составить программу реализующую: 1)классы,которые могут содержать...

В программе реализовать возможность записи объектов в файл и чтения объектов из файла - C++
Добрый день, помогите, пожалуйста! У меня есть программа: #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; class...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
18.03.2014, 17:34 #2
А почему Player должен знать обо всех Enemy? Скреее уже нужен какой-то новый класс, который будет знать и о тех, и о других, и управлять их взаимодействием.
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
18.03.2014, 17:44  [ТС] #3
0x10, далее объекты будут регистрироваться в менеджере объектов, последний вызывает уже OnEvent(). Предлагаете загрузить туда еще 1 класс? Как примерно будет выглядеть этот класс для Enemy *enemy= new Enemy[10] ?
Менеджер объектов
C++
1
2
3
4
5
6
7
8
9
10
class Manager
        {
            public:
                objectid AddObject(BaseObject*);
                void DelObject(objectid oid);
                void ExecuteAll();
        private:
                std::vector<BaseObject*> objects;
 
        };
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2014, 17:44
Привет! Вот еще темы с ответами:

Взаимодействие VB и VC++ - C++
Взаимодействие VB и VCPP. VB60 и VCPP50. Помогите решить проблемку. Есть VB проект и dll на плюсах. Всё бы хорошо и всё...

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

Взаимодействие классов - C++
Допустим, в первом классе у нас объявлена какая-либо переменная, например проинициализированная строка, объявленная в секции private. Как в...

Взаимодействие классов - C++
Решил потренироваться и написать &quot;игру&quot;. Есть класс игрок и класс бот. Как наладить их взаимодействие? З.Ы. да, я знаю, что в классах нет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru