ImageCollision?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

s_m_w

Betreff: ImageCollision?

BeitragDo, Feb 16, 2006 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 16, 2006 23:54
Antworten mit Zitat
Benutzer-Profile anzeigen
oval geht nicht
rect: rectsoverlap
Just for Fun!
Jesus loves U!

Hubsi

BeitragDo, Feb 16, 2006 23:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

s_m_w

BeitragFr, Feb 17, 2006 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe irgendwas gesehen mit CreateImage() und SetBuffer ImageBuffer(Imagename), was ist das eigentlich?
 

HW

BeitragFr, Feb 17, 2006 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 17, 2006 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 17, 2006 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 17, 2006 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

und was meintest du mit "paar abweichungen auf die y-achse"??
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

s_m_w

BeitragFr, Feb 17, 2006 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 17, 2006 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
das verändert nur paar zeilen Wink

wieso soll sich das spiel verfangen, wenn der ball immer gleich fliegt?? Shocked
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

s_m_w

BeitragFr, Feb 17, 2006 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 17, 2006 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

s_m_w

BeitragFr, Feb 17, 2006 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad
[edit2] so

Kryan

BeitragFr, Feb 17, 2006 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Feb 17, 2006 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
...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...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group