Game Maker - создание игр | HellRoom Games
Май 15, 2025, 02:43:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Codepage Converter - Обеспечение совместимости старых расширений с GM 8.1  (Прочитано 30363 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Черный Думер
Пользователь
***

Репутация: 11
Offline Offline

Пол: Мужской
API: GameMaker 8.1 Standard
Деятельность: Организатор проектов, тестер, разработчик вспомогательного кода
Сообщений: 53


Треугольник будет выпит!


WWW
« : Январь 28, 2013, 13:02:04 »

При использовании Game Maker 8.1...
...Max WinAPI 2 отображает вместо символов национальных алфавитов непонятно что?
...39DLL или другая сетевая библиотека отсылает строки, написанные не латиницей, в буферах, размер которых как минимум вдвое превышает символьную длину самой строки?
...невозможно работать с возвращаемыми из функций расширений строками, написанными национальным алфавитом?

Да, всё это довольно-таки распространённые проблемы при использовании старых расширений и GM 8.1.
А корень зла таков. Как известно, с версии 8.1 Game Maker стал использовать для хранения строк и работы с ними кодировку UTF-8, тогда как прошлые версии GM, под которые и создавались несовместимые ныне с национальными алфавитами расширения, использовали стандартную однобайтовую системную кодировку (например, для России это ANSI-1251). В итоге при попытке создания, например, русского интерфейса в том же Max WinAPI 2 получается вот это:

В оригинале же этот интерфейс выглядит так:

Однако теперь это больше не проблема.
Считаете иначе? Что ж, тогда знакомьтесь:
-= CODEPAGE CONVERTER =-

Что именно делает это расширение?
Codepage Converter - это расширение, предоставляющее функции конверсии строк из стандартных однобайтовых системных кодировок в N-байтовую (чаще всего двух-) кодировку UTF-8. И обратно.
Его рекомендуется использовать при обмене строками с расширениями, написанными под приём и отправку строк в однобайтовых кодировках (такими являются подавляющее большинство расширений, написанных до появления GM 8.1). То есть, перед отправкой строки в такое расширение её необходимо сначала перекодировать в необходимую однобайтовую кодировку, а при получении строкового результата оттуда сконвертировать его в UTF-8, после чего уже использовать в GM.
Таким образом, достигается полная совместимость между GM 8.1 и старыми расширениями.

Как использовать это расширение?
Codepage Converter прост, как апельсин. Существует два способа его использования:
Код:
//ext_get_string() и ext_give_string() являются воображаемыми функциями, введёнными в пример для иллюстрации принципа работы
//первая возвращает однобайтовую строку, вторая ожидает однобайтовую строку

//переменная, в которую мы будем записывать результат, получаемый из наших воображаемых функций ;)
var result_str;


//ПЕРВЫЙ СПОСОБ: ГЛОБАЛЬНЫЙ

//установка кодировки ANSI-1251 для всех стандартных процессов конвертации
set_cpconv(1251);
//получение однобайтового строкового результата из функции и его конвертация из предустановленной однобайтовой кодировки в UTF-8
result_str = to_utf8(ext_get_string());
//конвертация строки из UTF-8 в предустановленную однобайтовую кодировку и последующая отправка в функцию
ext_give_string(from_utf8(result_str));


//ВТОРОЙ СПОСОБ: ИНДИВИДУАЛЬНЫЙ

//получение однобайтового строкового результата из функции и его конвертация из кодировки ANSI-1251 в UTF-8
result_str = to_utf8_alt(ext_get_string(), 1251);
//конвертация строки из UTF-8 в ANSI-1251 и последующая отправка в функцию
ext_give_string(from_utf8_alt(result_str, 1251));
Полное описание всех функций, а также предобъявленных констант, можно прочитать в файле ReadMe.txt, вложенном в архив с расширением.

Тем не менее, в принципе работы Codepage Converter'а есть некоторые особенности, которые рекомендуется учитывать:
1. Если в отправляемой или получаемой строке гарантированно содержатся только символы стандартной 7-битной кодировки ASCII (символы в диапазоне 0-127, к ним относятся цифры, базовые знаки препинания и арифметических операций, символы латинского алфавита, а также некоторые технические символы), то конвертация в/из UTF-8 не требуется, так как UTF-8 полностью совместим с 7-битной кодировкой ASCII. А поскольку она не требуется, то её лучше и не использовать. :)
2. При выборе устанавливаемой для конвертационных процессов кодировки тоже требуется осторожность. Если планируется конвертировать интерфейсную строку, то лучше устанавливать конкретную однобайтовую кодовую таблицу, которая соответствует языку интерфейса (например, для русского языка это будет кодировка ANSI-1251). Если же конвертированию подлежит строка, которая в теории может выглядеть по-разному на разных системах (например, путь к папке на одном компьютере может выглядеть как "C:\Games\ВашаИгра\", а на другом -  "C:\Games\????????\"), то тогда лучше использовать стандартную системную кодировку (для её использования в расширении обозначена константа CP_ACP).

Как работает это расширение?
Codepage Converter использует для конвертирования строк WinAPI-функции MultiByteToWideChar() и WideCharToMultiByte(). Это значит, что расширение совместимо только с Windows-версиями GM. Тем не менее, если кто-нибудь захочет переписать это расширение в целях расширения функциональности, увеличения производительности, уменьшения его размера, создания кроссплатформенной версии или ещё чего-нибудь, я буду только "за".

Благодарности
Благодарю Станислава "trew" Будинова с русского форума FreeBASIC за помощь в разъяснении принципов работы используемых в расширении функций WinAPI.

Скачать (~5 Кб; .7z)
Предыдущие версии в сумме были скачаны 24 раза. =)

