Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
romasimeiz
6 / 6 / 0
Регистрация: 11.04.2011
Сообщений: 260
#1

Почему функция работает именно так? - C++

12.12.2012, 22:07. Просмотров 374. Ответов 3
Метки нет (Все метки)

Доброго времени суток! Помогите разобраться с кодом пожалуйста
У меня есть фигурка которая крутится на экране.
Есть функция которая отвечает за постоянное и плавное вращение моей фигурки. Сам студент. С++ знаю плохо. С графикой , тем более анимированой никогда не работал. Поэтому не понимаю принцип.

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
float PeekTimeDelta()
{
    static int t = GetTickCount(); // почему именно статик? я убирал его, у меня вообще ничего не крутиться :(
 
    int dt = GetTickCount() - t; // это приращение времени дельта, 
    t = GetTickCount(); // зачем прописывать эту строчку опять? если её убрать то анимация будет до бесконечности ускоряться....
 
    return 0.001f * dt;
}
 
void UpdateSceneObjects( scene::s_figure* pRoot )
{
    float dt = PeekTimeDelta();
 
    fYaw += dt * 100.f;
    fPitch += dt * 10.f;
 
    while( pRoot )  // что значит пока pRoot.?Я так понимаю pRoot это указатель на созданный класс и while( pRoot )  означает что "пока указатель или класс существует". Правильно ли это?
    {
        if( pRoot->is_anim() )
            pRoot->rotate( s_vector3( fYaw, fPitch, 0.f ) );
 
        pRoot = pRoot->next();
 
    }// while( f )
 
 
fLightH += dt * 0.2f;
    if( fLightH > 1.f )
        fLightH -= (int) fLightH;
 
    scene::vLigPos.y = sinf( fLightH * 3.14f ) * 25.f - 7.5f;
 
 
 
}
}; //namespace animation
Не понимаю принципа. Знаю что функция делает покадровую анимацию, изменением координат, которые умножаются на эту дельту, но почему это работает так не понимаю

Буду очень благодарен за любую помощь! Спасибо! )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2012, 22:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему функция работает именно так? (C++):

Символьные литералы, указатели и функция. Не могу понять, почему именно так - C++
Доброго времени суток всем! :) Изучаю С++, всегда стараюсь добить до последнего код, чтобы не было непоняток. Но сейчас наткнулся на...

Обращение к массиву структур, почему именно так? - C++
Почему в не которых функциях к елементам структуры обращаются *invtry , а в других просто invtry? #include <stdafx.h> #include...

Указатели. Почему именно так инициализируются в даном случае? - C++
Не могу понять, почему при инициализации *p мы берем по ссылке, а при *p2 просто присваивание? #include <iostream> using namespace std;...

Почему в С++ это сделано именно так? Объяснение для НЕ программиста - C++
В этой теме хотелось бы задавать "тупые" вопросы по С++ и получить ответы и объяснения на нормальном человеческом языке, понятном НЕ...

Почему так работает, а так нет? - C++
так работает // Возведение b в степень s по модулю m float powmod(float b, long s) { float c=1; while (s) {

Почему-то игнорируется эта функция, другие работают. Что не так? - C++
void boat::atack() { srand(static_cast <unsigned int>(time(0))); std::cout << "Нажмите любую клавишу для начала боя!"; _getch();...

3
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
12.12.2012, 23:22 #2
1. Статик переменную там надо, потому что иначе она выйдет из области видимости функции
2. Второе присваивание надо, потому что статик переменная инициализируется только один раз тоесть при первом вызове функции PeekTimeDelta. Без этой строки (7 строка) переменная t инициализировалась бы один раз со значением
GetTickCount()
3. Пока pRoot не равно NULL
1
NeonLost
Пес войны
75 / 86 / 3
Регистрация: 23.02.2012
Сообщений: 653
13.12.2012, 00:46 #3
если не секрет, что это?..типо юнити что-то?..)
1
romasimeiz
6 / 6 / 0
Регистрация: 11.04.2011
Сообщений: 260
13.12.2012, 12:46  [ТС] #4
Это нас в универе учат работать с комп.графикой. Подключили DirectX в прогу и нарисовали при помощи вершин и граней фигурку 3D, которая крутиться и подсвечивается! ) Этот проект вся наша группа ctrl+c ctrl+v поэтому в коде трудновато разобраться )
Спасибо огромное! )
0
13.12.2012, 12:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 12:46
Привет! Вот еще темы с ответами:

почему это так работает - C++
по заданию надо создать два одинаковых массива с случайными числами от 0 до 99 for (i = 0; i < 1000; i++) { cout <<a<<" "; ...

Почему так странно работает калькулятор - C++
Здраствуйте, я сегодня решил взяться за C++, решил написать самое простое, калькулятор: #include <cstdlib> #include <iostream> ...

Не понимаю, что не так, почему не работает - C++
#include<cstdlib> #include <stdio.h> #include <conio.h> #include "iostream" using namespace std; void main() {int *a,i,N; ...

Почему-то на работает функция!( - C++
Задача написать функцию, упорядочивающую массив по возрастанию. почему-то не работает((( #include "stdio.h" int FUNC_Vozr (int...


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

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

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