Войти
ПрограммированиеФорум2D графика и изометрия

Бегущая строка(РЕШЕНО) (2 стр)

Страницы: 1 2
#15
(Правка: 12:50) 12:50, 22 сен. 2021

samrrr
> В расте сложнее будет инфа 100%.
гугл говорит что не многим сложнее:

some_string.chars().skip(start_pos).collect();

#16
13:26, 22 сен. 2021

Aroch
> гугл говорит что не многим сложнее:
Вообще с копией строки можно проще сделать. Проблемы там начнутся при попытке вьюхнуть подстроку.

#17
14:26, 22 сен. 2021

А ещё бывает Unicode.
И задача "выкинуть первый символ" становится чуть менее тривиальной.

#18
16:14, 22 сен. 2021

я люблю экстраполировать. предлагаю экстраполировать. я всегда думал что задача бегущей строки решается не через ковыряние массива символов, а через движение буквеных спрайтов, но видмо тут задача именно редактирование строк. дак это.... а если тебе надо будет удалить символ в середине? или заменить его. надо решить сразу все задачи раз и навсегда. создаёшь 2 строки одну базовую другую для экрана. и из базовой копируешь любые символы в ту кторая для экрана. всё.

#19
(Правка: 18:53) 18:51, 22 сен. 2021

ИПавлов

Ну так я это и пытаюсь сделать, а как не пойму. Уже кучу вариантов перепробовал.
Конечно проще было бы двигать спрайт с нарисованным текстом, но вот такой движек недоделанный, не позволяет такое делать. Только печатать символы в HUD.

#20
19:21, 22 сен. 2021

tonline_kms65

Абстрагируйся от сложного.
Представь, что у тебя строка ABCDEFGH, но поле длиной только в 3 символа.
И вот ты будешь видеть последовательно следующие картинки:
ABC
BCD
CDE
DEF
EFG
FGH
Замечаешь систему? Каждый шаг последние два символа копируются на одну позицию левее, а там где был последний символ появляется новый.

#21
(Правка: 3:48) 3:42, 24 сен. 2021

Вот такой странный результат получается сейчас:

