Kollisionskontrole

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

pirahni

Betreff: Kollisionskontrole

BeitragSo, März 30, 2008 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 31, 2008 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Apr 01, 2008 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Apr 01, 2008 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Apr 01, 2008 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 02, 2008 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
@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.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group