Kollision mit Gebäuden
Kollision mit Gebäuden
Hi Leute,
Also ich möchte das meine figur nicht durch gebäude hindurchlaufen kann.
(top-down perspektive)
If SpriteCollision(f1,x1,y1,f2,x2,y2)
Und weiter weiß ich nicht.
Wie könnte ich das machen?
PS: Wenn nicht unbedingt nötig bitte keinen Code posten sondern das prinzip erklären
			
			
									
									Also ich möchte das meine figur nicht durch gebäude hindurchlaufen kann.
(top-down perspektive)
If SpriteCollision(f1,x1,y1,f2,x2,y2)
Und weiter weiß ich nicht.
Wie könnte ich das machen?
PS: Wenn nicht unbedingt nötig bitte keinen Code posten sondern das prinzip erklären
Wer andern eine Grube gräbt... 
...hat ein Grubengrabgerät
http://plankton.hat-gar-keine-homepage.de/
						...hat ein Grubengrabgerät
http://plankton.hat-gar-keine-homepage.de/
- 
				DarkDragon
 - Beiträge: 6291
 - Registriert: 29.08.2004 08:37
 - Computerausstattung: Hoffentlich bald keine mehr
 - Kontaktdaten:
 
Naja, also zuerst mal prüfst du ja ob ne taste gedrückt wurde, dass sich der Spieler bewegen soll und wenn da nix im weg steht lässte ihn also an die neue Position laufen.
Wenn der spieler also 1 hoch laufen soll:
Ich habe das schon einigen erklärt:
			
			
									
									Wenn der spieler also 1 hoch laufen soll:
Code: Alles auswählen
If SpriteCollision(#PLAYER, X, Y-1, #JEDES_MÖGLICHE_GEBÄUDE, GebäudeX, GebäudeY) ;Wenn keine kollision ENTSTEHT...
  Y - 1 ;soll der Spieler wirklich dahin laufen
EndIfCode: Alles auswählen
InitSprite()
InitKeyboard()
Procedure Collision(x.f, y.f)
  Result = 0
  Restore Map
  For my=0 To 17
    For mx=0 To 24
      
      a.b
      Read a
      If a = 1
        If SpriteCollision(0, Int(x), Int(y), 1, mx*32, my*32)
          Result = 1
          Break 2
        EndIf
      EndIf
      
    Next
  Next
  ProcedureReturn Result
EndProcedure
OpenScreen(800, 600, 32, "Test")
CreateSprite(0, 32, 32)
StartDrawing(SpriteOutput(0))
Box(0, 0, 32, 32, RGB(255, 0, 0))
StopDrawing()
CreateSprite(1, 32, 32)
StartDrawing(SpriteOutput(1))
Box(0, 0, 32, 32, RGB(0, 0, 255))
StopDrawing()
#SPEED = 1.5
X.f = 800/2
Y.f = 600/2
SetFrameRate(20)
Repeat
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Up)
    If Collision(X, Y-#SPEED) = 0
      Y - #SPEED
    EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Down)
    If Collision(X, Y+#SPEED) = 0
      Y + #SPEED
    EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Left)
    If Collision(X-#SPEED, Y) = 0
      X - #SPEED
    EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Right)
    If Collision(X+#SPEED, Y) = 0
      X + #SPEED
    EndIf
  EndIf
  
  If KeyboardPushed(#PB_Key_Escape)
    Quit = 1
  EndIf
  
  ClearScreen(0, 0, 0)
  DisplaySprite(1, X, Y)
  
  Restore Map
  For my=0 To 17
    For mx=0 To 24
      
      a.b
      Read a
      If a = 1
        DisplaySprite(0, mx*32, my*32)
      EndIf
      
    Next
  Next
  FlipBuffers()
  
  Delay(10)
Until Quit = 1
End
DataSection
  Map:
  Data.b 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
  Data.b 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
EndDataSectionAngenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
						Re: Kollision mit Gebäuden
Vielen Dank, aber
			
			
									
									Plankton hat geschrieben: PS: Wenn nicht unbedingt nötig bitte keinen Code posten sondern das prinzip erklären
Wer andern eine Grube gräbt... 
...hat ein Grubengrabgerät
http://plankton.hat-gar-keine-homepage.de/
						...hat ein Grubengrabgerät
http://plankton.hat-gar-keine-homepage.de/
- 
				DarkDragon
 - Beiträge: 6291
 - Registriert: 29.08.2004 08:37
 - Computerausstattung: Hoffentlich bald keine mehr
 - Kontaktdaten:
 
Re: Kollision mit Gebäuden
Plankton hat geschrieben:Vielen Dank, aber
Plankton hat geschrieben: PS: Wenn nicht unbedingt nötig bitte keinen Code posten sondern das prinzip erklären
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
						Ich hätte es auch verstanden wenn du keinen Code gepostet hättest
			
			
									
									Wer andern eine Grube gräbt... 
...hat ein Grubengrabgerät
http://plankton.hat-gar-keine-homepage.de/
						...hat ein Grubengrabgerät
http://plankton.hat-gar-keine-homepage.de/
Geht sowas nicht auch mit einem 2d Array?
Also ich hab bis jetzt immer diesen benutzt, was ist den parktischer und/oder schneller?
			
			
									
									Also ich hab bis jetzt immer diesen benutzt, was ist den parktischer und/oder schneller?
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
- 
				DarkDragon
 - Beiträge: 6291
 - Registriert: 29.08.2004 08:37
 - Computerausstattung: Hoffentlich bald keine mehr
 - Kontaktdaten:
 
Natürlich geht das auch sobenpicco hat geschrieben:Geht sowas nicht auch mit einem 2d Array?
Also ich hab bis jetzt immer diesen benutzt, was ist den parktischer und/oder schneller?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.