Lua Game Engine ~Engine tự viết by Bullno1~

Thảo luận trong 'Tools và Engine' bắt đầu bởi bullno1, 11/4/07.

Trạng thái chủ đề:
Không mở trả lời sau này.
  1. bullno1

    bullno1 Mr & Ms Pac-Man

    Tham gia ngày:
    22/4/06
    Bài viết:
    221
    Trước hết là sreenshot cái đã

    [​IMG]

    Đây là engine do mình tự chế, nói là chế vì chỉ tập hợp mấy thứ nổi tiếng lại thôi, ko tự làm đc gì nhiều. Các thứ đó là:
    Graphic:Irrlicht
    Sound: IrrKlang
    Level editor: Irredit
    Script: Lua

    Mục tiêu là làm ra một free+opensource 3d game engine vừa dễ, vừa tốt. Có thể đc coi như một game maker trong giới 3D.

    Chức năng:
    -Tất cả những chức năng mà mấy engine kia có
    -Gắn scene node với một entity thông qua Irredit
    -Lập trình hướng đối tượng trong Lua
    -Hệ thống event giống game maker (Create,Step, Destroy, Collision)
    -100% sử dụng script -> game chạy đc ngay, ko cần biên dịch

    Cách xem demo:
    Giải nén file mình attach ra rồi vào luagame\bin\debug rồi double click vào launcher.bat
    Nếu có nhạc mp3 thì copy vào và đổi tên thành testmusic.mp3 để nghe thấy trong demo
    Bấm nút f để cái model bay lên cao
    Di chuyển camera bằng nút wasd
    Bấm nút '~' để thấy chữ hoho xuất hiện trên console :))

    Lập trình bằng lua: tham khảo( http://www.lua.org)
    Cách tạo class,object,method,property:
    Mã:
    class("Classname")
    function Classname:Create() --Day la constructor
      property1=1
      property2=2
    end
    
    function Classname:Destroy() --Destructor
    end
    
    function Classname:blah() --method
     blah blah blah
    end
    
    --Chú ý:Class với tên Classname ko đc quản lý bởi game engine
    --Muốn đc quản lý thì class này phải inherit từ Entity:
    --vd từ demo
    class("crazygirl",Entity) --class "gái điên" là con của Entity :))
    function crazygirl:Step()
       self:Rotate(0,5,0) -- con bé này điên nên nó xoay tròn =))
    end
    
    crazygirl(node) -- gắn scenenode vào entity này
    --Thế là step nào con crazygirl cũng bị xoay đi một độ quanh trục y
    
    Class con có thể override method của parent cũ. Để gọi lại method của parent thì thêm dấu _ vào đầu method vd: crazyboy:_Step() nếu crazyboy là con crazygirl . Riêng với Method Create và Destroy thì Class mới bắt buộc phải gọi method của parent trong method của mình(tại sao đừng hỏi)
    
    class_of(o): trả lại class của o
    class_name(c): class name của c
    is_class(o): true nếu o là class
    is_object(o):true nếu o là object
    is_child(o,c) true nếu o là một object của class c hoặc o là con của c
    
    Plugin cho irredit 7.0
    -Copy file create launcher.bat vào cùng thư mục với irredit.exe rồi double click
    -copy hết các file .nut và .bmp vào thư mục scripts của irredit
    -double click vào một file .irr bất kì rồi chọn open wtih launcher.bat

    -> từ nay cứ double click vào file .irr nào là irredit tự mở nó
    Có thêm một nút mới trên toolbar : "CD" dùng để change working directory của engine vào cùng path của file .irr

    Documentation+Tutorial cụ thể hơn sẽ có trong thời gian "Không xa" :))

    Download
     
  2. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    {@:

    - Ngôn ngữ này là OOP hay SP ????

    :@}
     
  3. bullno1

    bullno1 Mr & Ms Pac-Man

    Tham gia ngày:
    22/4/06
    Bài viết:
    221
    Boo (cái mà viết ra engine) là OOP dựa trên dotNet .

    Lua (ngôn ngữ script của engine) là hơi OOP . Bản chất là ko có OOP, nhưng có thể tự chế vd:

    robot={} //tạo một table với tên là robot, table là một thứ vừa là mảng, vừa là list, vừa là map trong lua. Phần tử của nó là số, string, table hay function cũng đc

    function robot.shoot(a,b)
    blah blah blah
    end

    Vd như cái demo kia OOP thấy rõ:

    fs.WorkingDirectory='media' //chuyển đường dẫn vào thư mục media
    abcmesh=sm:GetMesh('abc.x') //load model abc.x

    SP là service oriented à?? Tui mới nghe chứ chưa dùng bao giờ.
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này