Если у вас есть какие-нибудь вопросы, пожелания или замечания, то обязательно задавайте их здесь. Я буду только рад вам ответить.
Надеюсь, эта штука окажется полезной. Учитывая любовь русских GM-игроделов к созданию русских интерфейсов. Круто!
« Последнее редактирование: Май 11, 2013, 07:56:27 от Черный Думер » Записан

Codepage Converter - Обеспечение совместимости старых расширений с GM 8.1
Bit Wizard - Функции для работы с битами
XP Messages - Стандартные сообщения GM в WinXP-стиле

Чёрный Думер, Черный Думер
С монстрами сражается.
Черный Думер, Черный Думер
Рокетланчер плавится.
UniversalCreator
Активный участник
*****

Репутация: 29
Offline Offline

Пол: Мужской
Награды:
За постоянность! [10 дней на форуме]
API: Game Maker 8.0 Pro
Деятельность: Я занят!
Сообщений: 443



WWW
« Ответ #1 : Январь 28, 2013, 18:54:13 »

расширение полензное, по моему мнению.
Записан
Vendet
Гл. Администратор
*

Репутация: 772
Offline Offline

Пол: Мужской
API: Unity 3D
Сообщений: 3949


HellRoom Games


WWW
« Ответ #2 : Январь 28, 2013, 19:06:49 »

Да расширение должно быть полезным, особенно совместимость с ГМ8.1
Записан
Черный Думер
Пользователь
***

Репутация: 11
Offline Offline

Пол: Мужской
API: GameMaker 8.1 Standard
Деятельность: Организатор проектов, тестер, разработчик вспомогательного кода
Сообщений: 53


Треугольник будет выпит!


WWW
« Ответ #3 : Январь 29, 2013, 02:26:47 »

Ну если оно вам понравилось, тем более, если оно вам пригодится, то я только рад буду. Спасибо.
Можете использовать хоть где, даже не упоминая меня в списке авторов (однако если упомянете - мне будет приятно ).
Кстати говоря, на официальном форуме так и не отписался никто. Впрочем, оно-то и понятно - там все интерфейсы стараются делать на английском, благо подавляющее большинство его знает.

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

Также я очень хотел бы перевести справки к GM 7.0, 8.0 и 8.1 (т.к. самые распространённые версии), поскольку нынешние переводы где-то недопереведены, где-то с опечатками, а кое-где и вообще с пропусками. Но это уже потом, попозже.

Добавлено: Март 31, 2013, 16:29:57
Залил новую версию - была проведена некоторая оптимизация кода, вследствие которой удалось немного уменьшить размер расширения.

Добавлено: Май 11, 2013, 07:46:30
Снова обновил расширение - исправлен критический баг с освобождением памяти, приводящий в некоторых случаях к Access Violation'у.
« Последнее редактирование: Май 11, 2013, 07:46:30 от Черный Думер » Записан

Codepage Converter - Обеспечение совместимости старых расширений с GM 8.1
Bit Wizard - Функции для работы с битами
XP Messages - Стандартные сообщения GM в WinXP-стиле

Чёрный Думер, Черный Думер
С монстрами сражается.
Черный Думер, Черный Думер
Рокетланчер плавится.
zhookevil
GM Pro user
*

Репутация: 94
Offline Offline

Пол: Мужской
Награды:
2 место в Дичайшем джеме #8За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Деятельность: Приуныл.
Сообщений: 356


Фотографирую. Занимаюсь дизайном. Делаю игры.


WWW
« Ответ #4 : Июнь 21, 2013, 00:07:16 »

Подскажите, пожалуйста, как установить на ГМ8.1.
Закинул в папку extensions, нажимаю в гамаке на ресурсы/зеленый плюсик. А в списке его нет. Спасибо!
Записан

GrinRad
Участник
****

Репутация: 17
Offline Offline

Пол: Мужской
API: Game Maker 8.0 Pro
Деятельность: Эффекты GM
Сообщений: 163



« Ответ #5 : Июнь 21, 2013, 00:45:35 »

