![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]() ![]()
Сообщение
#1
|
|
![]() Immortal Сообщений: 1 995 Спасибо сказали: 6 раз ![]() |
Вот такая идея:
если ввести тригер на изменение значения определенной (заданной) переменной, то можно было бы формировать то, что в объектно-ориентированном програмировании называется свойством. Тригер запускался бы сразу при попытке изменить значение, и в него как параметр передавалось бы новое значение. Фактически изменить значение переменной можно было бы только внутри такого тригера. Это помогло бы во многих случаях, например- есть глобальная переменная, значение которой должно быть идентичным у всех игроках в мультиплеере. Сейчас приходится все время, как только такая переменная изменяется, вызывать команды по передачи данных, что естественно путает структуру скрипта, делает его трудным в отладке. Если же изменив переменную автоматически мы тем самым запустили бы функцию обработчик (тригер), с условием возврата управления обратно, то все необходимое можно было бы описать только в ней, и не перегружать содержание скрипта. Естественно есть еще десятки случаев, когда такая схема была бы очень полезной (контроль значений переменной, отрисовка чего-либо и т.д.) -------------------- Усячески Ваш :)
|
|
|
![]() |
Гость_Berserker_* |
![]() ![]()
Сообщение
#2
|
![]() |
Массивы. Подобие сделать можно и через ЕРМ. Только медленное. Я, например, считаю, что от ЕРМ вообще уходить надо. От Славы можно оставить найденные адреса функций и переменных, а также его личные функции. Но конструкцию ЕРМ - даже интерпритатором не назовёшь. Очень узко. Реквизит добивается увеличения возможностей путём добавления команд. Неплохо! Ещё бы 3333 команд и подобие языка программирования. Нужен диалект более низкого уровня и богатыми возможностями. Но я отвлекаюсь:
Допустим у вас переменные v1005-v1019 - под массив. (3х5 - двумерный), учитывая, что массив имеет в основных индексах 1. У меня есть функции для упаковки переменных. Так вот, создавая массив его начальный индекс упаковывается в первые два байта v-переменной, величина по х в 3-ей, по у в 4-ой. Массив на нулевой основе. Тогда можно сделать 2 функции для изъятия элемента из массива и установки. Приведу функции упаковки и самого управления массивом. Неудобно несколько, но тем не менее. Можно "создать" массив, сохранив инфу о нём в всего 1 переменную. А затем использовать. Пусть и не прямым путём. !?FU3;Pack four bytes into one v-var ;*x1*-*x4* - four bytes ;*x5* - index of v-var to store the result !!VRx2:*256; !!VRx3:*65536; !!if&x4<=127:; !!VRx4:*16777216; !!VRvx5:Sx1+x2+x3+x4; !!VRy1:Svx5; !!FU:E; !!en:; !!VRvx5:Sx1+x2+x3; !!VRvx5:*-1; !!VRx4:*-1; !!VRx6:S128+x4*16777216; !!VRvx5:+x6; !?FU4;UnPack var into four bytes ;*x1* - variable ;*x2* - index of first v-var to store the result !!IF:V2/0; !!if&x1<0:; !!IF:V2/1; !!VRx1:*-1; !!en:; !!VRvx2:Sx1%256; !!VRx2:+1; !!VRx1::256; !!VRvx2:Sx1%256; !!VRx2:+1; !!VRx1::256; !!VRvx2:Sx1%256; !!VRx2:+1; !!VRx1::256; !!VRvx2:Sx1%256; !!VRy1:Svx2; !!VRvx2&2:+128; !?FU5;Pack two words (two-byte vars) into one v-var ;*x1* - first var ;*x2* - second var ;*x3* - index of v-var to store the result !!if&x2<=32767:; !!VRx2:Sx2*65536; !!VRvx3:Sx1+x2; !!FU:E; !!en:; !!VRvx3:Sx1*-1; !!VRx2:*-1; !!VRx4:S32768+x2*65536; !!VRvx3:+x4; !!VRy1:Svx3; !?FU6;UnPack variable into two words ;*x1* - variable ;*x2* - index of first v-var to store the result !!if&x1>=0:; !!VRvx2:Sx1%65536; !!VRx2:+1; !!VRvx2:Sx1:65536; !!FU:E; !!en:; !!VRx1:*-1; !!VRvx2:Sx1%65536; !!VRx2:+1; !!VRvx2:Sx1:65536+32768; !?FU7;Create 2D array ;*x1* - inex of v-var to store handle ;*x2* - index of start var in the array ;*x3* - maxX (max is 255) ;*x4* - maxY (max is 255) !!FU3:P0/0/x3/x4/1; !!VRv1:+x2; !!VRvx1:Sv1; !?FU8;Set item of 2D array ;*x1* - handle of array ;*x2* - x ;*x3* - y ;*x4* - new value !!VRy1:Sx1%65536; !!FU4:Px1/1; ;y1 - start index v3,v4 - x and y !!VRy2:Sx3*v3+x2+y1; !!VRvy2:Sx4; !?FU9;Get item from 2D array ;*x1* - handle of array ;*x2* - x ;*x3* - y ;*x4* - index of v-var to store the result !!VRy1:Sx1%65536; !!FU4:Px1/1; ;y1 - start index v3,v4 - x and y !!VRy2:Sx3*v3+x2+y1; !!VRvx4:Svy2; Вот пожалуй и всё. Разумеется метод не очень удобный, но таков уж ЕРМ. И всё же работать с массивами легче. |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 24 August 2025 - 18:43 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|