MusNik
KeeVee Games
GM Pro user
Репутация: 733
Offline
Пол:  Награды:  ![За постоянность! [200 дней на форуме] За постоянность! [200 дней на форуме]](http://forum.hellroom.ru/awards/78e87f17e3713947881315332c8ce619_hellroomforum_time_silver.gif) ![За лояльность! [+500 репутации] За лояльность! [+500 репутации]](http://forum.hellroom.ru/awards/90cb589b7473ca11705300194079bf64_hellroomforum_good_bronze.gif)   ...
API: GameMaker Studio 2
Сообщений: 3241
|
 |
« : Ноябрь 24, 2012, 23:27:17 » |
|
Когда-то давно меня посещала мысль собрать команду для перевода справки GMS, но сознав, что все ленивые ж вряд ли её соберу, стал потихоньку (очень) переводить её.
Одним из наиболее важных аспектов, я считаю ошибки. Те, которые делают все, и которые далеко не всем понятны. Ниже перевод разделов "Compile Errors" и "Runner Errors" из справки GameMaker: Studio с примечаниями.
Ошибки компиляции В этом разделе перечислены все возможные ошибки, которые могут появиться у компилятора.Во время создания игры, очень легко забыть объявить переменную, или неправильно использовать переменную, строкового типа, как вещественную и т.д. .. Эти ошибки будут найдены GameMaker: Studio и игра/компиляция остановится. Откроется окно с ошибкой, как и где она была обнаружена, так как показано на изображении ниже: Вы можете нажать любую из строк текста, который появится, и вы попадёте прямо на объект, в котором присутствует ошибка, а затем вы можете использовать информацию, содержащуюся в сообщении, чтобы точно определить, где именно в объекте произошла ошибка. Тем не менее, иногда эти ошибки могут показаться немного загадочным, так что ниже вы можете найти полный список всех ошибок и краткое объяснение того, что они означают. P.S. Также эти ошибки могут показываться в редакторе кода, или в меню "Check all scripts". >Unknown function or scriptВы ссылаетесь на функцию или скрипт, который не существует. Это может произойти, когда вы неправильно вводите функцию или удаляете скрипт из игры, который используется в объекте.  вы сделали ошибку в названии функции или скрипта (встроенного или самописного)  возможно вы использовали variable как функцию. Например: (ошибки) image_angle(30)//правильно image_angle=30 sprite_index(s_hero)//правильно sprite_index=s_hero >Unable to find scriptВы ссылаетесь на скрипт, который больше не находится в ресурсах/был удалён. >Execute script action is not bound to a scriptВы использовали "execute_script" действие на скрипт, который больше не существует. >Failed to parse action_execute_script() - incorrect number of arguments receivedВ "execute_script" действии было дано неверное число аргументов для скрипта. >Trying to set a read only variableВы пытались присвоить значение (строку или существенное) на переменную, которая помечается как доступная только для чтения. Например: phy_com_x = 12; Это вызвало бы ошибку, так как phy_com_x только для чтения. true=1 false=0 pi=3.141592653589793280... Константы цветов (c_white, c_blue, и т.д.) Константы события event_perform (event_type) (ev_create, ev_destroy, ev_step,...) Константы событий keyboard_check... (vk_enter, vk_up, vk_down,...) Константы событий mouse_check... (mb_left, mb_right, mb_middle) room_width room_height room_last room_first fps argument_count Переменные фонов (background_height, background_width,...) Переменные bbox_... Переменные clipboard_... Переменные current_... (current_time, current_date,...) Переменные event_... (event_action, event_number,...) debug_mode delta_time directory_exists display_reset ds_queue_head ds_queue_tail ds_stack_top game_id id image_number instance_count, instance_id, instance_number mouse_button mouse_x mouse_y object_index path_index Многие переменные phy_... sprite_height sprite_width sprite_xoffset sprite_yoffset view_current webgl_enabled
В гм есть особый вид данных: константы и read-only переменные. Они постоянны на всём протяжении существования. Read-only переменные - их нельзя задать кодом. Раз они не могут изменяться, то такая запись как room_height=500 и приведёт к этой ошибке. Будьте внимательны! >Constant is invalid hereВы поместили константу в код, которая не подходит к коду.
>Malformed ... statement>Malformed repeat statement >Malformed if statement >Malformed while statement >Malformed do statement >Malformed for statement >Malformed with statement >Malformed switch statement >Malformed break statement >Malformed continue statement >Malformed exit statement >Malformed return statement Структура вашего оператора неверна. Для получения более подробной информации, пожалуйста, см. в соответствующем разделе справки ("GML Overview") или статьи про операторы тут, тут, тут и тут >Keyword Until expectedВы создали "do... until" цикл, но пропустили окончание для "do" части. См. тут >If requires a then statementВы пропустили "then" часть после объявления "if". См. тут >Statement in a switch MUST appear after case or defaultВы добавили функцию в "switch" вне операторов "case" или "default". Например: switch(id) { if x == 12 game_end(); break; } >Break used without contextВы добавили "break" в код, где он не нужен, или уже есть. >Continue used without contextВы добавили "сontinue" в код, где он не нужен, или уже есть. >Calling a function that needs an instance and no instance is availableЭта ошибка будет показана, когда Вы используйте функцию "instance_*", при отсутствии существования экземпляра на момент выполнения кода. >Calling a function that needs an \"other\" and no \"other\" is availableВы получите эту ошибку при использовании префикса/ссылки "other", например, когда этот "other" экземпляр больше не существует. Например, в событии столкновения, где вы уже уничтожили его. >Argument naming error, {n} arguments but no reference found to {a}Вы поставили ряд аргументов в скрипте, из которых одно или несколько не возвращает никакое значение. >Wrong type of arguments for ...>Wrong type of arguments for * >Wrong type of arguments for / >Wrong type of arguments for div >Wrong type of arguments for Mod >Wrong type of arguments for + >Wrong type of arguments for - >Wrong type of arguments for && >Wrong type of arguments for || >Wrong type of arguments for & >Wrong type of arguments for | >Wrong type of arguments for ^ >Wrong type of arguments for << >Wrong type of arguments for >>
Вы поставили в выражение неправильный тип аргументов (вещественный или строковой). Например, если у вас есть что-то вроде этого: if "Hello" div 4 { // Что-то сделать; } Вы получите эту ошибку, поскольку вы не можете использовать "div" на строке. Для получения более подробной информации, пожалуйста, см. в соответствующем разделе справки или тут >Division by 0Невозможно делить на 0, поэтому вы получите эту ошибку, когда GameMaker: Studio попытаться сделать это. Это сообщение появится, когда вы пытаетесь разделить одно число на 0. Способ избежать этой ошибки - делать проверку, прежде чем делить: if a!=0 { my_variable=1/a } >Modulo by 0Вы получаете эту ошибку, когда деление по модулю попытается использовать 0 в качестве своего оператора. >Cannot compare argumentsЭта ошибка говорит вам, что одно или несколько выражений пытаются работать одновременно над строками и вещественными значениями, что не разрешается. Например: if "Hello" == 74 { // Что-то сделать; } Это вызвало бы ошибку, поскольку вы не можете сравнить два значения в выражении, так как они разных типов. Возникает в случае, если переменная одного типа сравнивается со значениями другого типа, либо при сложении разных типов данных. Решается переводом в другой тип данных: string(число)// переводит число в строку real(строка)// переводит строку в число >Symbol ... expected>Symbol } expected >Symbol { expected >Symbol ) expected >Symbol ( expected >Symbol : expected >Symbol , or ) expected >Symbol , or ] expected >Symbol ] expected
В Вашем коде отсутствует один из вышеперечисленных символов синтаксиса. Эта ошибка, как правило, "ловится" редактором кода и подчеркивается для Вас. >Assignment operator expectedЭта ошибка будет вызвана, когда вы пропустили один из операторов в выражении. Например: if var1 var2 == var3 { // Что-то сделать; } В приведенном выше коде отсутствует оператор между "var1" и "var2" и поэтому вызвалась ошибка, хотя обычно это будет поймано редактором кода, прежде чем скомпилировано. >Unexpected symbol in expressionСимвол (например, /, *, +, и т.д.) находится в неправильном месте в выражении. Это, как правило, будет поймано проверкой синтаксиса редактора кода >Only 1 or 2 dimensional arrays are supportedGameMaker: Studio позволяет создавать только одномерные и двумерные массивы, и если попытаетесь создать любые, которые превышают эти значения, то вы получите эту ошибку. Для получения дополнительной информации см. справку, или тут >Variable name expectedВы использовали выражение, которое ожидает переменную, для использования, которая не была написана. Например: if obj_Control. = "Hello" { //do something; }
Поскольку не существует переменной после выполнения оператора ".", Вы получите эту ошибку. В переводе означает: "ожидается имя переменной". Это значит, что что-то не так с именем переменной  имя переменной совпадает с именем любого ресурса  нет имени переменной, когда функция возвращает какой-либо индекс Исправить можно следующими способами 1) Поменять имя переменной, чтобы не совпадало с именем ресурса или поменять название ресурса. 2) Присвоить функции переменную переменная=имя_функции()
Ошибки раннера Здесь вы можете увидеть ошибки, которые могут появится у раннера виртуальной машиныДаже после проверки синтаксиса в редакторе кода, а затем проверки самим компилятором, могут быть ещё случаи, когда что-то может пойти не так. В большинстве случаев это вызовет VM (Virtual Machine) ошибки, которые выглядят так: VM ошибки, как правило, более серьезны, чем ошибки компиляции, поскольку это означает, что что-то серьезно не в порядке с вашим кодом, что ни редактор, ни компилятор не смогли обнаружить, и в принципе, Вы должны обращать внимание на все эти ошибки. Когда это происходит, вы можете использовать кнопку "Копировать" на всплывающем сообщении и скопировать ошибки в буфер обмена, которые затем можно вставить в текстовый файл (или еще куда) для дальнейшего использования. Возможными ошибками в VM раннере могут быть: Примечание: Все ошибки раннера будут пытаться указать на объект или скрипт, который привел к краху. Преобразования- DoConv :: Execution Error. Это означает ошибку в преобразовании одного типа данных в другой.
Прибавление- DoAdd :: Execution Error. Что-то пошло не так при использовании сложения (+) в выражении.
Умножение- DoMul :: Execution Error. Что-то пошло не так при использовании умножения (*) в выражении.
Вычитание- DoSub :: Execution Error. Что-то пошло не так при использовании вычитания (-) в выражении.
- DoSub :: Execution Engine - Cannot operate on string type. Вы пытаетесь отнять неправильный тип переменных (например ,вычесть строку из вещественного).
Деление- DoDiv :: Execution Error. Что-то пошло не так при использовании деления (/ или div) в выражении.
- DoDiv :: Execution Engine - Cannot operate on string type. Вы пытаетесь разделить неправильный тип переменных (например, разделить строку на вещественное).
- DoDiv :: Divide by zero. Вы пытаетесь делить на ноль.
Остаток- DoMod :: Execution Error. Что-то пошло не так при использовании деления по модулю (mod) в выражении.
- DoMod :: Execution Engine - Cannot operate on string type. Вы пытаетесь разделить по модулю неправильный тип переменных (например, разделить строку на вещественное).
Побитовое И (AND)- DoAnd :: Execution Error. Что-то пошло не так при использовании "&" в выражении.
- DoAnd :: Execution Engine - Cannot operate on string type. Вы пытаетесь использовать "&" с неправильным типом переменных (например, строку и вещественное).
Побитовое ИЛИ (OR)- DoOr :: Execution Error. Что-то пошло не так при использовании "|" в выражении.
- DoOr :: Execution Engine - Cannot operate on string type. Вы пытаетесь использовать "|" с неправильным типом переменных (например, строку и вещественное).
Побитовое исключающее ИЛИ (XOR)- DoXor :: Execution Error. Что-то пошло не так при использовании "^" в выражении.
- DoXor :: Execution Engine - Cannot operate on string type. Вы пытаетесь использовать "^" с неправильным типом переменных (например, строку и вещественное).
Битовый сдвиг влево- DoShl :: Execution Error. Что-то пошло не так при использовании сдвига влево "<<" для величины.
- DoShl :: Execution Engine - Cannot operate on string type. Вы пытаетесь использовать сдвиг влево с неправильным типом переменных (например, пытаясь "сдвинуть" строку).
Битовый сдвиг вправо- DoShr :: Execution Error. Что-то пошло не так при использовании сдвига влево ">>" для величины.
- DoShr :: Execution Engine - Cannot operate on string type. Вы пытаетесь использовать сдвиг вправо с неправильным типом переменных (например, пытаясь "сдвинуть" строку).
Отрицательные числа (-)- DoNeg :: Execution Error. Вы пытаетесь превратить переменную в отрицательную, когда её тип не позволяет проводить такие операции.
Отрицание (not)- DoNot :: Execution Error. Вы пытаетесь отрицать переменную, когда её тип не позволяет проводить такие операции.
Stack Push- Push :: Execution Error - Variable Index out of range (var). Значение переменной превысило максимальное разрешённое в раннере
- Push :: Execution Error - Variable Get (var). Данная переменная не определена или неизвестна.
Stack Pop- Pop :: Execution Error - Variable Index out of range (var). Значение переменной превысило максимальное разрешённое в раннере
- Pop :: Execution Error - Variable Get (var). Данная переменная не определена или неизвестна.
With- Cannot use global in with statement. Вы пытались использовать глобальные переменные (которые не относятся к какому-либо id экземпляра) с "with" оператором.
- Cannot use local in with statement. Вы пытались использовать локальные переменные, помеченные "var", (которые не относятся к какому-либо id экземпляра) с "with" оператором.
Основные- DoCall :: Execution Engine type error. Это неизвестная ошибка в виртуальной машине. Вам следует подать отчет о баге если она произойдет
- Stack Overflow... Переполнение стека происходит, когда слишком много памяти используется при вызове стека и когда игра пытается использовать больше пространства, чем доступно на стеке (то есть, когда он пытается получить доступ к памяти за пределами границ стека, что является по существу переполнением буфера). Стек переполнился, в результате сбоя программы. Перезагрузите компьютер и GameMaker: Studio, и если ошибка не устранится, пожалуйста, свяжитесь с поддержкой и / или сообщите об ошибке (как описано выше).
|