Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Using Lua to Build a Component-based Architecture for Game Apps

Jheng Wei Ciao
August 05, 2013
1.9k

Using Lua to Build a Component-based Architecture for Game Apps

Presented on COSCUP 2013 http://coscup.org/2013/en/

Jheng Wei Ciao

August 05, 2013
Tweet

Transcript

  1. Using Lua to Build a
    Component-based
    Architecture for Game Apps
    半路 / Jheng Wei Ciao

    View Slide

  2. Component
    Based
    Architecture

    View Slide

  3. Lua

    View Slide

  4. Pitfalls of
    Object-Oriented Design
    ?!

    View Slide

  5. Traditional OOD
    Object-Oriented Design
    Class
    Inheritance
    Virtualization
    Polymorphism
    Inheritance-based Architecture

    View Slide

  6. Player Enemy
    WalkableObject
    Actor
    CollidableObject

    View Slide

  7. View Slide

  8. FlyableObject
    Player Enemy
    Actor
    WalkableObject
    CollidableObject

    View Slide

  9. CollidableObject FlyableObject
    FlyingEnemy
    Actor
    WalkableObject
    How?

    View Slide

  10. CollidableObject FlyableObject
    FlyingEnemy
    FlyingActor
    How?

    View Slide

  11. Pitfalls of IBA
    Deep and tangled hierarchies
    Diamond ring inheritance
    Copy-paste code here and there
    Special cases
    Magic: don’t touch it

    View Slide

  12. Component-based Architecture
    Each functionality is a game component
    Data-driven method for objects creation
    Design Patterns: “Favor composition over
    inheritance”

    View Slide

  13. Player
    WalkableObject
    CollidableObject
    FlyableObject
    Enemy
    WalkableObject
    CollidableObject
    FlyableObject

    View Slide

  14. WalkableObject
    CollidableObject
    FlyableObject
    Game
    Components

    View Slide

  15. WalkingEnemy
    FlyingEnemy
    WalkableObject
    CollidableObject CollidableObject
    FlyableObject

    View Slide

  16. Don’t use CBA... yet
    CBA can’t save your world
    OOD can do good things too
    Don’t make everything a component
    Leave messy code alone
    You might need an editor or tool

    View Slide

  17. View Slide

  18. Who Are Using Lua

    View Slide

  19. Advantages of Lua
    Lightweight
    Extensible
    Cross-platform
    Robust
    Openness
    Community

    View Slide

  20. Drawbacks of Lua
    Most editors don’t support auto-completion code
    Goodbye to debuggers & breakpoints
    Hello to loggers & print()
    No excuse for coffee break time

    View Slide

  21. Pitfalls of Lua
    Naming convention for global variables
    Do garbage collection manually
    Don’t forget to compile scripts & strip debug info

    View Slide

  22. My Lua Trilogy
    Lua
    5.1.5
    Luabind
    0.9.1
    Time-saver & OO-like
    Boost
    Luabind depends: template programming

    View Slide

  23. My Programming Trilogy
    C++
    Generic framework
    Objective-C
    iOS platform-specific
    OpenGL ES implementation
    Lua
    Data description
    Game logic
    10%
    65%
    25%
    C++ Lua Objectitve-C

    View Slide

  24. Player
    Transform
    BoundingBox
    Quad

    View Slide

  25. Meet Powerful ‘Table’
    Player = {}
    Player[“Transform”]
    Player[“Quad”]
    Player[“Transform”]:SetTranslate(50, 100)
    Player[“Quad”]:SetSize(120, 120)

    View Slide

  26. View Slide

  27. Traditional OOP
    Game Objects Update
    #1 #2 #3 #4 #5
    Game Objects Render
    #1 #2 #3 #4 #5

    View Slide

  28. Component-Based Architecture
    Game Components Update
    #1 #2 #3 #4 #5
    Game Components Render
    #1 #2 #3 #4 #5

    View Slide

  29. Game Object = Container
    Game Object
    Transform
    Bounding
    Sprite
    Motion
    StateMachine
    Timer

    View Slide

  30. Object Factory
    Game Component
    Templates
    Game Object
    Templates
    Game-based

    View Slide

  31. Interpolator GC
    0 255
    0.1 1.0
    SetAlpha()
    SetScale()

    View Slide

  32. Memory Management
    C++
    Transform
    Sprite
    ......
    Lua
    Game Object
    Transform
    Sprite

    View Slide

  33. User Interfaces & Widgets
    Widgets
    Button Picture
    Text Number
    Radio Button Progress Bar

    View Slide

  34. Widgets = Container
    Widgets
    Button
    Render/Update
    Movement
    Scale Up/Down
    Fade In/Out
    Sprite
    Motion
    Transform
    Fade

    View Slide

  35. MainMenu
    Button
    Sprite
    Interpolator
    Input Events

    View Slide

  36. Lua + CBA
    =
    100% Awesome!

    View Slide

  37. [Launching Xcode]
    Live Demo

    View Slide

  38. Live Game Apps?

    View Slide

  39. Lua for Game Apps

    View Slide

  40. CBA for Game Apps

    View Slide

  41. Lua + CBA ......?

    View Slide

  42. We’re recruiting one
    Android engineer

    View Slide

  43. Open Mind,
    Happy Coding,
    Make Great Games!

    View Slide