KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: [LUA] Malprogramm funktioniert nicht richtig
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi

Ich habe mich heute an einem Malprogramm in LUA gewagt. Dieses Malprogramm soll Musik während dem Malen abspielen welches man mit Start wechseln kann. Ausserdem soll man mit Select den Malhintergrund wechseln können. Bis jetzt läuft es bis zu einer Sache: Wenn ich male dann erscheinen die Punkte überal auf dem Bildschirm, nur nich wo ich sie haben möchte. Hier ist mein Code, wär nett wenn ihr euch den mal angucken könntet:

Code:
bild = Image.load("Julian.png")
    malflaeche = Image.load("erstes.png")
    cursor = Image.load("cursor.png")
    Mp3.load("1.mp3", 1)
    cursor_x = 100
    cursor_y = 100
    schwarz = Color.new(0,0,0)
    
    System.draw()
    
    Image:blit(0,0,bild)
    screen:flip()
    screen.waitVblankStart(300)
    screen:clear()
    
    System.endDraw()
      
    while true do
    
    System.draw()
        
        pad = Controls.read()
        
        if pad:select()then
            malflaeche = Image.load("zweites.png")
        end    
            
    if pad:square()then
            malflaeche = Image.load("drittes.png")
        end    
        
    Mp3.play(true, 1)

    if pad:start()then
       Mp3.stop(1)
       Mp3.load("2.mp3", 1)
       Mp3.play(true, 1)
    end  
        
        
        
        dx = pad:analogX()
        dy = pad:analogY()
        
        if dx > 30 then
            cursor_x = cursor_x + (math.abs(pad:analogX())/64)
        end
        if dx < -30 then
            cursor_x = cursor_x - (math.abs(pad:analogX())/64)
        end
        if dy > 30 then
            cursor_y = cursor_y + (math.abs(pad:analogY())/64)
        end
        if dy < -30 then
            cursor_y = cursor_y - (math.abs(pad:analogY())/64)
        end
        
        screen:blit(0,0,malflaeche)
        screen:blit(cursor_x, cursor_y, cursor)
        
        if pad:cross() then
            malflaeche:drawLine(cursor_x, cursor_y,cursor_x, cursor_y,schwarz)
        end
        
        
        screen.flip()
        screen.waitVblankStart()
        
        System.endDraw()
        
        
    end


mfg

thewolf16

EDIT:Achja, habe den Code nach der Syntax vom "LuaPlayer Euphoria v7.3" geschrieben.

so du ersetzt diesen code:

Zitat:
if pad:cross() then
malflaecheBig GrinrawLine(cursor_x, cursor_y,cursor_x, cursor_y,schwarz)
end


durch diesen:

Zitat:
if pad:cross() then
malflaeche:fillRect(cursor_x, cursor_y,pinselstaerke,pinselstaerke,deine farbe)
end


So kurze definition:
if pad:cross() then ///die tastenabfrage
malflaeche:fillRect ///erzeugt eine linie
(cursor_x, cursor_y, /// ist klar
pinselstaerke /// = 2 entweder durch 2 ersetzen oder definiern
farbe /// is klar "variable"
end // das ende der tastenabfrage

angaben ungetestet und ohne gewähr XD

lg jaz0n (teambolt)

Das Hauptprobel ist das du auf einen Tastendruck Bilder lädt, dies ist ein No Go beim programmeiren, da dies zu Buffer Overflow und deswegen zu freezes führt.
Lade beide Malflächen vorher und mache es ungefähr so:

Code:
mal1 = Image.Load("erstes.png")
mal2 = Image.Load("zweites.png")
mal3 = Image.Load("drittes.png")
cur_malfl = 1 --gibt die momentane fläche an

while true do
...
if cur_malfl = 1 then
malflaeche = mal1
elseif cur_malf = 2 then
malflaeche = mal2
elseif cur_malfl = 3 then
malflaeche = mal4
end
...


end

@PSPBricker: Wenn ich es so mache wie du es sagst kommt folgende Fehlermeldung:

"Error: index.lua:55: ´then´expected near ´=´

Press start to restart"

Das wäre dann folgender Code:

if cur_malfl = 1 then
malflaeche = mal1
elseif cur_malf = 2 then
malflaeche = mal2
elseif cur_malfl = 3 then
malflaeche = mal4
end
if cur_malfl = 1 then
malflaeche = mal1

das = ist falsch, benutz ein ==
Ja stimmt, danke. Hab es jetzt geändert. Aber jetzt kommt der fehler:

"Error: index.lua:41: loop in gettable"

also bei den Zeilen:

mal1 = Image.Load("erstes.png")
mal2 = Image.Load("zweites.png")
mal3 = Image.Load("drittes.png")

Diese Zeilen sind in der Hauptschleife. Als ich diese Zeilen vor der Schleife gesetzt habe kam genau der gleiche Fehler nur mit "index.lua:2:".
Hab jetzt mein Code aktualisiert. Trotzdem erscheinen die Pinselstriche nicht da wo sie eigtl. erscheinen müssten.Hier ist mein jetziger Code:

Code:
mal1 = Image.load("erstes.png")
    mal2 = Image.load("zweites.png")
    mal3 = Image.load("drittes.png")
    bild = Image.load("Julian.png")
    cur_malfl = 1 --gibt die momentane fläche an
    cursor = Image.load("cursor.png")
    cursor_x = 100
    cursor_y = 100
    schwarz = Color.new(0,0,0)
    
    System.draw()
    
    Image:blit(0,0,bild)
    screen:flip()
    screen.waitVblankStart(300)
    screen:clear()
    
    System.endDraw()
    
    

if cur_malfl == 1 then
    malflaeche = mal1
    elseif cur_malf == 2 then
    malflaeche = mal2
    elseif cur_malfl == 3 then
    malflaeche = mal4
    end
    
    while true do
    
           pad = Controls.read()

    System.draw()
        
        

        dx = pad:analogX()
        dy = pad:analogY()
        
        if dx &gt; 30 then
            cursor_x = cursor_x + (math.abs(pad:analogX())/64)
        end
        if dx &lt; -30 then
            cursor_x = cursor_x - (math.abs(pad:analogX())/64)
        end
        if dy &gt; 30 then
            cursor_y = cursor_y + (math.abs(pad:analogY())/64)
        end
        if dy &lt; -30 then
            cursor_y = cursor_y - (math.abs(pad:analogY())/64)
        end
        
        screen:blit(0,0,malflaeche)
        screen:blit(cursor_x, cursor_y, cursor)
        
        if pad:cross() then
            malflaeche:drawLine(cursor_x, cursor_y,cursor_x, cursor_y,schwarz)
        end
        
        if pad:select() then
        Mp3.load("1.mp3", 1)
        Mp3.play(true, 1)
    end

    if pad:start() then
        Mp3.load("2.mp3", 1)
        Mp3.play(true, 1)
    end    
        
        screen.flip()
        screen.waitVblankStart()
        
        System.endDraw()
        
            
        
    end

So hab es nun hinbekommen. Jetzt läuft alles bestens. Hab einfach nur den LuaPlayer HM 2 benutzt. Danke für eure Hilfe.
Referenz-URLs