Presentation is loading. Please wait.

Presentation is loading. Please wait.

Löve and Lua based on guide-to-getting-started-with-love2d/http://nova-fusion.com/2011/06/14/a- guide-to-getting-started-with-love2d/

Similar presentations


Presentation on theme: "Löve and Lua based on guide-to-getting-started-with-love2d/http://nova-fusion.com/2011/06/14/a- guide-to-getting-started-with-love2d/"— Presentation transcript:

1 Löve and Lua based on guide-to-getting-started-with-love2d/http://nova-fusion.com/2011/06/14/a- guide-to-getting-started-with-love2d/

2 Löve 2D game framework simple to use free

3 Game Structure a folder with main.lua, other files to distribute, just create a zip file of the directory contents, and give the zip file a.love extension: cd humpy zip -r../humpy.love *... then you can double click the.love file to run it

4 Löves API the love module is a Lua table, containing the various other modules (also tables) audio,image,graphics,mouse, keyboard,physics,etc. many modules contain classes, eg Image callbacks are defined in the love module let your program handle events, draw, update,etc you dont have to define all of them, just the ones you need (exist default versions of each (most do nothing))

5 callbacks in love module love.load() -- one-time setup love.draw() -- to render the frame love.update() -- to update simulation love.mousepressed(), love.mousereleased() love.run() -- main loop

6 function love.load() player={} player.vx = 10 player.vy = -30 player.x = 320 player.y = 240 image = love.graphics.newImage("masonic-eye.jpg") end function love.update(dt) player.x = player.x + player.vx * dt player.y = player.y + player.vy * dt end function love.draw() love.graphics.print( tostring(player.vx), 300,200 ) love.graphics.print( tostring(player.vy), 350,200 ) love.graphics.draw ( image, player.x, player.y) end function love.mousepressed ( x,y, button ) if button == 'l' then player.x = x player.y = y end ~tebo/4849/Love/simple

7 for drawing lines, shapes, text Image and Drawable objects reading images and fonts managing framebuffer special objects like particle systems love.graphics

8 screen coordinates

9 Points love.graphics.point ( x, y ) --draws a point love.graphics.setPointSize ( size ) love.graphics.setPointStyle ( style )

10 function love.load() stars = {} max_stars = 100 for i=1, max_stars do local x = math.random( 5, love.graphics.getWidth()-5) local y = math.random( 5, love.graphics.getHeight()-5) stars[i] = {x, y} end love.graphics.setPointSize ( 3 ) love.graphics.setPointStyle ( "smooth" ) end function love.draw() for i=1, #stars do -- loop through all of our stars love.graphics.point( stars[i][1], stars[i][2]) -- draw each point end ~tebo/4849/Love/stars

11 love.graphics.line ( x1,y1, x2, y2,... ) love.graphics.line (table_of_points) love.graphics.setLineWidth ( w ) love.graphics.setLineStyle ( style ) Lines

