суббота, 10 июля 2010 г.

Классы в Lua

В этой небольшой статье я расскажу о создании и использовании классов в Lua при помощи стандартной библиотеки "classlib.lua".

dofile(GetResPath('Scripts\\classlib.lua')) 
-- GetResPath() - C++ функция, возвращающая путь к ресурсам движка

 
C_Sprite = class("C_Sprite") -- так объявляется класс
 
function C_Sprite:__init(Name,Texture,PosX,PosY,Left,Top,Width,Height)    -- Функция инициализации
    --Через self. задаются переменные класса
self.Name         = Name    
    self.Texture    = Texture
    self.Pos         = {x=PosX,y=PosY}
    self.StartPos    = {x=PosX,y=PosY}
    self.Size         = {Left=Left,Top=Top,Width=Width,Height=Height}
    self.Scale        = {x=1, y=1}
    self.Alpha        = 255
    Sprite_Add(Name,Texture,PosX,PosY,Left,Top,Width,Height) -- С++ функция, добавляющая спрайт в массив спрайтов 
end
function C_Sprite:Sync() 
-- Синхронизация данных класса с данными движка 
    Sprite_MoveTo(self.Name,self.Pos.x,self.Pos.y)
    Sprite_SetScale(self.Name,self.Scale.x,self.Scale.y)
    Sprite_SetAlpha(self.Name,self.Alpha)              
end
function C_Sprite:Draw()
   Sprite_Draw(self.Name)
end 
 
-- Теперь чтобы создать объект класса достаточно прописать следующее
SpriteObject = C_Sprite("TestSprite","TestTexture",512,384,100,100,100,100) 
--Обращение к свойству класса
SpriteObject.Pos.x = 10
--Вызов функции класса
SpriteObject:Sync()


Далее я расскажу о наследовании классов. Делается это довольно просто. Допустим у нас есть класс, наследуемый от класса C_Sprite. Объявляется он так:
class.C_GoalObject(shared(C_Sprite))
Инициализация происходит, как и у обычного класса, только нужно добавить следующую строку:
self.C_Sprite:__init(Name,Texture,PosX,PosY,Left,Top,Width,Height)
Обращение к переменным и вызов функций наследуемого класса:
self.C_Sprite.Pos.x = 10
self.C_Sprite:Sync()
Вот и всё :)

Комментариев нет:

Отправить комментарий