Innerhalb des Kreises oder außerhalb?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: Innerhalb des Kreises oder außerhalb?

BeitragSa, Jun 09, 2007 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
HI Blitzer !

Wie es der Titel schon verrät, suche ich eine Lösung mit der ich prüfen kann, ob ein Spieler in einen Kreis oder daneben klickt.

Ich hab jetzt mal den Mittelpunkt jedes Kreise berechnet, so und nun müßte ich eigentlich nur noch prüfen, ob sich die maus bei mausklick innerhalb des Kreisradiuses befindet. Aber wie mache ich die ? Ich bin zu blöde Laughing

Des Weiterem befürchte ich, dass diese Abfrage nie wahr werden könnte, weil eigentlich nur ein Kreis getroffen(geklickt) werden kann und somit nicht im radius eines anderen liegt.

Zusammen gefasst:
Ich hätte gerne ein Hilfestellung bei der Distanzprüfung vom Mittelpunkt, bis zu Kreislinie.

Hier ist der aktuelle Standpunkt:
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

;globals
Global create_counter
Global mx,my


;types
Type ring
 Field r_x
 Field r_y
 Field r_radius
 Field r_mode
 Field r_mitte_x
 Field r_mitte_y
 Field r_area
End Type


;main---------------------------------
Repeat
Cls

 mouse_update()

 ring_create()
 ring_update()


Flip
Until KeyHit(1)
;--------------------------------------


;funktionen
Function mouse_update()

mx = MouseX()
my = MouseY()


End Function


Function ring_create()

  create_counter = create_counter +1

      If create_counter = 15 Then
         create_counter = 0

           info.ring = New ring
            info\r_x = Rnd(0,700)
            info\r_y = Rnd(0,500)
            info\r_radius = 4
            info\r_mode = 0
            info\r_mitte_x = info\r_x + 2
            info\r_mitte_y = info\r_y - 2
           
      End If

End Function


Function ring_update()


     For info.ring = Each ring
           
             ;neuen radius festlegen
             If info\r_mode = 0 Then
                  info\r_radius = info\r_radius +1
             ElseIf info\r_mode = 1 Then
                   info\r_radius = info\r_radius -1
             End If
   
              ;kreis erstellen
              Oval info\r_x,info\r_y,info\r_radius,info\r_radius,0
           
          ;modus wechseln
          If info\r_radius > 100 Then info\r_mode = 1

            ;mittelpunkts berechnung
            info\r_mitte_x = info\r_x + (info\r_radius / 2)
            info\r_mitte_y = info\r_y + (info\r_radius / 2)

            Plot info\r_mitte_x,info\r_mitte_y ; zeigt Mittelpunkt


           If info\r_radius < 2  Then Delete info.ring

  Next



End Function


mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

ChaosCoder

BeitragSa, Jun 09, 2007 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If MouseHit(1)
   For info.ring = Each ring
      if((mx-ring\r_mitte_x)^2+(my-ring\r_mitte_y)^2)<ring\radius
         ;Der User hat in den Kreis geklickt!
      endif
   next
endif


Viel Spaß, klappt auch wenn sich 2 Kreise überlagern, dann wird das was du machen willst mit den beiden kreisen oder mehreren kreisen gemacht.

PS: Satz des Pythagoras ist der Begriff dieses Wunders^^

MfG
Chaos
Projekte: Geolaria | aNemy
Webseite: chaosspace.de

darth

BeitragSa, Jun 09, 2007 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
soviel ich sehe fehlt da noch n sqr :S
abstand zu einem punkt:
sqr((Xmitte-Xpos)^2+(Ymitte-Ypos)^2))
und dieser muss kleiner sein als der radius.
Diese Signatur ist leer.

Dottakopf

BeitragSa, Jun 09, 2007 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, dasss ich jetzt erst zurück schreibe .... musste kurz mal weg.

Ok danke für deine Hilfe ! Jedoch funtz es noch nicht so wie es mir vorgestellt hatte. Ich kann zwar den kreis dann deleten, doch nur wenn ich ihn genau in der mitte erwische.

Vorab ich benutze B3D (demo) :
Ich weis jetzt nicht ob das so gewollt wahr aber bb nimmt diese zeile nicht an.
Code: [AUSKLAPPEN]

if((mx-ring\r_mitte_x)^2+(my-ring\r_mitte_y)^2)<ring\radius


So hab ich es dan zum laufen gebracht :
Code: [AUSKLAPPEN]

If((mx-info\r_mitte_x)^2+(my-info\r_mitte_y)^2)<info\r_radius


Hab ich das falsch umgesetzt ?

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Dottakopf

BeitragSa, Jun 09, 2007 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
den letzten post hab ich nicht gesehen , also habs ich so einbaut:
Code: [AUSKLAPPEN]

If((mx-info\r_mitte_x)^2+(my-info\r_mitte_y)^2) <info\r_radius Or Sqr((info\r_mitte_x - info\r_x)^2+(info\r_mitte_y-info\r_y)^2)<info\r_radius


ich glaub des ist falsch... (es werden alle gelöscht so ähnlich wie im ersten post angedeutet )

hab mit der sqr befehl noch nicht zu tun gehabt mal gleich OH

bin jetzt dan au weg für heut.. Essn + beach Party ^^

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

ChaosCoder

BeitragSa, Jun 09, 2007 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
lol, im so sorry Embarassed

Code: [AUSKLAPPEN]
If MouseHit(1)
   For info.ring = Each ring
      if Sqr((mx-info\r_mitte_x)^2+(my-info\r_mitte_y)^2)<info\r_radius
         ;Der User hat in den Kreis geklickt!
      endif
   next
endif


So sollte es funzen, man merkt echt dass ich in letzter zeit zuviel mit php zu tun hatte
Projekte: Geolaria | aNemy
Webseite: chaosspace.de

Dottakopf

Betreff: Danke !

BeitragSo, Jun 10, 2007 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup danke für deine Hilfe, funtzt nach einer kleinen korrektur von mir perfekt.

die Varriable radius ist falsch bennant sie müsste eingentlich Durchmesser heißen. So die kleine Korrekture ( r : 2)

Code: [AUSKLAPPEN]

If Sqr((mx-info\r_mitte_x)^2+(my-info\r_mitte_y)^2)< (info\r_radius /2)


Danke für eure Hilfe !

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

darth

BeitragSo, Jun 10, 2007 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
tsss Very Happy du solltest uns schon sagen dass dein "radius" ein durchmesser ist...
Diese Signatur ist leer.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group