Map Kollisionen und animierte Figuren...
Übersicht

maviBetreff: Map Kollisionen und animierte Figuren... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo...
Ich wollte euch fragen ob ihr mir helfen könnt mehrere Probleme zu beseitigen, denn ich zum einen möchte ich für meine Figur...ne Collsiionsabfrage machen, aber die haut irgendwie nciht hin und zum zweiten möchte ich ein Bild laden (16 Einzelbilder) woraus die Laufanimation der Figur besteht... MAIN Code: [AUSKLAPPEN] ;Map
Graphics 800,600,16,0 SetBuffer BackBuffer() File_map = OpenFile("map.dat") Dim map(24,18) For x=0 To 24 For y=0 To 18 map(x,y) = ReadByte(File_map) Next Next CloseFile File_map Include "var.bb" Include "functions.bb" Repeat DrawMap() key() collision() DrawHero() debug() WaitTimer timer Flip:Cls Until KeyHit(1):End Variablen: Code: [AUSKLAPPEN] ;Var.bb
Global timer = CreateTimer(60) Global gras = LoadImage("gras.bmp") Global wasser = LoadImage("wasser.bmp") Global char = LoadAnimImage("C:\Dokumente und Einstellungen\notebook\Eigene Dateien\BB\Ressources\rogue.png",32,48,0,15) Global px = 70 Global py = 100 Global move=1; MidHandle char MaskImage char, 255,0,128 Funktionen: Code: [AUSKLAPPEN] ;====================FUNCTIONS===========================
Function DrawMap() For x=0 To 24 For y=0 To 18 If map(x,y) = 0 Then DrawImage gras,x*32,y*32 EndIf If map(x,y) = 7 Then DrawImage wasser,x*32,y*32 EndIf Next Next End Function Function DrawHero() DrawImage char,px,py,0 End Function Function key() If move=1 Then If KeyDown(17) py=py-1 ElseIf KeyDown(30) px=px-1 ElseIf KeyDown(31) py=py+1 ElseIf KeyDown(32) px=px+1 EndIf EndIf End Function Function debug() Text 10,10, px Text 10,20, py Text 10,30, char_direction End Function Function collision() For x = 0 To 24 For y = 0 To 18 If map(x,y) < 0 Then move=0 EndIf Next Next End Function Die Funktion mit der animierten Figur hab ich rausgenommen, denn das hat nicht funktioniert, nur damit ihr wisst das ich das auch schon probiert habe und nicht irgendwelche leute suche, die meine arbeit vollrichten... |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi mavi,
ich habe von mir einen älteren post gefunden, in dem ich eine pixel by pixel kollision erkläre. Das dürfte dir den richten anstatz für mehr geben. Der code ist lauffähig! Post( https://www.blitzforum.de/foru...php?t=5286 ) erklärt prinzipell die Bewegung auf einer Tilemap Ich muss mich entschuldigen, leider hat der code nen bug: geht man genau an die ecken springt es manchmal seltsam. Wie gesagt.. "hier ein ansatz" Code: [AUSKLAPPEN] ;infos ;Verantwortlich für den kas= Dottakopf ;tile size = 32 ;map size 12x12 ;Pixel to Pixel bewegung Graphics 800,600,16,2 SetBuffer BackBuffer() timer = CreateTimer(60) ;globals Global hero_px = 64 Global hero_py = 64 Global hero_speed = 2 ;arry Dim tile_map(20,20) For y = 0 To 11 For x = 0 To 11 Read tile_map(x,y) Next Next ;//////////////////////////////////////////////////// MAIN LOOP \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Repeat Cls draw_map() update_hero() WaitTimer(timer) Flip Until KeyHit(1) ;//////////////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Function update_hero() ;ermittelt welche umliegenden tiles der spieler besetzt ty1 = Floor(hero_py/Float(32)) ;tile abgerundet ty2 = Ceil(hero_py/Float(32)) ;tile aufgerundet tx1 = Floor(hero_px/Float(32)) ;tile abgerundet tx2 = Ceil(hero_px/Float(32)) ;tile aufgerundet ;OBEN If KeyDown(200) Then If tile_map( tx1 , (hero_py-hero_speed) /32) = 0 And tile_map( tx2 , (hero_py-hero_speed) /32) = 0 Then hero_py = hero_py - hero_speed Else hero_py = hero_py + hero_speed hero_py = (hero_py/32)*32 End If End If ;UNTEN If KeyDown(208) Then If tile_map( tx1 , (hero_py+hero_speed)/32+1) = 0 And tile_map( tx2 , (hero_py+hero_speed)/32+1) = 0 Then hero_py = hero_py +hero_speed Else hero_py = hero_py - hero_speed hero_py = (hero_py/32+1)*32 End If End If ;links If KeyDown(203) Then If tile_map( (hero_px -hero_speed)/32 , ty1) = 0 And tile_map( (hero_px-hero_speed)/32 , ty2 ) = 0 Then hero_px = hero_px -hero_speed Else hero_px = hero_px+hero_speed hero_px = (hero_px/32)*32 End If End If ;rechts If KeyDown(205) Then If tile_map( (hero_px+hero_speed )/32+1 , ty1) = 0 And tile_map( (hero_px+hero_speed)/32+1 , ty2 ) = 0 hero_px = hero_px +hero_speed Else hero_px = hero_px - hero_speed hero_px = (hero_px/32+1)*32 End If End If ;hero malen Color 0,0,255:Rect hero_px,hero_py,32,32,1 End Function ;---------------------------------------------------------------------------------------------------------------------------- Function draw_map() Color 200,200,200 For x = 0 To 11 For y = 0 To 11 If tile_map(x,y)<>0 Then Rect x*32,y*32,32,32,tile_map(x,y) Next Next End Function ;---------------------------------------------------------------------------------------------------------------------------- .level Data 1,1,1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,1,0,0,1,0,0,0,1 Data 1,0,0,0,0,1,1,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1,0,1 Data 1,0,0,1,1,1,0,0,0,1,1,1 Data 1,0,0,0,0,1,0,0,0,1,0,1 Data 1,0,0,0,0,1,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1,1,1 gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
- Zuletzt bearbeitet von Dottakopf am Fr, Jan 22, 2010 14:10, insgesamt 3-mal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, normalerweise steht dein Spieler ja auf irgendeinem der Felder map(x,y). Das bekommst du durch SpielerX=Px/32 und SpielerY=PY/32 raus. Nun hast Du zwei Möglichkeiten:
Du kannst Du den Wert checken, den dieses Feld hat und darauf reagieren BlitzBasic: [AUSKLAPPEN] Select Map(SpielerX,SpielerY) Um zu verhindern, das er manche Felder betritt würde ich direkt in die Lauf-Funktion reinschreiben: (pY-1)/32 ) ist dabei das zukünfige Feld, dass den Schritt schon vorwegnimmt. BlitzBasic: [AUSKLAPPEN] Function key() Oder du könntest die Images die auf einem dieser Felder sind mit dem Image des Spielers auf Collision testen. Dabei müsstest du das Image "Grass" natürlich auslassen. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group