ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Пульсация цвета C++ (https://forum.antichat.xyz/showthread.php?t=1324740)

rraggerr 25.09.2018 09:45

Добавляете в любое место в вашем коде

C++:





Код:

static
void
Pulsate
(
float
&
clr
,
float
min
,
float
max
,
float
pulsate_speed
)
{
static
bool
state
=
false
;
if
(
!
state
)
{
if
(
clr

min
)
clr
-=
pulsate_speed
;
else
{
clr
=
min
;
state
=
!
state
;
}
;
}
;
}
;



и используете так:

C++:





Код:

static
float
PlusateBlue
=
255.0f
;
/*Color:: - это если пихаете в класс Color как и я */
Pulsate
(
PlusateBlue
/* переменная */
,
100.f
/*минимальное*/
,
255.f
/*максимальное значение*/
,
1.f
/*скорость*/
)
;



Вот как это выглядит на примере ImGui (лок на фпс включен)

p.s это самый простой метод пульсации, можно сделать лучше через HSB

zeel228 25.09.2018 10:22

Что происходит в видео, кто объяснит?

rraggerr 25.09.2018 10:24

Цитата:

Сообщение от zeel228

Что происходит в видео, кто объяснит?

:facepalm2::facepalm2::facepalm2::facepalm2:

Пульсация цвета C++

честно хз что там может происходить...

#Rin 25.09.2018 11:02

Цитата:

Сообщение от rraggerr

Добавляете в любое место в вашем

Добавишь в конец файла, и использовать функцию выше нельзя будет, не объявив.

Oreshka23 25.09.2018 19:54

Цитата:

Сообщение от zeel228

Что происходит в видео, кто объяснит?

С третьего раза понял, что облачко становится то фиолетовым, то синим

rraggerr 25.09.2018 20:17

Цитата:

Сообщение от Oreshka23

С третьего раза понял, что облачко становится то фиолетовым, то синим

не фиолетовым а черным, я не указывал ни зеленый ни красный цвет, ток синий

iAmerican 28.09.2018 15:56

Более точно будет сказать переливание цвета, пульсация эт другое.

deropleat 02.10.2018 21:48

Цитата:

Сообщение от rraggerr

:facepalm2:

Я все понимаю что тебя это не волнует, но извини, это полнейший бред, а не код.

Тебе достаточно допустим:

C++:





Код:

bool
mState
=
false
;
mState
?
(
mColor
+=
fSpeed
)
:
(
mColor
-=
fSpeed
)
;
if
(
mColor
==
cMax
||
mColor
==
cMin
)
mState
=
!
mState
;


LUCHARE 18.10.2018 05:07

Цитата:

Сообщение от rraggerr

сейчас разве не 2018?

в том высказывании ошибка в другом месте

Losyash1337 30.12.2018 16:50

Цитата:

Сообщение от DucaRii

Я все понимаю что тебя это не волнует, но извини, это полнейший бред, а не код.
Тебе достаточно допустим:

C++:





Код:

bool
mState
=
false
;
mState
?
(
mColor
+=
fSpeed
)
:
(
mColor
-=
fSpeed
)
;
if
(
mColor
==
cMax
||
mColor
==
cMin
)
mState
=
!
mState
;



А потом жалуются люди, что у них не работает ничего :)

У float всегда погрешность будет в этом случае (и почти во всех остальных), если не можете осознать этот факт, то прошу уйти читать IEEE 754 (перевод). Кстати, реализация не самая длинная, как может показаться, вот, например, другая, более универсальная (и прожорливая):

C++:





Код:

#include
#include
#include
// ...
struct
ColorState
{
uint8_t
r
,
g
,
b
;
double
duration
;
ColorState
(
)
{
}
ColorState
(
uint8_t
r
,
uint8_t
g
,
uint8_t
b
,
double
duration
)
:
r
(
r
)
,
g
(
g
)
,
b
(
b
)
,
duration
(
duration
)
{
assert
(
duration
>
0.0
)
;
}
}
;
class
ColorController
{
public
:
ColorController
(
const
std
::
vector

&
data
)
:
m_data
(
data
)
,
m_state
(
0U
)
,
m_time
(
0.0
)
,
m_cycle
(
0.0
)
{
for
(
const
auto
&
x
:
m_data
)
m_cycle
+=
x
.
duration
;
}
void
update
(
double
delta
)
{
m_time
+=
delta
;
#define _CC_NEXT_STATE(x) (((x)+1U)%m_data.size())
while
(
m_time
>=
m_data
[
m_state
]
.
duration
)
{
m_time
-=
m_data
[
m_state
]
.
duration
;
m_state
=
_CC_NEXT_STATE
(
m_state
)
;
}
const
auto
&
cur
=
m_data
[
m_state
]
;
const
auto
&
nxt
=
m_data
[
_CC_NEXT_STATE
(
m_state
)
]
;
const
double
t1
=
m_time
,
t2
=
cur
.
duration
-
m_time
;
#undef _CC_NEXT_STATE
m_r
=
static_cast

(
(
t2
*
cur
.
r
+
t1
*
nxt
.
r
)
/
cur
.
duration
)
;
m_g
=
static_cast

(
(
t2
*
cur
.
g
+
t1
*
nxt
.
g
)
/
cur
.
duration
)
;
m_b
=
static_cast

(
(
t2
*
cur
.
b
+
t1
*
nxt
.
b
)
/
cur
.
duration
)
;
}
uint8_t
get_r
(
)
const
{
return
m_r
;
}
uint8_t
get_g
(
)
const
{
return
m_g
;
}
uint8_t
get_b
(
)
const
{
return
m_b
;
}
COLORREF
get_color
(
)
const
{
return
RGB
(
m_r
,
m_g
,
m_b
)
;
}
private
:
size_t m_state
;
double
m_time
,
m_cycle
;
uint8_t
m_r
,
m_g
,
m_b
;
std
::
vector

m_data
;
}
;



использование:

C++:





Код:

// инициализация в отдельной функции (чтобы не засорять код в месте использования)
ColorController
create_my_cc
(
)
{
std
::
vector

data
(
6
)
;
data
[
0
]
=
ColorState
(
255
,
0
,
0
,
0.5
)
;
data
[
1
]
=
ColorState
(
0
,
0
,
0
,
0.3
)
;
data
[
2
]
=
ColorState
(
0
,
255
,
0
,
0.5
)
;
data
[
3
]
=
ColorState
(
0
,
0
,
0
,
0.3
)
;
data
[
4
]
=
ColorState
(
0
,
0
,
255
,
0.5
)
;
data
[
5
]
=
ColorState
(
0
,
0
,
0
,
0.3
)
;
return
ColorController
(
data
)
;
}
// инициализация на месте (производится один раз!)
auto
my_cc
=
create_my_cc
(
)
;
// использование
my_cc
.
update
(
dt
)
;
COLORREF color
=
my_cc
.
get_color
(
)



Время: 20:58