|
Verfasser |
Nachricht |
Schaschlix
Profi
Beiträge: 366
Gruppe: User
Registriert seit: Nov 2009
Status:
Offline
Danke erhalten: 71
|
[LUA] RAM leeren, aber wie?
Hallo Leute,
ich mal eine kurze Frage zum Thema RAM der PSP mit LUA leeren. Wenn ich jetzt z.B. folgenden Code habe:
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
Dieser Beitrag wurde zuletzt bearbeitet: 06.04.2010 12:13 von Schaschlix.
|
|
06.04.2010 12:12 |
|
|
|
D!S
Legende
Beiträge: 1.537
Gruppe: User
Registriert seit: Sep 2009
Status:
Abwesend
Danke erhalten: 470
|
RE: [LUA] RAM leeren, aber wie?
Hallo Leute,
ich mal eine kurze Frage zum Thema RAM der PSP mit LUA leeren. Wenn ich jetzt z.B. folgenden Code habe:
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
Das ist der Memclean Code!
Was soll dein Homebrew genau bewirken?
|
|
06.04.2010 12:19 |
|
Folgende User bedanken sich: |
|
Schaschlix
Profi
Beiträge: 366
Gruppe: User
Registriert seit: Nov 2009
Status:
Offline
Danke erhalten: 71
|
RE: [LUA] RAM leeren, aber wie?
Okay ich versuch nochmal ein bisschen mit dem Befehl und berichte dann.
|
|
06.04.2010 12:22 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: [LUA] RAM leeren, aber wie?
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.
|
|
06.04.2010 12:51 |
|
Folgende User bedanken sich: |
|
jaz0n
Halbprofi
Beiträge: 136
Gruppe: User
Registriert seit: Oct 2009
Status:
Abwesend
Danke erhalten: 52
|
RE: [LUA] RAM leeren, aber wie?
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!
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.
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
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
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
collectgarbage()
screen.waitVblankStart()
screen.flip()
end
So und das system musst du jetzt noch auf deinen Code übertragen und der ram bleibt frei
|
|
06.04.2010 13:02 |
|
Folgende User bedanken sich: |
|
Schaschlix
Profi
Beiträge: 366
Gruppe: User
Registriert seit: Nov 2009
Status:
Offline
Danke erhalten: 71
|
RE: [LUA] RAM leeren, aber wie?
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.
|
|
06.04.2010 13:35 |
|
|
|