нажми на +, потом  на установить, потом ещё раз на установить и укажи путь где расположен файл *gex
Записан
zhookevil
GM Pro user
*

Репутация: 94
Offline Offline

Пол: Мужской
Награды:
2 место в Дичайшем джеме #8За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Деятельность: Приуныл.
Сообщений: 356


Фотографирую. Занимаюсь дизайном. Делаю игры.


WWW
« Ответ #6 : Июнь 21, 2013, 01:04:07 »

Спасибо!+
Установил. Только как пользоваться все равно не понял, хотя три раза прочитал. :(
Записан

MusNik
KeeVee Games
GM Pro user
*

Репутация: 733
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+500 репутации]За отличную игру Rock painting story!За помощь в развитии форума!За отличные статьи по Game Maker!...
API: GameMaker Studio 2
Сообщений: 3241



WWW
« Ответ #7 : Июнь 25, 2013, 18:40:31 »

Всё работает нормально, но после закрытия программы стало появляться две ошибки. Так и должно быть?


Возможно, как-то связано с тем, что на работе компьютер с Windows XP, как буду дома - протестирую на Windows 7.
Записан

Bovalex
GM Pro user
*

Репутация: 108
Offline Offline

Пол: Мужской
Награды:
500 сообщений!За постоянность! [50 дней на форуме]Настоящий игродел!За участие в Весеннем конкурсе.
API: Unity 3D
Деятельность: Человек - оркестр
Сообщений: 731



« Ответ #8 : Июнь 25, 2013, 18:46:42 »

Ааааа, зачем старую тему поднимаете?
Записан

Я ненавижу когда лама по имени Карл бьёт меня 37 раз и ест мои руки.
[img width= height= alt=Falcoware - Download Free Games]http://falcoware.com/DrawWayIco.gif[/img]
Черный Думер
Пользователь
***

Репутация: 11
Offline Offline

Пол: Мужской
API: GameMaker 8.1 Standard
Деятельность: Организатор проектов, тестер, разработчик вспомогательного кода
Сообщений: 53


Треугольник будет выпит!


WWW
« Ответ #9 : Июль 12, 2013, 21:47:01 »

Всё работает нормально, но после закрытия программы стало появляться две ошибки. Так и должно быть?
Всегда раздражало удивляло, когда люди про ошибки говорят "так и должно быть?".
Я когда тестировал на XP, ничего такого не обнаружил. Однако точно такая же ошибка появлялась у меня при использовании расширения GM Windows Dialogs. Вы его случаем не используете?

Ааааа, зачем старую тему поднимаете?
Почему старую? Она вполне себе ещё молодая и жизнелюбивая.

Добавлено: Октябрь 05, 2013, 08:23:01
Залил новую версию. Размер расширения был слегка уменьшен.
« Последнее редактирование: Октябрь 05, 2013, 08:23:01 от Черный Думер » Записан

Codepage Converter - Обеспечение совместимости старых расширений с GM 8.1
Bit Wizard - Функции для работы с битами
XP Messages - Стандартные сообщения GM в WinXP-стиле

Чёрный Думер, Черный Думер
С монстрами сражается.
Черный Думер, Черный Думер
Рокетланчер плавится.
gadmaker
Посетитель
**

Репутация: 4
Offline Offline

API: GameMaker 8.1 Standard
Сообщений: 36


« Ответ #10 : Октябрь 03, 2016, 19:32:10 »

Выложите пожалуйста Dll версию
Записан
Temp
Посетитель
**

Репутация: 0
Offline Offline

API: GameMaker 8.1 Standard
Сообщений: 16



« Ответ #11 : Декабрь 29, 2020, 17:29:29 »

Сори конечно за 7 летний разрыв с предыдущими комментариями, ссылка не пашет.

Добавлено: Декабрь 29, 2020, 18:13:18
Включаем VPN парни!
« Последнее редактирование: Декабрь 29, 2020, 18:13:18 от Temp » Записан
Fur
Абы-какой
GM Pro user
*

Репутация: 463
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]Третье место на HellRoom Jam #9 [Flucoldache]За лояльность! [+300 репутации]Настоящий игродел!Боже мой, посмотрите на эту медальку! Первое место на HellRoom Jam #6
API: Game Maker 8.0 Lite
Деятельность: Бурная.
Сообщений: 3673


Лисяток тебе.


« Ответ #12 : Декабрь 29, 2020, 23:15:03 »

Сори конечно за 7 летний разрыв с предыдущими комментариями, ссылка не пашет.

Добавлено: Декабрь 29, 2020, 18:13:18
Включаем VPN парни!
ааааааа

Всё. Лавочка закрылась. Устарел гм8, УС-ТА-РЕЛ
Записан

В одной отдельно взятой фразе не должно быть больше миллиона муравьёв, пусть даже она — научного труда о муравьях.

Hyperflex
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.581 секунд. Запросов: 36.