Toribash Русский Форум

Объявление

4бб переехал на toribash.ru. Все разделы 4бб закрыты на добавление сообщений.

Если вы были зарегестрированы на 4бб, в ваших личных сообщениях лежит пароль от одноименного аккаунта на toribash.ru.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Toribash Русский Форум » Гайд-парк » Третий байт или то, как не надо писать программы.


Третий байт или то, как не надо писать программы.

Сообщений 1 страница 22 из 22

1

Расскажу-ка я небольшую историю, которая произошла с одним известным вам человеком.
Создал этот человек игру, назвал её Toribash. В ней были идеи, которых до этого не было в других играх, и эта игра стала популярна в некоторых кругах. Но не об этом разговор, а о третьем байте. В той игре было множество багов, но разработчик был настолько ленив, что не исправлял их годами. Игра и так приносит деньги, какой смысл париться? Был в игре и тот самый баг, о котором я хочу вам рассказать. Этот баг как раз связан с этим самым третьим байтом.
Как и в каждой мультиплеерной игре, в этой игре был чат. Но иногда случалось так, что поле чата само закрывалось, а при повторном открытии его там оказывался тот же текст, какой и был до закрытия, но была и одна проблема, которую не понять без знания некоторых основ.
Внутреннее представление текста, который находится в поле чата, использует кодировку UTF-8. В этой кодировке один символ имеет длину от одного до четырёх байт (в этом есть свои преимущества, например, остаётся полная совместимость с ASCII кодировкой, текст, использующий только символы из ASCII занимает ровно столько же байт, сколько и оригинальный текст в той кодировке). Не буду вникать в подробности о системе кодирования байт в UTF-8, не об этом разговор идёт.
Так вот, позиция курсора в том самом поле указывает на номер байта, который соответствует символу перед курсором. Всё вроде бы просто, если бы все символы были бы длиной в одинаковое количество байт. Но проблема в том, что так не всегда бывает. Как и было указано выше, при использовании только ASCII всё просто, мы смещаем эту позицию на один байт влево или вправо и мы получаем номер байта, который соответствует нужному символу. Если длина символа больше одного байта, то приходится подсчитывать, какова длина в байтах следующего или предыдущего символа и смещать указатель на нужное число байт. Требует дополнительной работы, но всё равно вполне реально осуществить. Тут и выходит на сцену наш третий байт.
При том самом беспричинном исчезновении поля и его обратного открытия указатель на символ, который следует перед курсором, сбрасывается в позицию 3. Вроде бы ничего, всё нормально, курсор просто становится перед третьим символом. Но вспомним, что этот указатель указывает на байты, а не символы, поэтому при использовании символов, находящихся все диапазона ASCII, этот указатель может указывать внутрь символа, а не на границу между символами, что не слишком хорошо. При дальнейшем наборе текста эти символы вставляются внутрь другого символа. Очевидно, что это приводит к каким-то неприятным последствиям, что и выходит на самом деле. Вместо вводимого текста появляются какие-то случайные символы, а в некоторых случаях игра вылетает. Это происходит из-за того, что Toribash при попытке отрисовки совсем уж непонятных символов вылетает, а такие символы как раз и возникают, когда проявляет себя этот баг. Единственным решением, которое вам поможет, если у вас произошла такая ситуация, когда курсор указывает внутрь символа, является или нажатие клавиш Home/End (нажатие этих клавиш переводит курсор в начало или конец строки, а в таких случаях курсор, естественно, не будет указывать внутрь символа, что нам как раз и необходимо), или просто отправка такого сообщения (это сбросит и текст в чате, и позицию курсора в начальные значения, что является самым простым решением).
Такие вот дела.

+14

2

Такие вот дела.

0

3

Доктор Стася написал(а):

или просто отправка такого сообщения

делаю так

0

4

Вот такие пироги!

-1

5

кээп

0

6

Доктор Стася
Спасибо!

0

7

меня не радует этот баг, очень не радует

0

8

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

0

9

всегда отправляю,если появляются эти долбаные символы D:<
теперь понимаю,почему

Свернутый текст

HAMPA SUX

0

10

хмммм, мне кажется этой теме не место в гайд-парке, где она скоро заблудится .

0

11

KoPCAP написал(а):

хмммм, мне кажется этой теме не место в гайд-парке, где она скоро заблудится .

Я не узнаю вас в гриме. Эта тема может быть где угодно, но только не в гайдпарке D:

0

12

В чате при передвижении курсора, он иногда заходит в середину слова. Для того что бы избежать этого, нажмите Home или End.

Вот и все что требовалось написать

+1

13

Korvin
В гайдпарке же нужно только то, что требуется писать, ещё бы.
Если бы кто-нибудь решил проблему вылета при переключении на русскую раскладку (без переустановки окон), я был бы несказанно счастлив.

Отредактировано Rigellion (20.11.2010 18:57:42)

0

14

Rigellion написал(а):

сли бы кто-нибудь решил проблему вылета при переключении на русскую раскладку

Удали торибаш, мне помогло

0

15

Я кстати ни разу не заметила за всё время игры в Toribash вылет из-за переключения раскладки, не знаю, почему это у вас происходит.

0

16

Нет, Стася, это либо есть, либо этого вообще нету.

0

17

Доктор Стася написал(а):

или просто отправка такого сообщения

Я СТОЛЬКО ЧИТАЛ ЧТО БЫ ЭТО УЗНАТЬ TT

0

18

клацаешь стрелочку вверх, переходит на предыдущее сообщение, а его уже можно спокойно стирать и писать что хотел...

0

19

2x esc тоже спасает. Я его по крайней мере клацаю

0

20

Стася действительно доктор. Всем и во всем поможет. Народ, берегите её.

0

21

Стася- это наш тори-Малахов +

+1

22

brooke-dice 2 Петросян х_х

0

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»



Вы здесь » Toribash Русский Форум » Гайд-парк » Третий байт или то, как не надо писать программы.