
4 Matrix-Musik DJ-App
Tippe den folgenden Code ab (ohne -- Kommentare), speichere und teste diesen:
1 function love.load()
2 la, lg = love.audio, love.graphics
3 namen = { "lead", "drums", "drumsb", "clap" }
4 instr = {{},{}} -- Instrumente-Tabelle mit...
5 for i = 1, 2 do -- Zwei Zeilen und...
6 for j = 1, #namen do -- Vier Spalten
7 instr[i][j] = {}
8 instr[i][j].snd = la.newSource( namen[j] .. i .. ".ogg" )
9 instr[i][j].snd:setLooping( true ) -- Endlosschleife an
10 instr[i][j].snd:setVolume( 0 ) -- Lautstärke auf 0
11 instr[i][j].snd:play() -- Tracks werden abgespielt
12 instr[i][j].farbe = { 60
*
j, love.math.random(200), 200 }
13 end
14 end
15 spalten = #instr[1] -- 4 Spalten
16 zeilen = #instr -- 2 Zeilen
17 breit = lg.getWidth() -- Bildschirm-Größe
18 hoch = lg.getHeight()
19 feldB = breit / spalten -- Schaltfelder-Größe
20 feldH = hoch / zeilen
21 end
22
23 function love.draw()
24 for i, zeile in ipairs(instr) do -- i ist Index, zeile ist Wert
25 for j, instrument in ipairs(zeile) do
26 lg.setColor(instrument.farbe) -- Instrumente haben eigene Farben
27 lg.rectangle( "fill", (j-1)
*
feldB, (i-1)
*
feldH, feldB, feldH )
28 if instrument.snd:getVolume() == 1 then
29 lg.setColor( 255, 255, 255, 95 ) -- An/Aus-Zustand wird gezeigt
30 lg.circle( "fill", (j-0.5)
*
feldB, (i-0.5)
*
feldH, feldB
*
0.4 )
31 end
32 end
33 end
34 end
35
36 function love.mousepressed(x, y) -- Wird von Maus/Touch gestartet
37 woBreit = math.ceil( x / feldB ) -- Spaltenberechnung
38 woHoch = math.ceil( y / feldH ) -- Zeilenberechnung
39 if instr[woHoch][woBreit].snd:getVolume() == 1 then
40 instr[woHoch][woBreit].snd:setVolume(0) -- Lautstärke 0%
41 else
42 instr[woHoch][woBreit].snd:setVolume(1) -- Lautstärke 100%
43 end
44 end
Der Code macht intensiven Gebrauch von Tabellen/Listen und for-Schleifen, sowie von
mathematischen Berechnungen, die etwas langsamer verdaut werden sollten.
LÖVE Spieleprogrammierung - 17.01.05 6/6 espws.de