Снег(скорее град)

error
Начинающий
Статус
Оффлайн
Регистрация
28 Июн 2017
Сообщения
97
Реакции[?]
25
Поинты[?]
0
C++:
class Drop
{
    float x;
    float y;
    int radius;
    float yspeed;
    cRender* pRender;

public:
void AddRender(cRender* pRender)
{

    x = rand() % WIDTH;
    y = rand() % HEIGHT;
    radius = rand() % 6 + 3;
    yspeed = RandomFloat(0.1f, 0.5f);
    this->pRender = pRender;
}

void fall()
{
    y = y + yspeed;
    if (y > HEIGHT)
        y = 0;
}

void show()
{

    pRender->DrawCircle((int)x, (int)y, radius, radius * 2, RenderDrawType_Filled, color_t(255, 255, 255), 0);
}
};
Юзаем:
создаем массив
Код:
Drop* drops = new Drop[100];
инициализируем
Код:
for (int i = 0; i < 100; i++) {
        drops[i].AddRender(&pRender);
    }
рисуем в цикле
Код:
for (int i = 0; i < 100; i++) {
        drops[i].fall();
        drops[i].show();
    }

Скорость напрямую зависит от fps
pRender->SetFramerateUpdateRate(60U);
 
Участник
Статус
Оффлайн
Регистрация
15 Апр 2017
Сообщения
396
Реакции[?]
194
Поинты[?]
0
Скорость напрямую зависит от fps
pRender->SetFramerateUpdateRate(60U);
SetFramerateUpdateRate лишь изменяет частоту обновления счетчика кадров в секунду(который можно получить с помощью GetFramerate()), не влияя на фпс прямо.

Для того чтобы скорость не зависела от фпс,
Код:
y = y + yspeed;
yspeed нужно умножать на время прошедшее между кадрами, возможно добавлю получение сей величины.

Можно еще много к чему придраться. (динамическое выделение "drops", отсутствие перегруженного конструктора Drop, разбиение простых вещей на 2 функции которые используются друг за другом(и я не могу представить сценарий когда они используются порознь), приведение float к int хотя аргументы имеют тип short и.т.п.).
 
error
Начинающий
Статус
Оффлайн
Регистрация
28 Июн 2017
Сообщения
97
Реакции[?]
25
Поинты[?]
0
SetFramerateUpdateRate лишь изменяет частоту обновления счетчика кадров в секунду(который можно получить с помощью GetFramerate()), не влияя на фпс прямо.

Для того чтобы скорость не зависела от фпс,
Код:
y = y + yspeed;
yspeed нужно умножать на время прошедшее между кадрами, возможно добавлю получение сей величины.

Можно еще много к чему придраться. (динамическое выделение "drops", отсутствие перегруженного конструктора Drop, разбиение простых вещей на 2 функции которые используются друг за другом(и я не могу представить сценарий когда они используются порознь), приведение float к int хотя аргументы имеют тип short и.т.п.).
Бла...Бла...))))))

Вроде норм?


Код:
class Drop
{
    short x;
    short y;
    short radius;
    short yspeed;
    cRender* pRender;
    SYSTEMTIME st, ms;

public:
    Drop(){}
    Drop(cRender* pRender)
{
    GetLocalTime(&ms);
    ms.wMilliseconds = ms.wMilliseconds + ms.wSecond* 1000;
    x = rand() % WIDTH;
    y = rand() % HEIGHT;
    radius = rand() % 6 + 3;
    yspeed = rand() % 6 + 1;
    this->pRender = pRender;
}
    void show()
{
    GetLocalTime(&st);
    st.wMilliseconds = st.wMilliseconds + st.wSecond * 1000;
    if (ms.wMilliseconds + 16 < st.wMilliseconds)
    {
        y = y + yspeed;
        if (y > HEIGHT)
            y = 0;
        GetLocalTime(&ms);
        ms.wMilliseconds = ms.wMilliseconds + ms.wSecond * 1000;
    }
    pRender->DrawCircle(x, y, radius, radius * 2, RenderDrawType_Filled, color_t(255, 255, 255), 0);
}
};
создаем массив

Код:
Drop drops[100];
инициализируем

Код:
for (int i = 0; i < 100; i++) {
        drops[i] = Drop(pRender);
    }
рисуем в цикле

Код:
for (int i = 0; i < 100; i++) {
        drops[i].show();
    }

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Сверху Снизу