KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: [LUA] RAM leeren, aber wie?
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,
ich mal eine kurze Frage zum Thema RAM der PSP mit LUA leeren. Wenn ich jetzt z.B. folgenden Code habe:

Code:
1  = Image.load("1.jpg")
2  = Image.load("2.jpg")
3  = Image.load("3.jpg")
4  = Image.load("4.jpg")
5  = Image.load("5.jpg")
6  = Image.load("6.jpg")
7  = Image.load("7.jpg")
8  = Image.load("8.jpg")
9  = Image.load("9.jpg")

while true do
pad = Controls.read()
screen:blit(10,10,1,true)
screen:blit(10,20,2,true)
screen:blit(10,30,3,true)
screen:blit(10,40,4,true)
screen:blit(10,50,5,true)
screen:blit(10,60,6,true)
screen:blit(10,70,7,true)
screen:blit(10,80,8,true)
screen:blit(10,90,9,true)
--RAM der PSP voll

if pad:cross() then
?
System.memclean()
collectgarbage()
?
dofile("2.lua")
end
screen.waitVblankStart()
screen.flip()
end



Memclean() scheint iwie nicht zu funzen, denn wenn ich in 2.lua mehr Bilder lade bleibt die PSP hängen. Bei collectgarbage() bin ich mir über die Verwendung nicht sicher. Wäre cool wenn jemand den oben stehenden Code verbessern oder mir sagen könnte wie ich das mit dem RAM hinbekomme.

MfG
Schaschlix

Schaschlix :
Hallo Leute,
ich mal eine kurze Frage zum Thema RAM der PSP mit LUA leeren. Wenn ich jetzt z.B. folgenden Code habe:

Code:
1  = Image.load("1.jpg")
2  = Image.load("2.jpg")
3  = Image.load("3.jpg")
4  = Image.load("4.jpg")
5  = Image.load("5.jpg")
6  = Image.load("6.jpg")
7  = Image.load("7.jpg")
8  = Image.load("8.jpg")
9  = Image.load("9.jpg")

while true do
pad = Controls.read()
screen:blit(10,10,1,true)
screen:blit(10,20,2,true)
screen:blit(10,30,3,true)
screen:blit(10,40,4,true)
screen:blit(10,50,5,true)
screen:blit(10,60,6,true)
screen:blit(10,70,7,true)
screen:blit(10,80,8,true)
screen:blit(10,90,9,true)
--RAM der PSP voll

if pad:cross() then
?
System.memclean()
collectgarbage()
?
dofile("2.lua")
end
screen.waitVblankStart()
screen.flip()
end



Memclean() scheint iwie nicht zu funzen, denn wenn ich in 2.lua mehr Bilder lade bleibt die PSP hängen. Bei collectgarbage() bin ich mir über die Verwendung nicht sicher. Wäre cool wenn jemand den oben stehenden Code verbessern oder mir sagen könnte wie ich das mit dem RAM hinbekomme.

MfG
Schaschlix

Code:
System.memclean()

Das ist der Memclean Code!

Was soll dein Homebrew genau bewirken?

Okay ich versuch nochmal ein bisschen mit dem Befehl und berichte dann.
Du musst bedenken, dass in lua nicht zu viele dateien gleichzeitig offen sein dürfen. vorallem fällt das beim zip entpacken auf. scheinbar ist da ein fehler beim schließen entpackter zip dateien. wenn man eine zip entpackt hat, kann man sich nicht nochmal entpacken, und ab ner bestimmten anzahl entpackter zips sagt er error, too many open files.

kann gut sein dass du einfach zu viele bilder lädst. du könntest ja mal die bilder posten, viliecht aknn man die ja so anpassen, dass man garnicht so viele braucht.
Du wirst ja sicher nicht alle Bilder gleichzeitig verwenden! Daher lädst du die Bilder nur dann wenn sie gebraucht werden (also in der while schleife) und setzt danach die Bildvariable auf nil. Dann nurnoch die collectgarbage() funktion durchlaufen lassen und der ram bleibt "clean".

Im Beispiel

du hast 3 bilder, die du noch nicht in den code einfügst!

Code:
Bild1 = Image.load("bild1.png")
Bild2 = Image.load("bild2.png")
Bild3 = Image.load("bild3.png")


Dann willst du bild eins bei druck auf Kreuz anzeigen lassen.

Code:
pad = Controls.read()
while true do
if pad:cross() then
bild1 = Image.load("bild1.png")
screen:blit(1,1,bild1,true)
end

Beim nächsten druck auf dreieck soll bild 2 geladen werden

Code:
if pad:triangle() then
bild1 = nil
bild2 = Image.load("bild2.png")
screen:blit(1,1,bild2,true)
end

so jetzt bei druck auf r soll das 3. geladen werden

Code:
if pad:r() then
bild2 = nil
bild3 = Image.load("bild3.png")
screen:blit(1,1,bild3,true)
end

so jetzt noch die collect garbage funktion einfügen

Code:
collectgarbage()
screen.waitVblankStart()
screen.flip()
end


So und das system musst du jetzt noch auf deinen Code übertragen und der ram bleibt frei xmas

Cool danke...
Habe aber den eigentlichen Fehler gefunden. Es liegt nicht am ru kleinen RAM sondern an dem Bild, dass ich anzeigen wollte, das hat nämlich den Fehler ausgelöst.
Referenz-URLs