12 ~tebo/4849/Code/Love/lines function love.load() points = { 0, 0 } end function love.draw() x, y = love.mouse.getPosition() love.graphics.setColor ( 255, 0, 0 ) love.graphics.line ( 320, 240, x, y ) points[#points + 1] = x points[#points + 1] = y love.graphics.setColor ( 0, 255, 0 ) love.graphics.line ( points ) end

13 Drawables drawable = love.graphics.newImage ( filename ) drawable = love.graphics.newParticleSystem () love.graphics.draw( drawable, x, y, r, sx, sy, ox, oy )

14 ~tebo/4849/Code/Love /flyeye function love.load() skyeye = love.graphics.newImage("masonic-eye.jpg") width = skyeye:getWidth() height = skyeye:getHeight() angle = 0 rotvel = 10 end function love.update(dt) angle = angle + rotvel * dt end function love.draw() love.graphics.draw( skyeye, 100, 100, math.rad(angle), 1, 1, width / 2, height / 2) end

15 love.audio Source object -- can be played use OpenAL (directional sources, listener) (not working on mac???) sounds are static (in RAM) or stream

16 noisy function love.load() love.graphics.setBackgroundColor ( 255,255,255 ) music = love.audio.newSource("overbeated.ogg") -- if "static" is omitted, LÖVE will stream the file from disk, good for longer music tracks music:play() listener={} listener.listenerImage = love.graphics.newImage ( "listener.png" ) listener.w = listener.listenerImage:getWidth() listener.h = listener.listenerImage:getHeight() listener.x = 320 listener.y = 240 listener.angle = 0 sound = love.audio.newSource("bing.wav", "static") -- the "static" tells LÖVE to load the file into memory, good for short sound effects sound:setDirection( 0, 1, 0 ) -- "down" -- setup listener (not working on macosx at least) love.audio.setOrientation ( 0,-1,0, 0,0,1 ) -- forward and up vectors love.audio.setPosition ( listener.x, listener.y, 0 ) love.audio.setVelocity ( 0, 100, 0 ) end function love.mousepressed( x, y, button ) sound:stop() -- set source position (doesn't seem to work on macosx?) sound:setPosition ( x, y, 0 ) sound:setPitch ( y / ) sound:setVolume ( x / ) sound:play() end function love.draw() love.graphics.setColorMode("replace") love.graphics.draw(listener.listenerImage, listener.x, listener.y, math.rad(listener.angle), 1, 1, listener.w/2, listener.h/2) end

17 Lua can run under embedding application (Love) can run standalone (lua) good for experimenting, learning

18 chunks sequence of lua statements needs no separator between consecutive statements line breaks ignored can be read from interactive console can be read from a file both: lua -i filename starts up console after running chunk from filename

19 identifiers string of letters, digits, underscores starts with letter or underscore dont use names like _VERSION case sensitive dont use reserved words: and end break in repeat while false local return do for nil then else function not true elseif if or until

20 comments single line comment: starts with -- (2 hyphens) block comments --[[ --]] (disable by adding a hyphen at front of opening comment ---[[ is just a single line comment)

21 Types and Values Lua is dynamically typed no type definitions each value carries a type 8 basic types: nil, boolean, number, string, userdata, function, thread, table the type() function returns a string with the types name print( type(Hello World) ) print ( type(10.4*3))

22 Nil a type with a single value, nil a non-value meaning no useful value different from every other value globals are nil by default (before assignment) delete a variable by assigning nil to it return nil

23 Booleans two values: true and false conditionals consider nil and false as false anything else (including 0, ) is true

24 Numbers double-precision floating-point no rounding errors with integers < 10^14 ex) e23 100e-3

25 Strings sequence of characters can contain any embedded code, incl zero immutable - cant change strings, just create new ones with changes a = one string b = string.gsub(a, one, another0 print (a) print (b) can use single or double quotes can include C-like escape sequences (\n, \t, etc) can also use [[ and ]] to delimit multi-line strings

26 strings any numeric operation applied to a string tries to convert the string to a number print (10 + 1) -- prints 11 if a number is given when a string is expected, lua tries to convert it print( ) -- prints operator is string concatenation best to do explicit coercion tonumber(string) tostring(number) get string length with the length operator, # a = hello print(#a)

27 Tables associative arrays -- indexed with any value except nil the ONLY data structure in lua used for arrays, sets, records, queues, etc. tables are objects

28 table examples a = {} -- creates an empty table k = x a[k] = 10 a[20] = cool print(a[x]) --> 10 k = 20 print(a[k]) --> cool a[x] = a[x] + 1 print(a[x]) --> 11

29 tables tables grow as needed to hold new values a.name is syntactic sugar for a[name] not a[name] !!! lua convention: arrays start at 1! # gives last index (size) of table (doesnt count holes...) for i = 1,#a do print (a[i]) end

30 functions first-class values can store in variables, can pass as arguments to other functions can be returned from functions proper lexical scoping of nested functions

31 userdata and threads userdata - for arbitrary C data in lua variables threads - coroutines(?)


Download ppt "Löve and Lua based on guide-to-getting-started-with-love2d/http://nova-fusion.com/2011/06/14/a- guide-to-getting-started-with-love2d/"

Similar presentations


Ads by Google