ImageCollision?
Übersicht

![]() |
s_m_wBetreff: ImageCollision? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich beschäftige mich im moment mit kolisionen etc., aber wie bekomme ich es hin, das ich dafür keine bilder brauche, sondern Rect, Oval etc dafür benutzen kann? |
||
totonak5 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oval geht nicht
rect: rectsoverlap |
||
Just for Fun!
Jesus loves U! |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei Rechtecken recht einfach via ql:RectsOverlap, wenn ein Oval ins Spiel kommt wirds etwas aufwendiger. Verändert sich das Oval nicht laufend könnte man auf ein temporäres Image ausweichen (ql:ImageBuffer). Mehr fällt mir für Ovale auf die Schnelle nicht ein ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe irgendwas gesehen mit CreateImage() und SetBuffer ImageBuffer(Imagename), was ist das eigentlich? | ||
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ql:createimage erstellt ein leeres Bild ohne Farben oder Sonstiges.
ql:setbuffer ql:imagebuffer stellt alle Zeichenbefehle darauf ein, auf dieses Bild zu wirken. Mit CreateImage() und Imagebuffer kann man also ein Bild im Programm erstellen. |
||
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
könnte man dann nicht ein Bild im rpogramm malen und das dann mit ImageCollide Überprüfen?
[edit] habs gefunden: Code: [AUSKLAPPEN] GRAPHICS 640,480,0,1
gfxCircle=CREATEIMAGE(50,50) SETBUFFER IMAGEBUFFER(gfxCircle) COLOR 255,0,0 OVAL 10,10,30,30,1 SETBUFFER BACKBUFFER() Color 0,0,255 hotX=RND(50,610) hotY=RND(50,430) hotW=RND(20,100) hotH=RND(20,100) REPEAT circleX=MOUSEX() circleY=MOUSEY() CLS RECT hotX,hotY,hotW,hotH,0 DRAWIMAGE gfxCircle,circleX,circleY FLIP UNTIL IMAGERECTCOLLIDE (gfxCircle,circleX,circleY,0,hotX,hotY,hotW,hotH) TEXT 0,0, "Kollision! Maustaste drücken" FLIP WAITMOUSE() ENDGRAPHICS das ist genau das was ich brauche |
||
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich bin schon nen schritt weiter und hab das mit den kollisionen fertig, da ich aber keinen neuen thread aufmachen will, mach ichs hier:
Code: [AUSKLAPPEN] Global Ball, BallY=300, BallX=190, BallXDir=-1, BallYDir=-1
Global fps,fps1,fpstimer Graphics 640,480 SetBuffer BackBuffer() Ball=CreateImage(40,40) SetBuffer ImageBuffer(Ball) Oval 10,10,20,20 SetBuffer BackBuffer() While Not KeyHit(1) Cls If MilliSecs()-fpstimer>1000 Then fps1=fps fps=0 fpstimer=MilliSecs() Else Main() fps=fps+1 End If Text 5,5,"FPS: "+fps1 Flip Wend Function Main() ;Haupschleife Line 2,18,638,18 ;Ein bisschen hilfe Text 430,5,"MY= "+MouseY() Text 280,5,"BXDir= "+BallXDir Text 140,5,"BYDir= "+BallYDir ;Punkteanzeige Text 505,5,"Points: " Text 580,5,"111110" MY= MouseY() ;Schläger If MY < 70 Then MY = 70 If MY > 430 Then MY = 430 Rect 10,MY-50,10,100 ;Andrer schläger (nur zum gut aussehen) Rect 620,190,10,100 ;Ball berechnen If ImageRectCollide (Ball, BallX, BallY, 0, 10,MY-50,10,100) Then BallXDir = -BallXDir End If If ImageRectCollide (Ball, BallX, BallY, 0, 0,18,640,2) Then BallYDir = -BallYDir End If If ImageRectCollide (Ball, BallX, BallY, 0, 0,479,640,2) Then BallYDir = -BallYDir End If If ImageRectCollide (Ball, BallX, BallY, 0, 639,0,2,480) Then ; eigentlich punkt BallXDir = -BallXDir End If If ImageRectCollide (Ball, BallX, BallY, 0, 1,0,2,480) Then ; eigentlich punkt BallXDir = -BallXDir End If BallX= BallX+BallXDir BallY= BallY+BallYDir DrawImage Ball, BallX, BallY End Function Wie sollte ich den Ball am besten bewegen damit ich a) Geschwindikeit kontrollieren kann und b) Ein paar abweicheungen auf die Y geschwindikeit bekomme? |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würde die bewegung mit den trigonometrischen funktionen sinus und cosinus machen!
also ballx=ballx+Cos(winkeldesballes)*ballspeed bally=bally+Sin(winkeldesballes)*ballspeed Glaub es geht so ![]() und was meintest du mit "paar abweichungen auf die y-achse"?? |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Damit sich das Spiel nicht in einer Endlosschleife verfängt wenn der Ball ständig gleich fliegt. Das mit Sin und COs habe ich mir auch überlegt, nur ich denke mir, so geht es auch und ein zu großes projekt soll das nicht werden. | ||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
das verändert nur paar zeilen ![]() wieso soll sich das spiel verfangen, wenn der ball immer gleich fliegt?? ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hatte das glaubeich mal im original (Ka woher ich das hatte?), Der Gegner (KI) steuert nach dem y wert des balles, Ich bleibe in einer ecke und der Ball fliegt ständgi die Selbe laufbahn, da das zeimlich eintönig dann ist, können ein paar abweichungen ,auch wenn nur ein paar grad, gut sein. | ||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
aso ^^
ja da würde ich leicht unregelmäßige abprälle bei den spielern machen also wenn du dir einen schläger so vorstellst: --------------------------Schläger----------------------------------- ------------------------XXXXXXXXX--------------------------------- Dass links nicht der selbe Abprallwinkel ist, wie wenn er rechts aufprallen würde ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
s_m_w |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das meine ich, aber im moment habe ich es so:
Code: [AUSKLAPPEN] X X X X X X X wenn der Ball von X <- Bewegt sich noch nicht /\__ unten aufriftt, prallt er nicht ab, sondern rutscht den schläger entlang nach oben [edit] das forum zerhaut alles ![]() [edit2] so |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm...mach das mal so:
du speicherst den mittelpunkt des schlägers als 2 variablen mSchlaegerX und mSchlaegerY Wenn der Ball nun kollidiert , dann musst du den winkel zwischen dem Punkt mSchlaegerX,mSchlagerY und dem Punkt ballX und ballY herausfinden (da gibts spezielle funktionen) und ballwinkel=dieserwinkel+180 wie du siehst musst du nun mit trigonometrie arbeiten ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
...Vorher aber BallX und BallY in eine Variable sichern bevor diese geändert werden. Ansonsten kann es in selten Fällen zu Rundungsfehlern kommen, die dazu führen das sich er Ball in einer Kollisionsfläche verfängt. Nach einer Kollision wird dann die alte gesicherte Position der aktuellen übergeben und die neuen Winkel mit eingefügt... | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group