GP2x Wiz- Programmierung

Previous topic - Next topic

hoessi666

Hi!

Ich habe vor kurzem den Wiz zusammen mit GLBasic gekauft und angefangen ein kleines Spiel zu proggen...

Jetzt stellen sich folgende Fragen:
Was muss bei der Programmierung beachtet werden im Hinblick auf Speed beim Wiz?

Z.B. Kann der Wiz 24 Bit-Farbiefe? Der Vorg?nger war glaub? ich bei 16bit..W?rde das intern vom Wiz runtergerechnet (Perfomnace-Verlust?)?
Fliesskomma-Berechnungen sollen den Vorg?nger auch ausgebremst haben?! Ist da Abhilfe geschaffen? Wenn nicht, was kann berechnet werden ohne allzu gro?e Verluste (viele sin/cos f?r Screen-Positionen z.B)?
Wie sieht es mit Sprites in Bildschirmgr?sse aus (f?r Hintergrundbilder)... Kein Geschwindigkeitsproblem oder besser "kacheln"?

Ausserdem klappen "getypete" Felder bei mir nicht...
Mein Prog kann ?ber ein Hauptmen? beendet werden (nicht ?ber linker und rechter Schultertasten-Kombi).
Beim ersten Mal funktioniert das prima. Startet man das Spiel noch einmal und beendet es dann, friert es im Spielmen?-Screen ein und man kann den Wiz nur noch komplett abschalten...

Schranz0r

Hi,

Gernot ist z.Z nicht da, also musst du wohl noch ein wenig auf deine Antwort warten.
Zum Thema Performance w?rde ich empfehlen, einfach mal Tests zu machen :)
Ich kann leider nicht viel dazu sagen, da ich leider keine WIZ hab :(

Aber was nicht ist, kann ja noch werden ;)

Was meinst du mit getypte Felder?
Du benutzt also ein Type statt einem normalen Array?

Zeig doch einfach mal den Code, dann kann man mal gucken ob irgendwo ein Fehler ist (kannst mir auch per PM schicken).

Wenn du weitere Fragen hast, immer her damit ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

hoessi666

Quote from: Schranz0r on 2009-Jun-05
Was meinst du mit getypte Felder?
Du benutzt also ein Type statt einem normalen Array?

Ist nicht in meinem jetzigen Projekt, hatte es nur mal ausprobiert, da ich vorher mit PureBasic und Blitz3D programmiert habe, und als es nicht funzte, hab ich das Problem mit mehreren einfachen Feldern gleicher Gr??e umgangen.

Ich meine sowas:

Type soundso
var1%
var2%
endtype

dim Field[12][100] as soundso

Ging so direkt nicht, kam glaube ich ein Syntax-Error.

Eine L?sung im Forum hatte ich gesehen, die ging glaub?  ich so...:

Type soundso
var1%
var2%
endtype

Global field[] as soundso
dim field[12][100]

Funktionierte aber auch nicht...
Gab keinen Error, die einzelnen Felder liessen sich aber nicht mit Werten f?llen bzw abrufen.

Eindimensionale Felder, also arrays funktionieren auch mit Types.
Und zweidimensionale Felder gingen auch - nur nicht mit Types sondern mit einfachen Integern...

Vielleicht habe ich auch nur was Falsch gemacht...

Schranz0r

#3
Hi, ich mach mal eben nen Test, dann sag ich dir bescheid!
Solltes es nicht gegen ist es klar ein Bug!

EDIT:

Funzt doch :D

Code (glbasic) Select
TYPE TField
x;y // Position
ID // Field-ID
sx=20;sy=20 // Size
ENDTYPE

GLOBAL _TField[] AS TField // Typearray
REDIM _TField[10][10] // Redim to 2-dimensions 10x10


LOCAL FieldID
FOR x = 0 TO 9
FOR y = 0 TO 9
_TField[x][y].x = x*_TField[x][y].sx // Set x-pos
_TField[x][y].y = y*_TField[x][y].sy // Set y-pos
_TField[x][y].ID = FieldID // Set ID
INC FieldID,1 // Increase 1 to FieldID
NEXT
NEXT




WHILE TRUE


FOR x = 0 TO 9
FOR y = 0 TO 9

PRINT _TField[x][y].ID, _TField[x][y].x, _TField[x][y].y // Print ID to screen

NEXT
NEXT


SHOWSCREEN
WEND
END



I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

hoessi666

Alles klar, das Beispiel funktioniert...
Danke daf?r!

Keine Ahnung was f?r?n M?ll ich da vorher eingegeben habe :whistle:

Schranz0r

Hast warscheinlich versucht alles mit FOREACH abzufragen?
Da nimmt der nur die erste Dimension her :)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

hoessi666

#6
Ich wollte nochmal nachfragen, wie es mit der Programmierung f?r den Wiz grunds?tzlich aussieht. :whistle:

Ich habe bei meinen Spielen n?mlich immer heftige Framerate-Einbr?che; selbst ein eher anspruchsloses Game wie TetWiz kann keine vollen voreingestellten maximalen 60 FpS darstellen (ich hab?s dann auf 30 runtergedreht).
Einen 2D-Shooter, an dem ich im Moment sitze, kriege ich auf 20 Fps statt max 60 (Sternenfeld im Hintergrund,...)

