[D3D] TileImage
Übersicht

![]() |
ToeBBetreff: [D3D] TileImage |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also da es ja keinen Befehl in Draw3D ginbt, für TimeImage, wollt ich mir selber eine Function schreiben... Das Funzt auch, nur wie kann ich das Bild, was aus dem Bildschirm rausläuft wieder nach vorne gesetzt ? (Ohne Arrays !)
Code: [AUSKLAPPEN] Function TileImage3D()
For xx = 0 To WIDTH/256 For yy = 0 To HEIGHT/256 DrawImage3D(BACK,(xx*256-WIDTH/2-SXPOS),(yy*256-HEIGHT/2+SYPOS)) Next Next End Function Erklärung : ![]() ![]() ![]() Wie mach ich das ? mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versteh zwar nicht genau, was du machen willst, aber ich würde das hier schreiben:
Code: [AUSKLAPPEN] Function TileImage3D() For xx = 0 To WIDTH step 256 For yy = 0 To HEIGHT step 256 DrawImage3D(BACK,xx-SX,yy-SY)) Next Next End Function |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, aber dann wird ja auch nicht das Bild auch nicht getiled wie bei TileImage !
Ich will wissen, wie ich das mahcne kann, das das Bild, wenn es z.b.nach links aus dem Feld "rutscht", das es dann wieder auf 0 gesetzt wird, damit man denkt, man befindet sich auf einer unedlichen ebene... mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
sry blicke bei den Variablen nicht so durch, aber ich hätte da eine Idee. Du musst sie nur noch auf dein Spiel übertragen. X=X Mod Aufloesung_X wenn X größer ist als deine X Auflösung (also ausm Bildschirm ist) dann wird sie an der anderen Seite gemalt. ^^ X = Die Kordinate eines Tiles Viele Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst es auch sehr viel schneller und einfacher mit DrawRect3D![]() Hier ein Beispielcode mit scrolling: Code: [AUSKLAPPEN] Graphics3D 800,600,0,2
SetBuffer BackBuffer() Local Timer=CreateTimer(60) Local Camera=CreateCamera() CameraClsColor Camera,96,80,64 Include "Includes\Draw3D.bb" DrawInit3D(Camera) Origin3D(800,600) Local Image=LoadImage3D("Data\Image.png",2,2,0) Local X,Y While Not KeyHit(1) DrawRect3D(Image,0,0,MouseX3D,-MouseY3D,800,600) WaitTimer(Timer) RenderWorld Clear3D() Flip 0 Wend End Mit anderen Worten: Die doppelt verschahtelten Schleifen werden überflüssig und man schreibt nur noch: Code: [AUSKLAPPEN] DrawRect3D(Image,0,0,XScroll,YScroll,Breite,Höhe)
Es wird also immer nur ein Quad (zwei Triangles) eingezeichnet, der Rest geht dann über UV-Koordination aus der Draw3D. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay danke !!
Das habe ich gesucht ![]() mfg ToeB Edit : Ich hab nochmal ne Frage : Bei meinem Programm läuft die Figur jetzt die Ganze zeit mittem im Bildschirm (Pos 0|0). Wie kann ich die Absolute Raumkoordinate anhand der ScrollX und ScrollY Variablen herausfinden ? Also dass ich weiß, an welcher Position der Spieler sich in der MAP befinden würde... mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So lange keine Skallierung beim einzeichnen angewendet wird, ist es immer genau entgegengesetzt der Mapposition. Also:
XSpielerPos = -XScroll Allerdings ist hier die Y-Achse gespiegelt, da die UV-Koordinaten dann wieder wie bei 2D angeordnet sind. Also Y=0 ist Oben und nicht unten wie bei 3D. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also irgentwie stimmt das nicht so ganz :
Code: [AUSKLAPPEN] ;// Schleife :
Repeat ;// STEUERUNG: If KeyDown(17) Then SYPOS = SYPOS- 1.0*SPEED If KeyDown(31) Then SYPOS = SYPOS+ 1.0*SPEED If KeyDown(30) Then SXPOS = SXPOS- 1.0*SPEED If KeyDown(32) Then SXPOS = SXPOS+ 1.0*SPEED ;// MALEN TileImage3D() DrawImage3D SMILE,0,0,0,0,2 ;Normaler DrawImage3D SMILE,xPos()-SXPOS,yPos()-SYPOS,0,0,4 ;Auf der MAP WaitTimer( TIMER ) RenderWorld( ) Clear3D() Text 1,20,"YPOS :"+(Y-SYPOS)+"/"+SYPOS Text 1,1,"XPOS :"+(X)+"/"+SXPOS Flip Until KeyHit(1) ;// Schleifen Ende End ;//Programm Ende ;//FUNCTIONEN : Function TileImage3D() DrawRect3D(BACK,0,0,SXPOS,SYPOS,WIDTH,HEIGHT) End Function Function XPos#() Local xx# = -SXPOS Return xx End Function Function YPos#() Local yy# = SYPOS Return yy End Function Was habe ich jetzt wieder falsch verstanden ^^ ? mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die UV-Koordinaten sind so wie bei 2D auch. Also in der Y-Achse gespiegelt. Daher muß dieses auch so angegeben werden. Beispiel:
DrawRect3D(Back,0,0,SXPos,-SYPos,WIDTH,HEIGHT) Der Rest sollte wie gehabt sein. Allerdings geht man mit der Taste ''W'' nach Oben und ''S'' nach unten. Daher sollte das hier auch so angegeben werden. Also: If KeyDown(17) Then SYPos = SYPos + 1.0 * Speed If KeyDown(31) Then SYPos = SYPos - 1.0 * Speed - - - Wenn die Spielerposition in der Mitte von Bildschirm ist, dann hat man doch das Zeil erreicht, da sich ja die Map unter einem bewegt. - - - In der Regel werden nur KONSTANTE=1 komplett groß geschrieben. Variable=1 dagegen ''normal'' bzw. bei (von mir aus) Java ichBin=1, wobei meine Vorzüge eher nach IchBin=1 unter Blitz tendieren. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja okay das weiß ich auch.... Soweit war ich ja auch schon nur wenn ich schreibe :
Code: [AUSKLAPPEN] Function XPos#()
Local xx# = -SXPOS Return xx End Function Function YPos#() Local yy# = SYPOS Return yy End Function Und dann Code: [AUSKLAPPEN] DrawImage3D SMILE,xPos()-SXPOS,yPos()+SYPOS,0,0,4 ;Auf der MAP
Dann ist das Bild immer doppelt so schnell wie das in der Mitte.... Ich blik net mehr durch ![]() --- Die Varaiblen schreib ich eigl. immer so groß... Kann ich besser mit umgehen... --- mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich kann dir leider nicht 100%ig helfen, da ich nicht genau weiß was du vor hast. Ich gehe aber davon aus, dass du einfach ein Hintergrundbild als 'Map' rumscrollen willst. Auf dieser kann man natürlich weitere Tiles einzeichnen. Ich habe allerdings erstmal ein Beispiel erstellt, wie man so etwas wie ein Paralaxscrolling erstellen kann. Einfach mit dreimal DrawRect3D. Der folgende Code funktioniert von selbst, wenn man ihn in das Verzeichnis rein kopiert, wo auch die Draw3D-Beispieldateien liegen.
Code: [AUSKLAPPEN] Const WIDTH=800
Const HEIGHT=600 Graphics3D 800,600,0,2 SetBuffer BackBuffer() Local Timer=CreateTimer(60) Local Camera=CreateCamera() CameraClsColor Camera,80,80,64 Include "Includes\Draw3D.bb" DrawInit3D(Camera) Origin3D(WIDTH,HEIGHT) Local Back=LoadImage3D("Data\Blitz3D.png",2,2,0) Local Smile=LoadImage3D("Data\Schiff.png",2,2,0) Local Speed#=5 Local SXPos#=100 Local SYPos#=100 Local Winkel While Not KeyHit(1) Winkel=Winkel+1 If KeyDown(30) Then SXPos = SXPos - 1.0 * Speed If KeyDown(32) Then SXPos = SXPos + 1.0 * Speed If KeyDown(17) Then SYPos = SYPos + 1.0 * Speed If KeyDown(31) Then SYPos = SYPos - 1.0 * Speed DrawRect3D(Back,0,0,SXPos/4.0,-SYPos/4.0,WIDTH*4,HEIGHT*4,0,0,0.25) DrawRect3D(Back,0,0,SXPos/2.0,-SYPos/2.0,WIDTH*2,HEIGHT*2,0,0,0.50) DrawRect3D(Back,0,0,SXPos/1.0,-SYPos/1.0,WIDTH*1,HEIGHT*1,0,0,1.00) DrawImage3D(Smile,0,0,0,Winkel,1) ;Spieler (AUF DER MAP) WaitTimer(Timer) RenderWorld Clear3D() Text 20,20,"Die tatsächliche Mapposition:" Text 20,40,"X = "+SXPos Text 20,60,"Y = "+SYPos Flip 0 Wend End Nur so als Tipp: Die Mapposition vom Player sollte die Zahl sein, die bei der Tastaturabfrage manipuliert wird. Der Rest - wie Mapscrolling - sollte dann entsprechend umgerechnet werden. Somit bleibt die Spielfigur immer in der Mitte vom Bildschirm, da sich aber der Hintergrund bewegt, bewegt sich praktisch auch die Figur auf der Map. Das Umrechnen über DrawRect3D geschieht lediglich mit der Negation der Y-Achse aus der Spieler-Y-Position. - - - Weitere Tipps: Funktionen sind gut, aber nicht zu empfehlen, wenn in diesen nur eine Zeile Code drin steht. Man sollte Funktionen erst dann anwenden, wenn häufig immer wiederkehrende Sachen benötigt werden und entsprechende Anzahl von Codezeilen vorhanden sind. Das gilt nicht, wenn man einen Wrapper schreibt. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay danke erstmal.. Ich stand heute nur so aufem Schlauch... Muss das heiße wetter sein ![]() Ich habe nämlich festgestllt, das meine Functionen richtig waren, ich das nur nicht erkannt habe... Man muss halt manchmal um die Ecke denken ![]() Danke aber das du für mich extra einen Code geschrieben hast !Sehr Nett von dir ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group