Вещественные переменные (Variable types: floating point)



Мы поможем в написании ваших работ!


Мы поможем в написании ваших работ!



Мы поможем в написании ваших работ!


ЗНАЕТЕ ЛИ ВЫ?

Вещественные переменные (Variable types: floating point)



Информация из WIKI:
Вещественные переменные (float) - это формат чисел, в котором можно хранить и очень большие, и очень малые значения. Диапазон составляет от 1.18E-38 до 3.40E38.
Однако этот формат не всегда является лучшим выбором, потому что техническая реализация этого формата приводит к некоторым неточностям (например, все числа от 2 000 000 000 до 2 000 000 064 хранятся как 2 000 000 000). Почему это происходит?
В реальной жизни вещественные числа имеют основание 10. Компьютер использует основание 2, что делает все несколько сложнее, но, по сути, остается прежним, поэтому для объяснений мы будем использовать основание 10.
В школе нас учили как записывать большие числа, используя экспоненту, чтобы экономить место и улучшить читаемость: "1 000 000 000" - то же самое, что и " 109 ", а "1 234 000 000" – это " 1,234 * 109 " или " 1,234E9 ". Также и с малыми числами: " 0,000001234 " - это "1,234E-6"
Когда длина первого числа (мантиссы) ограничена, очень большие и очень малые числа обрезаются. Обливион использует около 7 знаков для мантиссы:
1.0000000E9 = 1 000 000 000
1.0000001E9 = 1 000 000 100
Таким образом, нельзя отображать числа между 1 000 000 000 и 1 000 000 100 потому, что они требуют 9 знаков, а сохраняется только первые семь.
Прим. Garin:

На самом деле приведенные примеры не совсем точны. Смотреть надо двоичный код в районе 7-ми десятичных разрядов - это число должно быть кратно двоичному коду. Нужно дополнительно поэкспериментировать, чтобы определить точно это число. Ориентировочно это 24 двоичных разряда.
Например, числу 10 000 000 соответствует двоичный 24-хразрядный код 1001 1000 1000 1011 0100 0000.
Двоичный 24-хразрядный код 1000 0000 0000 0000 0000 0000 соответствует десятичному 8388608 или 8.388608Е6. Максимальное число для 24 разрядов – это 16 777 215. Вот тут и надо ловить. Все, что больше, в младших разрядах мантиссы обрезается.
То же самое было в TES3. Там длинные 32-разрядные двоичные числа в глобальных переменных "обрезались" до 24-х разрядов, а вот в локальных почему-то работали.
Вещественное число занимает 4 байта или 32 двоичных разряда. Из них 3 байта отведены на мантиссу, а 1 байт - на степень. 3 байта мантиссы - это 24 двоичных разряда. 1 байт на степень - это 255, но в игре - только (- 38...+38). Не стоит забывать также, что старший разряд отдан для знака.

 

Переменные для хранения копий (Reference variable)

Как и другие переменные, переменные для хранения копий (ref) должны быть объявлены до их использования:

 

ref refVarName


Их можно использовать во всех функциях, которые работают с копиями объекта. Неинициализированные ref-переменные указывают на сам объект, в скрипте которого они были объявлены; в остальных случаях они ссылаются на указанный объект.
Ref-переменная, объект которой не находится в памяти (например, статический объект, когда игрок вышел из ячейки, где он находится) считается неинициализированной.
Вы можете присвоить значение ref-переменной, используя команду set. Обычно для этого вы будете использовать функцию, возвращающую formID. Например:

 

set myRef to GetContainer


Можно задавать значения переменных, объявленных на другом объекте:

 

set BobRef.myRef to GetSelf

 

Проверка того, что переменная не инициализирована:

 

if myReferenceVariable == 0


Чтобы проверить, инициализирована ли переменная:

 

if myReferenceVariable != 0

 

Чтобы проверить, указывает ли переменная на другую копию (например, на игрока):

 

if myReferenceVariable == player


или другую копию:

 

if myReferenceVariable != player

 

Пример:

 

scn TheMastersSword ; кто оденет, тот получит +50 к навыку "Мечи" ref UserRef begin OnEquip set UserRef to GetContainer UserRef.Modactorvalue blade 50 end begin OnUnEquip set UserRef to GetContainer UserRef.Modactorvalue blade -50 end

 

Помните, что ссылки на непостоянные предметы недоступны, когда объект не находится в памяти (например, в другой ячейке). То же самое относится к предметам, находящимся в контейнере. Попытка доступа к недоступным переменным может не иметь никакого эффекта, а может привести и к вылету из игры. В TES 4 CS есть механизмы, не позволяющие прямо запрашивать доступ к подобным объектам, но вы можете обойти их с помощью ref-переменных.

Делайте это на свой страх и риск...


 

Ваш второй скрипт

Источник: http://cs.elderscrolls.com/constwiki/index.php/Scripting_Tutorial:_My_Second_Script
Автор: Grundulum Перевод: Eugene

 

Мы включили это руководство из WIKI полностью. Оно содержит уже известные вам основы скриптинга, но мы сочли, что это даже хорошо, поскольку, как известно, «повторение - мать учения».

 

Содержание

 

5.1. Содержание 5.2. Введение 5.3. Информация о написании скриптов в Oblivion • Что такое скрипт? • Что могут скрипты? • Чего не могут скрипты 5.4. Учебник скриптов: до написания кода • Начинаем! • Окно редактирования скриптов • Что мы хотим? • Написание скрипта 5.5. Учебник скриптов: первые строки • Называем скрипт • Функции "Begin" и "End" • Выдача текстового сообщения и получение ответа от игрока • Как выполняются объектные скрипты 5.6. Учебник скриптов: первый тест • Сохранение и подготовка модификации • Выполнение скрипта в игре 5.7. Учебник скриптов: выбор игрока, ошибки и исправления • Выбор игроком варианта ответа • Первые ошибки и исправления 5.8. Учебник скриптов: добавляем ловушку 5.9. Как узнать больше 5.10. Последние строки

 

 

Введение

 

Учебник WIKI "Мой первый скрипт" хорош для первого ознакомления со скриптами, но он не раскрывает в полном объеме всех возможностей скриптового языка Oblivion. Это прекрасное введение для тех, кто никогда раньше не имел дела с программированием или скриптами, но модмейкерам будет полезен и более углубленный учебник для дальнейшего изучения этого замечательного ресурса.

Данный учебник в основном был адаптирован из "Руководства GhanBuriGhan’a по скриптам Morrowind для чайников" (GhanBuriGhan's excellent Morrowind Scripting for Dummies); так что авторские права принадлежат GhanBuriGhan за проделанную им фантастическую работу над оригиналом.

Этот учебник должен послужить более полным введением в скрипты для Oblivion, чем "Мой первый скрипт", и рассчитан на то, что читатель уже знаком с этим руководством. Если вы не поняли его основные принципы, то данный учебник может оказаться для вас слишком сложным. Но если с "Моим первым скриптом" у вас все в порядке, тогда начинаем!

Информация о написании скриптов в Oblivion

 

Что такое скрипт?

 

Скрипты – это базовые кусочки кода, написанные на специальном скриптовом языке (далее - скрипты TES). Эти маленькие "программы" будут работать во время игры и могут выполнять определенные вещи, действительно много вещей: события на триггерах, контроль времени и места, исчезновение предметов и существ, появление или движение, выдача сообщений игроку, изменение параметров и даже изменение погоды – возможности просто невероятны.

Скриптовый язык TES уникален, но он не может быть использован вне TES Construction Set. Как скриптовый язык он имеет некоторые ограничения, в отличие от "настоящих" языков программирования, например C++:

  • Область применения скриптов TES ограничена; не надо ждать, что можно запрограммировать что-то, так или иначе не включенное в игру. Это совсем не означает, что вы не сможете достичь новых и необычных результатов! Но вы не сможете использовать скрипты TES, например, для программирования текстового процессора.
  • Скрипты TES не похожи на SDK (комплект разработки программного обеспечения – сокр. с англ. software development kit), который действительно позволяет работать и изменять исходные коды игры. Вот почему вы не сможете использовать скрипты TES, например, для добавления новых погодных эффектов. Они прописаны в другом месте и нужно обладать дополнительными знаниями, чтобы сделать это.
  • Данный язык интерпретируемый, а не компилируемый – коду для работы нужна отдельная программа (в данном случае Oblivion.exe), в отличие от компилированного кода, который может работать сам по себе, как .exe-приложение.

TES скрипты не зависят от регистра. Это означает, что команда "player.getpos z" будет работать точно так же как и "Player.GetPos z" или "PlAyEr.GeTpOs Z", или любой другой возможный вариант. Многие (как и автор) используют второй вариант, т.к. он наиболее понятен; множество других людей используют первый вариант, т.к. проще писать, используя один регистр. Единственно регистр имеет значение, когда вы хотите напечатать сообщение, выводимое на экран: но даже там все зависит от языка и от цели сообщения, регистр может быть любой.

 

Что могут скрипты?

 

Скрипты в Oblivion – способ, с помощью которого игра динамически реагирует на то, что делает игрок в игровом мире. Вы можете использовать скрипты для создания комплексных квестов. Вы можете использовать скрипты для создания особых предметов, которые будут выполнять действия, невозможные для обычного зачарования. Вы можете использовать скрипты для создания ловушек. Вы можете использовать скрипты для изменения поведения NPC или существ. Помните создание персонажа в Oblivion? Оно контролируется множеством скриптов. Выполнение квестов? Они также управляются скриптами. Так что если коротко ответить на этот вопрос: много.

 

Чего не могут скрипты

 

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

 



Последнее изменение этой страницы: 2016-07-11; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.214.224.207 (0.01 с.)