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/
-
- 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
EndIf
Code: 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
EndDataSection
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.
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/
-
- 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.
-
- 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.