Winkel(?) Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Chris02

Betreff: Winkel(?) Problem

BeitragSa, März 25, 2006 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich bin dabei einen simplen break-out Clone zu programmieren.
Die Steine(40*20Pixel) werden mit vollgender Schleife eingezeichnet:
Code: [AUSKLAPPEN]

For y = 1 To 20
      For x = 1 To 20
         If Feld(x,y)=1
            DrawImage Stein,x*40-20,y*20
         EndIf
      Next
   Next

die Collision, hab ich mit follgender Schleife gemacht:
Code: [AUSKLAPPEN]

For y=1 To 20
      For x=1 To 20
         If Feld(x,y)=1
            If ImagesCollide(Ball,BallXpos,Ballypos,0,Stein,x*40-20,y*20,0)
               Feld(x,Y)=0
               If Ballxpos < x*40+20 And Ballxpos>x*40-20
                  If Ballypos>=y*20+20
                     Ballwinkel=360-Ballwinkel
                  EndIf
                  If Ballypos<=y*20
                     Ballwinkel=360-Ballwinkel
                  EndIf
                  Ballwinkel=180-Ballwinkel
               EndIf
            EndIf
         EndIf
      Next
   Next

Mein Problem ist, dass der Ball völlig konfus abprallt.
 

Dreamora

BeitragSa, März 25, 2006 1:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Komme bei deinem Codeversuch grad net draus, darum der allgemeine Weg wie man es bei Vertikalen / Horizontalen Wänden macht:
Code: [AUSKLAPPEN]


If VertikaleWand
  xGeschwindigkeit = -xGeschwindigkeit
elseif HorizontaleWand
  yGeschwindigkeit = -yGeschwindigkeit
endif


Es wird einfach der Geschwindigskeitswert für die entsprechende Richtung, die rechtwinklig zur Wand steht, invertiert.
Bei nicht vertikalen / horizontalen Wänden funktioniert es theoretisch gleich, mit dem Unterschied, dass du da effektiv die Normale der Oberfläche bestimmen musst, was bei vertikal / horizontal nicht nötig ist ( da [0, 1/-1] und [1/-1,0] ).

Hoffe das hilft dir.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Spikespine

BeitragSa, März 25, 2006 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm... normalerweise mache ich immer:
Code: [AUSKLAPPEN]
;kollision oben oder unten...
winkel = 360-winkel
;kollision rechts oder links
winkel = 180-winkel


bei mir gilt immer:
winkel = 0 : ball nach rechts
winkel = 90 : ball nach oben

d.h. jede runde
zu der x koordinate den kosinus des winkels addieren
der y koordinate den sinus des winkels subtrahieren
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group