Muss bei der Umsetzung f?r den Wiz irgendetwas speziell beachtet werden? M?ssen zus?tzliche Libraries in das Spieleverzeichnis? Unter Windows auf meinen "Entwicklungs-PC" l?uft alles flott....

Machen alphablending-Effekte (alphamode...) dem Wiz Probleme?
Was ist mit der fehlenden Fliesskomma-Einheit? Bremst es den Kleinen aus, wenn viele sin/cos-Berechnungen stattfinden; oder auch Bezier-Kurven-Berechnungen f?r die Interpolation zwischen Wegpunkten?

Ich w?sste n?mlich nicht wie ich solche Sachen umgehen k?nnte...

Kosta

Im 2D-Bereich: Die Roto-/Zoom- Befehle (vor allem die Roto-Befehle) zum Spritezeichnen haben bei mir beim GP2X programmieren immer die Performance runtergerissen. Der Rest l?uft eigentlich normal.
Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

hoessi666

Quote from: Kosta on 2009-Jun-22
Im 2D-Bereich: Die Roto-/Zoom- Befehle (vor allem die Roto-Befehle) zum Spritezeichnen haben bei mir beim GP2X programmieren immer die Performance runtergerissen. Der Rest l?uft eigentlich normal.

Das hatte ich schon mal irgendwo hier gelesen. Benutze stattdessen vorgezeichnete Anims f?r sowas...
Daran liegt?s also nicht...
Trotzdem Danke!

Kitty Hello

Seltsam. Sollte laufen. Ich habe mal was geh?rt, dass die Firmware 1.1.0 auf 56 FPS oder so runterbremst. Probier mal LIMITFPS -1, was Du da bekommst.

hoessi666

Habe mal ein paar Tests gemacht:

In meinem Sternenfeld im Hintergrund sollen sich 300 Sterne (als Sprites) bewegen. Dazu kommen zur Zeit ca. 30 Sch?sse und ein paar Sprites f?r das HUD. (knapp 20 FpS, auch gerne darunter)

Verringere ich die Anzahl auf 100 Sterne, bekomme ich wackelige 50 Frames, sobald ich anfange "volles Rohr" zu schiessen wird die Rate auf teilweise unter 40 gedr?ckt.

Werden die 300 Sterne nur angezeigt und nicht bewegt, bekomme ich 100 Fps und leicht dar?ber. Sobald die Sch?sse dazukommen geht es auch unter 100 FpS.

Ohne Sterne ?berhaupt zu zeichnen und berechnen, bleibt die Rate so wie im Test mit der reinen Anzeige der Sterne ohne Bewegung (also 100fps und darunter mit Ballerei)

Also muss das Problem nicht in Anzeigegeschwindigkeit von hunderten Sprites liegen, sondern in der Berechung der neuen Positionen...

Folgende Formeln verwende ich zur Bewegung der Sterne und Sch?sse:

x=x+COS(angle-90)*speed
y=y+SIN(angle-90)*speed

x,y,angle,speed sind Floats.

Dazu kommt noch die Berechnung von Punkten zwischen vorgegebnen Wegpunkten mittels Bezier-Splines (koordinaten auch in floats)


Kitty Hello

niemals COS/SIN in Echtzeit!!!
entweder Samples/Common/QMath.gbas oder eine Tabelle anlegen.

Ich hab so 100 und mehr Sterne auf dem WizSticks, die mit Rotosprite gezeichnet werden. Kein Problem.

hoessi666

Aaaaaahh... Es lebt!!!

Habe eine Tabelle mit 360 Cosinus und Sinus-Werten erstellt und greife ?ber meine neuen Funktionen CosEx und SinEx darauf zu.
Jetzt habe ich bei vollem Sternenfeld & Co auch ?ber 100 Frames pro Sek.!!!

Kitty Hello


Nobiag

Mal ne ganz bl?de Frage:
Ich habe noch keinen Wiz, deshalb kann ich gerade nicht testen und mit der Mathematik dahinter kenn ich mich jetzt auch nicht so genau aus, aber wenn man Sin() und Cos() nicht w?hrend der Laufzeit benutzen sollte, wie siehts denn mit Atan() aus?
Bin n?mlich gerade an einem Spiel f?r den Wiz dran in dem ich Atan() f?r die Winkelberechnung brauche. Hab die Funktion hier ausm Forum glaub ich:

Code (glbasic) Select
FUNCTION getangle: x1,y1,x2,y2

RETURN FMOD(ATAN(y1-y2,x1-x2)+360,360)

ENDFUNCTION


Falls das auch nicht w?hrend der Laufzeit benutzt werden sollte, wie kann ich denn den Winkel anders berechnen oder soll ich mir daf?r auch ne Tabelle anlegen (wobei das mit der Tabelle wohl etwas komplizierter w?re als bei Sin() und Cos().)


Achso und noch ne Frage zum Wiz:

Bei Createscreen steht, dass die Gr??e des Screens auf manchen Systemen auf die Gr??e des echten Fensters (also auf die Wiz Aufl?sung oder?) beschr?nkt sein kann. Trifft das beim Wiz zu?