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...
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 ;)
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...
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
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
Alles klar, das Beispiel funktioniert...
Danke daf?r!
Keine Ahnung was f?r?n M?ll ich da vorher eingegeben habe :whistle:
Hast warscheinlich versucht alles mit FOREACH abzufragen?
Da nimmt der nur die erste Dimension her :)
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...
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.
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!
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.
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)
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.
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.!!!
:booze:
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:
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?
ATAN ist auch nicht superschnell, aber ist nun mal so. Schau mal in QMath.gbas (Samples/COMMON). Evtl. gibt's eine QATAN.
Ja, Wiz hat diese CreateScreen Limitierung. PCs mit alten Karten auch (ab 5 Jahre und ?lter oder so).