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

Ссылки в классе. Отследить изменения переменной - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дан массив действительных чисел A размера n. Найти и поменять местами его минимальный и максимальный элементы http://www.cyberforum.ru/cpp-beginners/thread1152911.html
Статический массив
C++ Матрица NxM, посчитать количество строк в которых простые числа расположены по возрастанию Дана динамическая матрица NxM,посчитать количество строк в которых простые числа расположены по возрастанию. с обьявлением и вводом матрицы проблем нет,а вот функцию я мало представляю.помогите написать пжл. Добавлено через 10 часов 56 минут Нуу,люди помогите. http://www.cyberforum.ru/cpp-beginners/thread1152900.html
Написать программу, которая будет из набора изображений создавать видеоролик C++
Доброго утра всем! Встал такой вопрос: написать программу, которая будет из набора изображений создавать видеоролик (без звука и эффектов) с определенной частотой кадров. Подскажите, может есть какие то библиотеки для работы с видео или у кого то есть собственные наработки в этой области?
C++ Создать класс "Автосалон": в системе должны поддерживаться режимы учета марки, модели и предпочтения покупателя
Задача на объекты, С++, visual studio "Автосалон": в системе должны поддерживаться режимы учета марки, модели и предпочтения покупателя. Помогите создать программу, пожалуйста. Заранее огромное спасибо! :)
C++ Вывести площадь основания и объём аквариума в виде призмы http://www.cyberforum.ru/cpp-beginners/thread1152856.html
Аквариум имеет форму призмы, в основании которой лежит параллелограмм. Требуется вывести площадь основания и объём аквариума. необходимо определить и использовать две функции, одна из которых будет подсчитывать площадь основания аквариума, вторая — его объём. Одна из функций (по выбору) должна возвращать результат через параметр, передаваемый по ссылке. Входные данные Первая строка содержит...
C++ Распечатать список в виде списочных ячеек Написать на алгоритмическом языке С++ программу составления списка (a ( ( ( (b) ) ) ) (c ( (d) ) ) ) в виде 1 2 3 4 5 4 3 2 1 2 3 4 3 2 1 0 списочных ячеек, распечатать сформированный список, получить список ( b (d) ((a))), вывести результат. В обоих случаях показывать связи между элементами списка. При завершении работы удалить из памяти списки. ВОПРОС таков:... подробнее

Показать сообщение отдельно
rostov888
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 8
21.04.2014, 10:22     Ссылки в классе. Отследить изменения переменной
Пишу игру в проекте есть 4 класса class Entity, class PLAYER, class Animation и class AnimationManager.
Переменная cuurentFrame - это номер текущего кадра анимации .
Значение cuurentFrame изменяется в функции void tick() которая находиться в классе Animation.

Идея заключается в том , что бы отслеживать изменения этой переменной в функции void update которая находиться в классе PLAYER .

Для этого нужно создать ссылку на currentFrame и инициализировать эту ссылку в конструкторе класса PLAYER , после чего выводить на экран значения переменной с помощью ссылки в функции void upadte класса PLAYER.
class PLAYER: public Entity
{
public:
.....
float &CURRENTFrame;


PLAYER(AnimationManager &a,Animation &b, int x,int y):Entity(a,x,y)
{
...
&CURRENTFrame=b.currentFrame;
}
Но компилятор говорит о неправильности этой строчки
&CURRENTFrame=b.currentFrame;
Текст ошибки :
Код
1>main.cpp(75): error C2758: 'PLAYER::CURRENTFrame' : must be initialized in constructor base/member initializer list
1>\main.cpp(71) : see declaration of 'PLAYER::CURRENTFrame'
Как решить эту проблему ??????

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
class Animation
{
public:
std::vector<IntRect> frames, frames_flip;
 
float currentFrame, speed;  // вот то самый currentFrame
bool loop, flip, isPlaying; 
Sprite sprite;
 
 
Animation()
{
currentFrame = 0;
isPlaying=true;
flip=false;
}
// функция где проигрывается анимация 
void tick(float time,float &setRo, float &SpeedRot, bool fra,bool &currentBool)
{
 currentFrame += speed * time; // здесь изменяется значение cuurentFrame
                int i = currentFrame;
  sprite.setTextureRect( frames[i] );
  if (flip) sprite.setTextureRect( frames_flip[i] );
}
 
};
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
class Entity
{
public:
    float x,y,dx,dy,w,h;
    float w2,h2;
    AnimationManager anim;
 
 std::vector<Object> obj;
 bool life, dir;
 float timer, timer_end;
 String Name;
 int Health;
 
 Entity(AnimationManager &A,int X, int Y)
 { 
  anim = A;
  x = X;
  y = Y;
  dir = 0;
 
  life=true;
  timer=0;
  timer_end=0;
  dx=dy=0;
 }
 
 virtual void update(float time) = 0;
 
 void draw(RenderWindow &window)
 {.....}
 
 FloatRect getRect()
 {.... }
 
 void option(String NAME, float SPEED=0, int HEALTH=10, String FIRST_ANIM="")
 {... }
 
};
Вот класс PLAYER

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
class PLAYER: public Entity
{
public:
 enum {stay,goRight,goUp,upRight} STATE;
 bool onLadder, shoot, hit,fra,currentBool,animbool;
 std::map<std::string,bool> key;
 Animation anonTest;
 float setRot,SpeedRot;
 float &CURRENTFrame; // Ссылка на переменную currentFrame класса Animation
 
 
 PLAYER(AnimationManager &a,Animation &b, int x,int y):Entity(a,x,y)
 { 
 option("Player",450,450,"goRight");
        STATE=stay; hit=0;
 setRot=SpeedRot=0;
 fra=false;
 currentBool=false;
 animbool=true;
   
                                    &CURRENTFrame=b.currentFrame;
 }
 
 void KeyCheck()
 {
         // Функция которая принимает нажатие клавиш 
 }
 
 void update(float time)
 { 
  KeyCheck();
 
  if (STATE==stay)    anim.set("stay");
  if (STATE==goUp)    anim.set("goUp");
  if (STATE==goRight) anim.set("goRight");
 
    
  std::cout <<" CURRENTFrame "<< CURRENTFrame<<"\n";
 
  
                anim.tick(time,setRot,SpeedRot,fra,currentBool);
 
  key["R"]=key["L"]=key["Up"]=key["Down"]=key["Space"]=false;
 }
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru