![]() |
Anzeige:
|
|
|||||||
| Spiele & OpenGL Spiele in XProfan und Fragen zur Spieleprogrammierung |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Gast
Beiträge: n/a
|
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 |
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
David Strutz hat mal eine nützliche Include-Datei (ogl_helper.inc) geschrieben. Da ist sicher das Passende für dich dabei. Ich erinnere mich an ein nettes, butterweiches 3-Ebenen-Parallax-Scrolling-Demo. Such mal in der Community danach.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#3 (Direktlink) |
|
Gast
Beiträge: n/a
|
Danke für die Hilfe.
Die oglhelper.inc finde ich nicht. hab überall gesucht. google. profan homepage... Gibt sie wohl scheinbar nicht mehr. Aber das Beispiel mit dem Scrolling habe ich gefunden. Das ist das mit der Katze oder? Ich werd mal versuchen eine dll in c++ oder eine eigene inc zu machen für profan mit den Opengl befehlen. Gruß Dirk |
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Die Katze, genau.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#5 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.02.2009
Ort: Berlin
Beiträge: 226
|
Danke Frank!
Die "Katze" gibts unter http://dl.xprofan.com/?3167 zu laden ^^ , man findet den Thread z.B. indem man auf der Intro-Seite http://xprofan.com/ im Suchfeld einfach z.B. "scrolling" eingibt. (Hier ists auch dabei: http://xprofan.com/content.mx?codes&search=scroll ) Die oglhelper.inc war einzeln noch nicht veröffentlicht (auch wenn sie zu einzelnen Beispielen mitgeliefert ist), weil diese sich sozusagen noch unter ständiger Optimierung befindet. Beispielsweise kannst Du eine Version aus dem oglui-Paket laden http://dl.xprofan.com/?4681 bzw. http://xprofan.com/thread.core?t=7588 .
__________________
Programmieren für Anfänger. Geändert von iF_ (08.07.2009 um 13:55 Uhr) |
|
|
|
|
|
|
#6 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Drücke mal die Button "vorwärts" und "rückwärts".
Das Gelände könnte dein 1. Layer sein. Und darüber bingst du dein 2. Layer (Bäume) und darüber dein 3.Layer (Auto). Wenn du alle unterschiedlich bewegst, erkennst du sogar die täuschende Raumtiefe. mfg Code:
declare ende%
declare rquad!, wert!,rquad1!
Declare hWin&, hDlg1&, hDlg&
declare B1%,B2%,B3%,B0%
rquad!=-2
proc DrawGLScene
oGL("Clear")
oGL("Origin", rquad!, 0, -6)
oGL("Color", 0, 0, 1, 1)
oGL("Quad", 2, 2)
oGL("Origin", rquad!*1.3, 0, -5.9)
oGL("Color", 1, 0, 0, 1)
oGL("Quad", 1.5, 1.5)
oGL("Origin", rquad!*1.6, 0, -5.8)
oGL("Color", 1, 1, 0, 0)
oGL("Quad", 1, 1)
oGL("Show")
rquad! = rquad! + wert!
if rquad! > 2
rquad! = 2
endif
if rquad! < -2
rquad! = -2
endif
endproc
hWin& = @Create("Window", %hWnd, "Test1", 0, 0, 320, 200)
hDlg& = @Create("Dialog", hWin&, "Test2", 320, 200, 320, 200)
hDlg1& = @Create("Dialog", hWin&, "Test3", 0, 200, 320, 200)
B1% = @Create("Button",hDlg&,"vorwärts",020,020,100,030)
B2% = @Create("Button",hDlg&,"rückwärts",20,060,100,030)
B3% = @Create("Button",hDlg&,"ende",20,100,100,030)
B0% = Create("Button",hDlg&,"",0,0,0,0)
oGL("Init", hwin&, 0, 0, 0, 0)
oGL("PosMode", 1)
Ende% = 0
wert!=0
WhileNot ende%
sleep 1
If Getfocus(B1%)
wert!=wert!+0.005
setfocus(B0%)
elseIf Getfocus(B2%)
wert!=wert!-0.005
setfocus(B0%)
ElseIf @Clicked(B3%)
ende%=1
EndIf
DrawGLScene
StartPaint hDlg1&
DrawText 20,50,("rquad! = " + Format$("#####0' '",rquad!))
EndPaint
EndWhile
End
Geändert von profanfan (18.07.2009 um 20:02 Uhr) |
|
|
|
|
|
#7 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Der Code ist für den Anfang nicht schlecht. Vielleicht änderst du ihn nochmal, indem du Bitmaps anstelle der Quadrate setzt, bzw. den Flächen eine Bitmap zuweist.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Direct3D Problem NEUES PROBLEM | Bonser | Treiber-Forum | 3 | 28.11.2007 14:42 |
| Problem mit Game. Grafiktreiber Problem?!?! | Chillers | Hardware - Problemlösungen | 4 | 16.05.2006 16:13 |
| Counter Strike: Server Problem sowie Online Problem | Simon@Xp | Computerspiele | 4 | 10.04.2006 14:30 |
| Bildschirm friert ein - DirectX Problem - ATI-Problem | LudBri | Allgemein | 1 | 01.01.2006 13:02 |
| Problem (Keine Ahnung, welches Problem das ist) | Der_Gast | Hardware - Problemlösungen | 3 | 11.10.2003 18:17 |