Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Component Based Architecture

Slide 3

Slide 3 text

Lua

Slide 4

Slide 4 text

Pitfalls of Object-Oriented Design ?!

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Player Enemy WalkableObject Actor CollidableObject

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

FlyableObject Player Enemy Actor WalkableObject CollidableObject

Slide 9

Slide 9 text

CollidableObject FlyableObject FlyingEnemy Actor WalkableObject How?

Slide 10

Slide 10 text

CollidableObject FlyableObject FlyingEnemy FlyingActor How?

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Player WalkableObject CollidableObject FlyableObject Enemy WalkableObject CollidableObject FlyableObject

Slide 14

Slide 14 text

WalkableObject CollidableObject FlyableObject Game Components

Slide 15

Slide 15 text

WalkingEnemy FlyingEnemy WalkableObject CollidableObject CollidableObject FlyableObject

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

Who Are Using Lua

Slide 19

Slide 19 text

Advantages of Lua Lightweight Extensible Cross-platform Robust Openness Community

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Player Transform BoundingBox Quad

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Object Factory Game Component Templates Game Object Templates Game-based

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

MainMenu Button Sprite Interpolator Input Events

Slide 36

Slide 36 text

Lua + CBA = 100% Awesome!

Slide 37

Slide 37 text

[Launching Xcode] Live Demo

Slide 38

Slide 38 text

Live Game Apps?

Slide 39

Slide 39 text

Lua for Game Apps

Slide 40

Slide 40 text

CBA for Game Apps

Slide 41

Slide 41 text

Lua + CBA ......?

Slide 42

Slide 42 text

We’re recruiting one Android engineer

Slide 43

Slide 43 text

Open Mind, Happy Coding, Make Great Games!