Kollisionskontrole
Übersicht

![]() |
pirahniBetreff: Kollisionskontrole |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, ich habe 2 Bilder und sobald die sich beim nächsten Schritt berühren würden soll das eine(eine Kugel) dem anderen(Landschaft aus vierecken) ausweichen. Die Bahn der Kugel kann man per Maus festlegen.
Hat nun jemand eine Formel die es der Kugel ermöglicht immer auszuweichen? Hier mein Code: [AUSKLAPPEN] Graphics 640,480,16,2 SeedRnd MilliSecs() SetBuffer BackBuffer() pic=CreateImage(640,480) SetBuffer ImageBuffer(pic) For i=0 To 10 Rect Rand(540),Rand(380),100,100 Next kug=CreateImage(10,10) SetBuffer ImageBuffer(kug) For i=0 To 10 Oval 0,0,10,10 Next SetBuffer BackBuffer() DrawImage pic,0,0 Flip Const Punktzahl=5 Dim way(Punktzahl*2) For i=1 To Punktzahl WaitMouse() way(i)=MouseX() way(i+punktzahl)=MouseY() Next For i=1 To punktzahl Repeat Cls Plot way(i),way(i+Punktzahl) w#=ATan2(X#-way(i),Y#-way(i+punktzahl)) If ImagesCollide(kug,X#-Sin(w#),Y#-Cos(w#),0,pic,0,0,0) Then ///////An der Stelle soll ausgewichen werden\\\\\\\ EndIf X#=X#-Sin(w#) Y#=Y#-Cos(w#) Oval X#,Y#,5,5 DrawImage pic,0,0 Flip Until (X#<way(i)+5) And (Y#<way(i+punktzahl)+5) And (X#>way(i)-5) And (Y#>way(i+punktzahl)-5) Next Wäre über jede Hilfe dankbar. |
||
Leicht verständliche Informatiktutorials:
http://www.youtube.com/VascoLange |
sdjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo pirahni!
abprallen der kugel an einer horizontalen fläche ist: yspeed#=-yspeed# bzw w#=w#-180 wenn du auch den winkel bestimmen willst (was nicht so einfach ist bei einer zufälligen map): (eigendlich die selbe formel wie oben: einfallwinkel=ausfallwinkel): w#=w#-2*a wobei a der winkel des untergrund ist. oben ist a=90° also 180. |
||
![]() |
pirahni |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke. und wie ermittel ich jetzt a? a könnte ja z.B. auch mal 32° sein. | ||
Leicht verständliche Informatiktutorials:
http://www.youtube.com/VascoLange |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meinst du mit Ausweichen, den nächsten Wegpunkt zu erreichen ohne die Map zu berühren? Das hat nämlich herzlich wenig mit Einfalls- und Ausfallswinkel zu tun. | ||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würde dir gerne helfen, aber habe 0peil was du willst.
Mach doch einfach ne Skizze und stell sie hier rein. Dann kann man dir silcher Hilfe geben! Viele Grüße INtel ViiV Quad-Core |
||
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. |
sdjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@SpionAtom: Ich hab das mal so geraten ^^.
@piranhi: wenn du mit Vektoren, also Veränderung in x und y-Richtung arbeitest, dann hilft ATan2(). Geht wie folgt: Code: [AUSKLAPPEN] posx#=posx#+speedx# posy#=posy#+speedy# w#=ATan2(speedx#,speedy#) um dann den neu berechneten winkel zurück zu speed# zu berechnen: Code: [AUSKLAPPEN] ... w#=ATan2(speedx#,speedy#) gspeed#=sqr(speedx#^2+speedy#^2) ;wieder ein phythagoras ^^ speedx#=cos(w#)*gspeed# speedy#=sin(w#)*gspeed# du kannst aber auch deine bewegung direkt mit winkeln berechnen: Code: [AUSKLAPPEN] w#=32 gspeed#=2.5 posx#=posx#+sin(w#)*gspeed# posy#=posy#+cos(w#)*gspeed# ist, wenn du zum Beispiel Rennspiele programmierst, einfacher, da du so die Geschwindigkeit allein mit der Variable gspeed# anpassen kannst. Ich hoffe, dass die Trigonometrie stimmt. Mark hat die ja so geändert, dass Spielprogrammierung einfacher ist; d.h. Sin und Cos drehen in die andere Richtung und fangen bei 90° an. Probier es am besten aus. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group