Size->46 g_endPos 46. cmsDV[CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. ccsDV[CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. cccDV[CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. ccccV[CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. ccccc[CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. ccccccCssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. cccccccssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. ccccccccsDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. cccccccccDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. ccccccccccm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. ccccccccccc] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. cccccccccccc Counter-Strike:Source Deatch Match
Size->46 g_endPos 46. cccccccccccccCounter-Strike:Source Deatch Match
Size->46 g_endPos 46. ccccccccccccccounter-Strike:Source Deatch Match
Size->46 g_endPos 46. cccccccccccccccunter-Strike:Source Deatch Match
Size->46 g_endPos 46. ccccccccccccccccnter-Strike:Source Deatch Match
Size->46 g_endPos 46. cccccccccccccccccter-Strike:Source Deatch Match
Size->46 g_endPos 46. ccccccccccccccccccer-Strike:Source Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccr-Strike:Source Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccc-Strike:Source Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccccStrike:Source Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccccctrike:Source Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccccccrike:Source Deatch Match
Size->46 g_endPos 46. ccccccccccccccccccccccccike:Source Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccke:Source Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccce:Source Deatch Match
Size->46 g_endPos 46. ccccccccccccccccccccccccccc:Source Deatch Match
Size->46 g_endPos 46. ccccccccccccccccccccccccccccSource Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccccccource Deatch Match
Size->46 g_endPos 46. ccccccccccccccccccccccccccccccurce Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccrce Deatch Match
Size->46 g_endPos 46. ccccccccccccccccccccccccccccccccce Deatch Match
Size->46 g_endPos 46. ccccccccccccccccccccccccccccccccce Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccc Deatch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccccDeatch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccccceatch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccccccatch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccccccctch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccccccccch Match
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccccccccch Match
Size->46 g_endPos 46. ccccccccccccccccccccccccccccccccccccccccc Match
Size->46 g_endPos 46. ccccccccccccccccccccccccccccccccccccccccccMatch
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccccccccccccatch
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccccccccccccctch
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccccccccccccccch
Size->46 g_endPos 46. cccccccccccccccccccccccccccccccccccccccccccccch
Получается, у меня сейчас заменяется первый символ, вроде бы и то что нужно, но для меня непонятно. Я не смогу сместить строку влево, потому-что есть символы"с", они не дадут этого сделать, получается мне нужно сделать так, что бы их вообще не было. Может быть попробовать как то заменить пустой строкой? А пустая строка для меня это вообще что-то из разряда громадной проблемы, что-то непонятное.
Что с кодом не так?
    
    char sMsg[512];
    int size = (strlen(g_scrollMsg)-1); // Длина основной строки
    sMsg = g_scrollMsg;
    int i = 0;

    for (int a = 0; a < size; a++){
        sMsg[i++] = g_scrollMsg[size-1];  
        PrintToConsoleAll("Size->%i g_endPos %i. %s", size, g_endPos, sMsg);
    }   

#22
(Правка: 4:18) 3:56, 24 сен. 2021
Size->46 g_endPos 46.  msDV[CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.   sDV[CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.    DV[CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.     V[CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.      [CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.       CssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.        ssDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.         sDm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.          Dm] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.           m] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.            ] Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.              Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.              Counter-Strike:Source Deatch Match
Size->46 g_endPos 46.               ounter-Strike:Source Deatch Match
Size->46 g_endPos 46.                unter-Strike:Source Deatch Match
Size->46 g_endPos 46.                 nter-Strike:Source Deatch Match
Size->46 g_endPos 46.                  ter-Strike:Source Deatch Match
Size->46 g_endPos 46.                   er-Strike:Source Deatch Match
Size->46 g_endPos 46.                    r-Strike:Source Deatch Match
Size->46 g_endPos 46.                     -Strike:Source Deatch Match
Size->46 g_endPos 46.                      Strike:Source Deatch Match
Size->46 g_endPos 46.                       trike:Source Deatch Match
Size->46 g_endPos 46.                        rike:Source Deatch Match
Size->46 g_endPos 46.                         ike:Source Deatch Match
Size->46 g_endPos 46.                          ke:Source Deatch Match
Size->46 g_endPos 46.                           e:Source Deatch Match
Size->46 g_endPos 46.                            :Source Deatch Match
Size->46 g_endPos 46.                             Source Deatch Match
Size->46 g_endPos 46.                              ource Deatch Match
Size->46 g_endPos 46.                               urce Deatch Match
Size->46 g_endPos 46.                                rce Deatch Match
Size->46 g_endPos 46.                                 ce Deatch Match
Size->46 g_endPos 46.                                  e Deatch Match
Size->46 g_endPos 46.                                    Deatch Match
Size->46 g_endPos 46.                                    Deatch Match
Size->46 g_endPos 46.                                     eatch Match
Size->46 g_endPos 46.                                      atch Match
Size->46 g_endPos 46.                                       tch Match
Size->46 g_endPos 46.                                        ch Match
Size->46 g_endPos 46.                                         h Match
Size->46 g_endPos 46.                                           Match
Size->46 g_endPos 46.                                           Match
Size->46 g_endPos 46.                                            atch
Size->46 g_endPos 46.                                             tch
Size->46 g_endPos 46.                                              ch
Size->46 g_endPos 46.                                               h

Во! Вроде разобрался.
Попробовал заменять таким символом пустой строки

sMsg[i++] = ' ';
, вроде то что нужно, но это символ пробела, я думаю это косяк.
Меня смущает, насколько это правильно и какие могут ждать в будущем проблемы?

#23
4:25, 24 сен. 2021

tonline_kms65
> Во! Вроде разобрался.
Ты вообще хоть что-то прочитал из того, что тебе писали?

#24
(Правка: 4:48) 4:44, 24 сен. 2021

samrrr

Прочитал конечно, толку-то.
Я тоже самое и пытаюсь сделать. Результат - как видишь.
Понятно что нужно с основной строки делать копию, со смещением знаков влево, в теории вроде всё просто, а в коде не соображу.
Я думаю мне нужен практический пример, потому что теорию я не пойму, вернее понять то пойму, только как её воплотить в код - это не пойму.

#25
7:35, 24 сен. 2021
for (int a = 0; a < size; a++)
  PrintToConsoleAll("%s", &sMsg[a]);
#26
7:53, 24 сен. 2021

tonline_kms65

Тебе явно надо алгоритмику подтянуть. Это очень простой вопрос на циклы и работу со строками - буквально просто уроки информатики второго года когда алгоритмы в принципе начинают проходить.
Намного продуктивнее будет взять книжку по информатике где изучаются уже алгоритмы всякие и поднатаскаться потратив на это пару недель вечерами, зато потом годами не будешь буксовать на каждой второй попытке что-то сделать. Будет огромная экономия времени и сил.

#27
8:16, 24 сен. 2021

tonline_kms65
> Прочитал конечно, толку-то.
Да нууу.tonline_kms65
> Понятно что нужно с основной строки делать копию
Ненужно, помещаешь строку в shared_ptr и создаёшь структуру

struct SubStr{
  shared_ptr<string> s;
  string_view substr;
};
Но если ты не можешь сразу сказать какие +- у этого решения, то млучше просто скопируй.

tonline_kms65
> Понятно что нужно с основной строки делать копию, со смещением знаков влево, в
> теории вроде всё просто, а в коде не соображу.
Если у тебя такие сильные проблемы с пониманием программирования, то может не надо вообще этим заниматься? Этож даже ниже школьного уровня.

#28
10:26, 24 сен. 2021
    sMsg = g_scrollMsg;
?
#29
(Правка: 11:08) 11:06, 24 сен. 2021

Aroch
> for (int a = 0; a < size; a++)
> PrintToConsoleAll("%s", &sMsg[a]);


Идеальный вариант! Просто нет слов, спасибо!

KmsDV[CssDm] Counter-Strike:Source Deatch Match
msDV[CssDm] Counter-Strike:Source Deatch Match
sDV[CssDm] Counter-Strike:Source Deatch Match
DV[CssDm] Counter-Strike:Source Deatch Match
V[CssDm] Counter-Strike:Source Deatch Match
[CssDm] Counter-Strike:Source Deatch Match
CssDm] Counter-Strike:Source Deatch Match
ssDm] Counter-Strike:Source Deatch Match
sDm] Counter-Strike:Source Deatch Match
Dm] Counter-Strike:Source Deatch Match
m] Counter-Strike:Source Deatch Match
] Counter-Strike:Source Deatch Match
 Counter-Strike:Source Deatch Match
Counter-Strike:Source Deatch Match
ounter-Strike:Source Deatch Match
unter-Strike:Source Deatch Match
nter-Strike:Source Deatch Match
ter-Strike:Source Deatch Match
er-Strike:Source Deatch Match
r-Strike:Source Deatch Match
-Strike:Source Deatch Match
Strike:Source Deatch Match
trike:Source Deatch Match
rike:Source Deatch Match
ike:Source Deatch Match
ke:Source Deatch Match
e:Source Deatch Match
:Source Deatch Match
Source Deatch Match
ource Deatch Match
urce Deatch Match
rce Deatch Match
ce Deatch Match
e Deatch Match
 Deatch Match
Deatch Match
eatch Match
atch Match
tch Match
ch Match
h Match
 Match
Match
atch
tch
ch
h
Сделал так(в таймере):
    static int a = 0;
    PrintToConsoleAll("%s", sMsg[a]);
    a++;

Очень плохо что нельзя здесь плюсы ставить. От меня тебе огромнейший плюс!

Страницы: 1 2
ПрограммированиеФорум2D графика и изометрия

Тема закрыта.