Воскресенье, 22 Декабря 2024, 08:14

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема с локализацией игры
GatixPlayДата: Среда, 21 Августа 2019, 18:52 | Сообщение # 1
был не раз
Сейчас нет на сайте
У меня возникла проблема с локализацией, я сделал меню на стрелках, ( Что-то типа Undertale ) ( https://ibb.co/9wvqP9F жёлтая цифра в правом верхнем углу это переменная Language), и при смене языка с английского на русский, язык просто не меняется...
Вот код:
Код

if option = 1
{
color1 = c_blue;
color2 = c_white;
color3 = c_white;
color4 = c_white;
}
if option = 2
{
color1 = c_white;
color2 = c_blue;
color3 = c_white;
color4 = c_white;
}
if option = 3
{
color1 = c_white;
color2 = c_white;
color3 = c_blue;
color4 = c_white;
}
if option = 4
{
color1 = c_white;
color2 = c_white;
color3 = c_white;
color4 = c_blue;
}
if(keyboard_check_pressed(vk_up) or keyboard_check_pressed(ord("W")))
{
    option--;
}
if(keyboard_check_pressed(vk_down) or keyboard_check_pressed(ord("S")))
{
    option++;
}
if(option > 4)
{option = 1;}
if(option < 1)
{option = 4;}

if keyboard_check_pressed(vk_enter)
{
    switch(option)
    {
        case 1:
        {
        room_goto(1);
        }
        case 3:
        {
        switch(language)
        {
            case 1: language = 2;
            case 2: language = 1;
        }
      }
    }
}

        if language = 2
        {
            SinglePlayer = "Одиночная игра";
            MultiPlayer = "Сетевая игра";
            Settings = "Язык";
            Exit = "Выход";
        }
        if language = 1
        {
            SinglePlayer = "SinglePlayer";
            MultiPlayer = "MultiPlayer";
            Settings = "Language";
            Exit = "Exit";
        }

Переменные:
Language = id языка
Option = id выбранной кнопки.
SinglePlayer, Multiplayer, Settings, Exit = Строки кнопок в меню. ( В Draw не получалось вставить if, пришлось так делать )
Вставил я всё это в Step.
GMS 1
martukДата: Четверг, 22 Августа 2019, 09:53 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Сложно понять без комментариев твой код. Но могу сказать сразу, ты забыл поставить break в case 1: language = 2; и case 2: language = 1;
Почему бы вместо switch здесь не использовать просто:
Код
if(language == 1){
    language = 2;
}else{
    anguage = 1;
}

Так же гораздо яснее
b_earДата: Четверг, 22 Августа 2019, 16:51 | Сообщение # 3
Покорители космоса
Сейчас нет на сайте
martuk, есть языки программирования которые не требуют break в конце case.
GatixPlay,
Тем не менее в данном коде это вполне может быть ошибкой, если язык допустим AS3. На чем программируете?
Также возможно конструкции вида
Код
if language = 2
должны быть заменены на
Код
if (language == 2)
, иначе вы просто присваиваете переменной новое значение "2" и проверяете его на неравенство нулю, что не соответствует логике алгоритма.

В целом это все "детские" ошибки.




Сообщение отредактировал b_ear - Четверг, 22 Августа 2019, 16:53
martukДата: Четверг, 22 Августа 2019, 17:10 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
b_ear,
Цитата b_ear ()
есть языки программирования которые не требуют break в конце case.

Мы же говорим про game maker, не?

Цитата b_ear ()
, иначе вы просто присваиваете переменной новое значение "2" и проверяете его на неравенство нулю, что не соответствует логике алгоритма.

Есть языки программирования, которые не требуют именно == в условиях. В коде автора это не ошибка.

Цитата b_ear ()
В целом это все "детские" ошибки.

В целом ваш ответ неверен и не относится к GML.


Сообщение отредактировал martuk - Четверг, 22 Августа 2019, 17:21
drcrackДата: Четверг, 22 Августа 2019, 20:55 | Сообщение # 5
старожил
Сейчас нет на сайте
Код

switch(language)
        {
            case 1: language = 2;
            case 2: language = 1;
        }

здравый смысл подсказывает что если language изначально равен 1, он сначала изменится на 2, потом сработает второе условие, и станет обратно 1
добавь break если GMS их поддерживает
также можешь просто заменить всю эту конструкцию на
Код

language = 1 + (2 - language);


Сообщение отредактировал drcrack - Четверг, 22 Августа 2019, 20:56
GatixPlayДата: Воскресенье, 25 Августа 2019, 10:06 | Сообщение # 6
был не раз
Сейчас нет на сайте
drcrack, Я всё уже исправил, по идеи после этого должны были добавиться ещё пару языков, но проблема не в этом заключалась. Я просто по другому сформулировал алгоритм, и всё отлично работает.

Добавлено (25 Августа 2019, 10:06)
---------------------------------------------
martuk, Уже исправил всё.

Добавлено (25 Августа 2019, 10:09)
---------------------------------------------
b_ear, Это не "детские" ошибки т.к. я знаю обо всём этом ( Паралельно GMS, изучаю C# ), но GML язык простой и он не требует писать именно "==", конечно код так выглядит намного красивее, но я уже из-за Pascal привык "=" писать ( Мы в прошлом году начали Pascal проходить. 9 Класс ).

JackNazaryanДата: Воскресенье, 25 Августа 2019, 10:25 | Сообщение # 7
старожил
Сейчас нет на сайте
Цитата GatixPlay ()
b_ear, Это не "детские" ошибки т.к. я знаю обо всём этом ( Паралельно GMS, изучаю C# ), но GML язык простой и он не требует писать именно "==", конечно код так выглядит намного красивее, но я уже из-за Pascal привык "=" писать ( Мы в прошлом году начали Pascal проходить. 9 Класс ).

Не хейт Pascal, но чисто совет из практики: паскалевские привычки желательно как можно быстрее искоренить, т.к. они больше нигде не работают. Извращения в духе := тем более. Куда универсальнее привычки, скажем, сишные.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг