Меню Сайта
Все для ucoz
Категории раздела
Категории раздела
Block title
Профиль
Среда
29.01.2025
02:37

[ Управление профилем ]
Главная » Статьи » Amx Mod X Скриптинг

Программирование для начинающих
Авторы: joaquimandrade, Exolent[jNr]
Перевод и редактирование: DJ_WEST

Часть 1. Числа, множества чисел.
Для сохранения чисел нам необходимо место, называемое "переменной". Ее создание происходит следующим путем:
Код: Выделить всё
new numberHolder

new - означает, что мы создали переменную.
numberHolder - это название (метка) переменной, необходимое для дальнейщего к ней обращения.
Это называется "объявление переменной".

Чтобы сохранить число в нашей переменной, мы делаем:
Код: Выделить всё
numberHolder = 5

Где 5 - это наше число, к примеру.

Для сохранения множества чисел нам необходимо место, называемое "массивом". Его создание происходит следующим путем:
Код: Выделить всё
new numberGroupHolder[x] 

Где x количество чисел, которые мы сможем хранить в массиве (его размер).
Этот массив будет иметь x позиций. Одно для каждого числа. Чтобы обратиться к позиции, мы делаем:
Код: Выделить всё
numberGroupHolder[0]  

Где 0 - это наша позиция, к примеру. Последняя позиция будет x-1. Следовательно, для хранения цвета нам необходимо сделать:
Код: Выделить всё

new color
[3]

color[0] = 0
color
[1] = 100
color
[2] = 255

Или:
Код: Выделить всё

new color
[3]

color = { 0, 100, 255 }  

Или:
Код: Выделить всё

new color
[3] = { 0, 100, 255 }  

Все эти способы имеют одинаковый эффект и означают одно и тоже. Наиболее предпочтительными способами являются второй и третий, третий удобно использовать при объявлении "глобальной" переменной. Глобальная переменная - это переменная, которая создается один раз и хранится в памяти на протяжении всего периода действия плагина, и к которой можно обращаться из любой функции.
Pawn позволяет делать арифметические операции, поэтому мы можем сделать нашу переменную с данными о цвете немного темнее:
Код: Выделить всё

color
[0] = color[0] - 10
color
[1] = color[1] - 10
color
[2] = color[2] - 10


Если нам нужно изменить цвет не только у одной переменной, то не обязательно выполнять арифметические действия для каждой из них. Для этого мы создадим "функцию":
Код: Выделить всё

darkenColor
(anyColor[3])
{
    anyColor[0] = anyColor[0] - 10
    anyColor
[1] = anyColor[1] - 10
    anyColor
[2] = anyColor[2] - 10
} 
 

Это называется "объявлении функции darkenColor".
darkenColor - это название функции (метка), которое мы будем потом использовать при обращении к ней.
anyColor - это название переменной, которое мы передаем функции для дальнейщего ее использования.

Между скобками функции находится ее аргумент (anyColor[3]). Между { } находится тело функции, набор действий, которые необходимо выполнить.
К примеру, для изменения цвета нескольких переменных, мы делаем:
Код: Выделить всё

new someColor
[3] = {100,100,100}
new otherColor[3] = {50,100,150}
new anotherColor[3] = {255,30,233}

darkenColor(someColor)
darkenColor(otherColor)
darkenColor(anotherColor) 
 

Это называется "вызов функции darkenColor". Перед тем, как ее вызывать, функция должна быть объявлена. В результате выполнения данного кода, мы получим следующие результаты:
someColor будет хранить значения 90,90,90.
otherColor будет хранить значения 40,90,140.
anotherColor будет хранить значения 245,20,223.

Но у нашей функции есть проблема. Если одно из значений переменной, которое мы передаем нашей, будем меньше 10, то мы получим отрицательный результат, что неверно, потому что значение цвета должно быть в пределах от 0 до 255.
Поэтому нам требуется создать "условие":
Код: Выделить всё

darkenColor
(anyColor[3])
{
    anyColor[0] = anyColor[0] - 10
    anyColor
[1] = anyColor[1] - 10
    anyColor
[2] = anyColor[2] - 10
    
    if
(anyColor[0] < 0)
    {
        anyColor[0] = 0
    
}
    
    if
(anyColor[1] < 0)
    {
        anyColor[1] = 0
    
}
        
    if
(anyColor[2] < 0)
    {
        anyColor[2] = 0    
    
}
}
  

Между скобками после выражения if мы имеем условие (anyColor[0] < 0).
Между { } мы имеем тело условия, которое будет выполняться в том случае, если условие верно. То есть anyColor[0] = 0, когда anyColor[0] < 0.

Наша функция немного не практична. Мы не можем сказать ей (функции) насколько хотим изменить яркость цвета. Поэтому переделаем ее так:
Код: Выделить всё

changeColorLuminosity
(anyColor[3], factor)
{
    anyColor[0] = anyColor[0] + factor
    anyColor
[1] = anyColor[1] + factor
    anyColor
[2] = anyColor[2] + factor
    
    if
(anyColor[0] < 0)
    {
        anyColor[0] = 0
    
}
    
    if
(anyColor[1] < 0)
    {
        anyColor[1] = 0
    
}
        
    if
(anyColor[2] < 0)
    {
        anyColor[2] = 0    
    
}
}
  

Теперь передавая функции changeColorLuminosity еще один аргумент, который называется factor, мы можем более практично менять яркость цвета. Передавая положительный factor мы делаем цвет ярче, передавая отрицательный factor - темнее. Но теперь у нас есть проблема, что значение может превысить число 255, поэтому решаем проблему:
Код: Выделить всё

changeColorLuminosity
(anyColor[3],factor)
{
    anyColor[0] = anyColor[0] + factor
    anyColor
[1] = anyColor[1] + factor
    anyColor
[2] = anyColor[2] + factor
    
    if
(anyColor[0] < 0)
    {
        anyColor[0] = 0
    
}
    
    if
(anyColor[1] < 0)
    {
        anyColor[1] = 0
    
}
        
    if
(anyColor[2] < 0)
    {
        anyColor[2] = 0    
    
}
    
    if
(anyColor[0] > 255)
    {
        anyColor[0] = 255
    
}
    
    if
(anyColor[1] > 255)
    {
        anyColor[1] = 255
    
}
        
    if
(anyColor[2] > 255)
    {
        anyColor[2] = 255 
    
}
}
  


Наша функция будет работать, но ее можно улучшить, потому что нам не нужно проверять больше ли число 255, когда оно меньше 0:
Код: Выделить всё

changeColorLuminosity
(anyColor[3],factor)
{
    anyColor[0] = anyColor[0] + factor
    anyColor
[1] = anyColor[1] + factor
    anyColor
[2] = anyColor[2] + factor
    
    if
(anyColor[0] < 0)
    {
        anyColor[0] = 0
    
}
    else if (anyColor[0] > 255)
    {
        anyColor[0] = 255
    
}
    
    if
(anyColor[1] < 0)
    {
        anyColor[1] = 0
    
}
    else if (anyColor[1] > 255)
    {
        anyColor[1] = 255
    
}
        
    if
(anyColor[2] < 0)
    {
        anyColor[2] = 0
    
}
    else if (anyColor[2] > 255)
    {
        anyColor[2] = 255
    
}
}
 
 

Данный участок кода:
Код: Выделить всё

    if
(anyColor[x] < 0)
    {
        anyColor[x] = 0
    
}
    else if (anyColor[x] > 255)
    {
        anyColor[x] = 255
    
} 
 

Можно прочитать так: если значение переменной anyColor меньше нуля, то оно равняется нулю, иначе если значение больше 255, то оно равняется 255.
Категория: Amx Mod X Скриптинг | Добавил: Alex (12.10.2012)
Просмотров: 938 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]