Tile Engine: Spielfigur nur 1/2 Tile bewegen
Übersicht

![]() |
4pacBetreff: Tile Engine: Spielfigur nur 1/2 Tile bewegen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi liebe Coderz!
Ich bräuchte mal einen Ansatz für die Tile-Engine, die ich gerade bastele. Ich hab mit Tile Engines noch nichts gemacht, aber der Ansatz erscheint mir an sich recht leicht zu verstehen. Also hab ich mir das Pacman-Framework aus Rene Meyers letztem BB-Buch angeschaut ("pac4.bb"), ein Bisschen damit herumprobiert und es an mehreren Enden aufgebohrt und umgebogen nach meinen Bedürfnissen. Da mir der Code durch und durch und durch verständlich ist, habe ich keine Sorge, ihn weitestgehend zu übernehmen, er wird im Verlauf des Projektes (erfahrungsgemäß) ohnehin soweit umgebogen, daß am Ende von Original kaum noch was über ist. Eine Sache will mir allerdings nicht einleuchten, und zwar - wie bekomme ich es hin, daß sich der Spieler nicht immer ein ganzes Tile weiterbewegt, sondern nur ein halbes, oder gar nur ein Viertel pro Flip? Ist in Rene´s Buch leider nur ganz ganz grob angerissen (da steht halt in etwa, daß es geht, indem man Zwischenframes einbaut), und ich selbst habe gestern den ganzen Abend dran rumgeschraubt und nur Mist, bestenfalls Belustigendes herausbekommen. War auch mehr Try and Error, die Grundidee fehlt. Kann mir jemand was von Euch dazu sagen / posten? Grüße, Thomas |
||
![]() |
Slayer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm, ich hab das bei OutbreakX so gemacht das nur die sachen im Hintergrund und die blöcke in der Tileengine laufen.
bzw. nur der start punkt vom Hero in der engine ist. Danach steuer ich Ihn ganz normal pixel für pixel dorthin wo er soll. Die kollision ist dan wieder in der Tileengine/for next schleife als imagesoverlap drin und wenn die erst aktiviert ist prüfe ich auf pixelkollision mit imagescollide. Ist ein bisschen blöd zu beschreiben aber ich hoffe Du kappierst was ich meine ![]() Ansonsten schreib ich heut abens mal ein beispiel. Cu, Fabio |
||
AMD2500XP, SB5.1, DX9, 512MB DDR333,
XPPro SP1a,ATI 9800SE 256bit 128MB,B3B, B+ immer die neue Version |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ungefähr?
Code: [AUSKLAPPEN] If keydown (200) then AktY = -1
If keydown (208) then AktY = 1 if keydown (203) then AktX = -1 if keydown (205) then AktX = 1 X = X + AktX Y = Y + AktY if Ceil#(X/32) = Floor#(X/32) aktX=0 if Ceil#(Y/32) = Floor#(Y/32) aktY=0 drawimage Pacman,X,Y |
||
between angels and insects |
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du zeichnest die Figur an die Position entspechend der Koordinate + "PixelVerschieberWert X und Y".
Die Figur soll das alte Feld offiziell nicht verlassen, solange das neue Feld nicht ganz erreicht ist. Die Verschiebervariable wird alle ca. 250 Millisecs um 1 erhöht (auch mit Minus Vorzeichen) und wenn es sagen wir 32 (pixel) ist, dann wird das neue Feld offiziell erreicht, das alte freigegeben und die PixelVerschieber Variablen auf Null zurückgesetzt. Das ist eigentlich so ähnlich wie beim "pixelweise" Scrollen. |
||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich kenn das Buch von Renee nicht,
*geizigbin* aber ich mach das auch so ähnlich wie Slayer. Die Tileengine ist zum scrollen, und dient als Map für die Koordinaten. Ich prüf ob die Spielfigur das nächste Tile betreten darf, und bewege sie dann Pixel für Pixel dort hin. |
||
solitaire |
![]() |
4pac |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm... ![]() Code: [AUSKLAPPEN] ; simple tile engine
Const zeilenzahl = 30 Const spaltenzahl = 30 Const tile_size = 24 Graphics 1024,768,16,2 timer = CreateTimer(20) tile_way = LoadImage("gfx/tile_way.png") tile_noway = LoadImage("gfx/tile_noway.png") playerpic = LoadImage("gfx/player.png") enemypic = LoadImage("gfx/enemy.png") ; read level from hard drive Dim Level$(zeilenzahl,spaltenzahl) leveldatei = ReadFile("level1.dat") For Zeile=0 To (zeilenzahl-1) A$ = ReadLine(leveldatei) For Spalte=0 To (spaltenzahl-1) Level$(Zeile,Spalte) = Mid$(A$,Spalte+1,1) If Level$(Zeile,Spalte) = "S" Then SpielerStartS = Spalte SpielerStartZ = Zeile EndIf If Level$(Zeile,Spalte) = "G" Then GegnerStartS = Spalte GegnerStartZ = Zeile EndIf Next Next CloseFile leveldatei leben = 5 ; main loop ----------------------------------------------------------- Repeat ; draw level For Zeile=0 To (zeilenzahl-1) For Spalte=0 To (spaltenzahl-1) Select Level$(Zeile,Spalte) Case "1" DrawImage tile_way, Spalte*tile_size, Zeile*tile_size Case " " DrawImage tile_noway, Spalte*tile_size, Zeile*tile_size Case "S" DrawImage tile_way, Spalte*tile_size, Zeile*tile_size DrawImage playerpic, Spalte*tile_size, Zeile*tile_size SpielerS = Spalte SpielerZ = Zeile Case "G" DrawImage tile_way, Spalte*tile_size, Zeile*tile_size DrawImage enemypic, Spalte*tile_size, Zeile*tile_size GegnerS = Spalte GegnerZ = Zeile End Select Next Next Flip ; move player If KeyDown(203) And ( Level$(SpielerZ,SpielerS-1) <> "1" ) Then Level$(SpielerZ, SpielerS) = " " SpielerS = SpielerS - 1 Level$(SpielerZ, SpielerS) = "S" EndIf If KeyDown(205) And ( Level$(SpielerZ,SpielerS+1) <> "1" ) Then Level$(SpielerZ, SpielerS) = " " SpielerS = SpielerS + 1 Level$(SpielerZ, SpielerS) = "S" EndIf If KeyDown(200) And ( Level$(SpielerZ-1,SpielerS) <> "1" ) Then Level$(SpielerZ, SpielerS) = " " SpielerZ = SpielerZ - 1 Level$(SpielerZ, SpielerS) = "S" EndIf If KeyDown(208) And ( Level$(SpielerZ+1,SpielerS) <> "1" ) Then Level$(SpielerZ, SpielerS) = " " SpielerZ = SpielerZ + 1 Level$(SpielerZ, SpielerS) = "S" EndIf WaitTimer timer Until KeyHit(1) ; main loop end ------------------------------------------------------- End ; program end |
||
![]() |
Slayer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab nu kurz zeit, Arbeit Arbeit....
Die abfrage muss in der for schleife statfinden bevor Du zeichnest. |
||
AMD2500XP, SB5.1, DX9, 512MB DDR333,
XPPro SP1a,ATI 9800SE 256bit 128MB,B3B, B+ immer die neue Version |
![]() |
4pac |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Slayer - heißt das, ich frage weiter unten in der Schleife die Cursortasten ab, und erst beim nächsten Schleifendurchlauf wird oben gecheckt, ob dies zu einer Kollision geführt hat, und wenn ja, werden die Koordinaten des Spielers wieder zurückgesetzt auf den Stand von vor der Tastaturabfrage? ![]() |
||
![]() |
Slayer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, im noch beim Malochen ![]() Ich mach das immer so, Steuerung() Tile berechnen, Kollisionen, zeichnen() So verhindere ich das ein Bild in das Andere, 1,2,3.. pixel eintaucht und dann wieder zurück springt. Das würde Passiern wenn du zuerst zeichnest und dann kollision überprüfst. Die steuerung könnte aber auch erst nach dem zeichnen gemacht werden, wichtig ist eigendlich nur das die kollision vorher ist. las mich aber gern eines besseren belehren. |
||
AMD2500XP, SB5.1, DX9, 512MB DDR333,
XPPro SP1a,ATI 9800SE 256bit 128MB,B3B, B+ immer die neue Version |
![]() |
4pac |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi liebe Coderz,
danke für Eure Gedankenanstöße. Ich habe nochmal eine Nacht drüber geschlafen und weiß jetzt glaube ich, wie ich das angehen muss. Ich werd´s nochmal neu schreiben. Grüße, Thomas |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group