Hallo,
Ich benutze Xprofan 10a und wollte ein kleines 2D Spiel in OpenGL schreiben. Jetzt habe ich das Problem, dass ich den Bildschirm nicht verschieben (Scrollen) kann.
Ich würde gerne eine Map machen die vll so 2000x2000 Pixel groß ist und man Ausschnitte davon sieht falls das Fahrzeug am Ort ist.
Ich habe auch schon ein paar Funktionen über den Api-Aufruf versucht aber es funktionierte nicht.Zum Beispiel hab ich die Translatef Methode probiert. Ich habe bereits erfolgreich in Java mit OpenGL gecodet und wollt Xprofan probieren, da es mir einfacher erschien^^ Habt ihr vielleicht ein paar Ideen? Vielleicht könnte man das Auto ("Quad") auf eine große Bitmap (oder Backbuffer?) zeichnen lassen und diese dann auf dem Bildschirm anzeigen lassen.
Ich hab aber im Moment keine Ahnung wie ich das in Xprofan mit OGL umsetzen soll.
Kennt ihr auch ein paar gute Tutorials für OpenGL mit Xprofan? Die OpenGL Tutorials in der Profan Referenz hab ich soweit durch. Auch die OpenGL Tutorials im Internet kenne ich schon aber die beziehen sich nicht auf Profan! (nur c++, java ...).
Gruß Dirk
Hier der Code:
'Testprogramm
declare time&, frames%
'
Declare KeyCode%[256]
'Klasse Fahrzeug
Class Fahrzeug = Leben%, Xpos!, Ypos!,Xspeed!,Yspeed!,Winkel!
'Spieler deklarieren
Declare Spieler#
'Objekt aus der Klasse Fahrzeug erstellen
Dim Spieler#,Fahrzeug
'Unterprogramme
'Unterprogramm zum zeichnen
proc DrawGLScene
oGL("Clear")
oGL("PosMode", 1)
oGL("Origin", Spieler#.xpos!,Spieler#.ypos!,-100)
oGL("Color", 0, 0, 1, 1)
oGL("Rotate", 0, 0,-Spieler#.Winkel!)
oGL("Cuboid", 3,5, 2)
' oGL("glTranslatef", 0,0,10) 'Hier habe ich versucht den Screen zu verschieben; ging nicht
'Da würden dann die Variablen Screenx!, ScreenY! stehen
oGL("Show")
endproc
'FPS
proc Checkefps
inc frames%
if &GetTickCount - time& >= 1000 ' 1 Sekunde ist 'rum
setText %hWnd, str$(frames%) + " Frames/sek"
time& = &GetTickCount
frames% = 0
endif
endproc
' Hauptprogramm
' -------------
declare ende%
'Init
Spieler#.Winkel!=0
CLS 0
window 0,0 - %maxx,%maxy 'Bildschirmgröße maximal
oGL("Init", %hWnd, 0, 0, 0, 0)
oGL("PosMode", 1)
time& = &GetTickCount
frames% = 0
ende% = 0
setTimer 20 ' max 50 Frames /sek.
WhileNot ende%
WaitInput 'Warte auf Eingabe
'Tastendrücke abfragen
if isKey(27) 'Falls ESC gedrückt, dann Programm beenden
ende% = 1
endif
if isKey($25)
Spieler#.Winkel!=Spieler#.Winkel!-7
endif
if isKey($27)
Spieler#.Winkel!=Spieler#.Winkel!+7
endif
if isKey($26)
Spieler#.Xpos!=Spieler#.Xpos!+@Sin(Spieler#.Winkel!*3.141/180)
Spieler#.Ypos!=Spieler#.Ypos!+@Cos(Spieler#.Winkel!*3.141/180)
endif
if isKey($28)
Spieler#.Xpos!=Spieler#.Xpos!-@Sin(Spieler#.Winkel!*3.141/180)
Spieler#.Ypos!=Spieler#.Ypos!-@Cos(Spieler#.Winkel!*3.141/180)
endif
DrawGLScene() 'Zeichnen
checkefps() 'FPS anzeigen
EndWhile
killTimer
end