Mauszeiger auf der Sprite oder nicht? [gelöst]

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Weazle25

Betreff: Mauszeiger auf der Sprite oder nicht? [gelöst]

BeitragSo, Feb 18, 2007 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Seid Tagen bastel ich nun schon an meiner SpriteLib und es funktioniert auch alles so wie ich es möchte.
Layer und Sprites können bereits gedreht und positioniert werden.
Wobei der Drehpunkt der Sprites auch ausserhalb der Sprite liegen kann.
Und genau da liegt mein Problem: Wie kann ich herausfinden ob eine 2D-Koordinate (z.B. die Position des Mauszeigers) auf einem Sprite liegt oder nicht?


Hier ist das Problem:
Code: [AUSKLAPPEN]

Function SL_PointOverSprite( SpriteID, x#, y# )
   SP.SL_Sprite = Object.SL_Sprite( SpriteID )
   If SP = Null Then Return 0
   
   TFormPoint x#,y#,0, SP\Layer\SpriteBase\Pivot, SP\Layer\Mesh
   ;TFormPoint x,y,0, 0, SP\Layer\Mesh
   x# = TFormedX()
   y# = TFormedY()
   
   ;Die Ecken des Sprites
   x1# = VertexX( SP\Layer\Surface, SP\Vtx[0] ) ; oben links
   y1# = VertexY( SP\Layer\Surface, SP\Vtx[0] )
   x2# = VertexX( SP\Layer\Surface, SP\Vtx[1] ) ; oben rechts
   y2# = VertexY( SP\Layer\Surface, SP\Vtx[1] )
   x3# = VertexX( SP\Layer\Surface, SP\Vtx[2] ) ; unten links
   y3# = VertexY( SP\Layer\Surface, SP\Vtx[2] )
   x4# = VertexX( SP\Layer\Surface, SP\Vtx[3] ) ; unten rechts
   y4# = VertexY( SP\Layer\Surface, SP\Vtx[3] )
   
   ; Und wie geht's jetzt weiter?
End Function


Nur wie geht's jetzt weiter?
Hab schon mehrere fremde SpriteLibs runtergeladen und studiert und
hab echt keinen Plan was ich da jetzt machen muss.


Gruss
Weazle

PS: den kompletten Code gibts HIER (ca. 300 kb)
  • Zuletzt bearbeitet von Weazle25 am Di, Feb 20, 2007 14:28, insgesamt einmal bearbeitet

Ironstorm

Erstklassiger Contest-Veranstalter

BeitragSo, Feb 18, 2007 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir deinen Code jetzt nicht angeschaut, aber ich denke du bekommst die 2D Koordinaten deiner Sprites raus sowie die Höhe und Breite des Sprites. Wenn du diese 4 Variabeln mit dem Befehl RECTSOVERLAP verbindest könntest du das Problem lösen.

MfG
Ironstorm
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium
 

Weazle25

BeitragSo, Feb 18, 2007 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit RectsOverlap() functioniert es nicht denn wie ich oben schon geschrieben habe können Layer und Sprites gedreht werden.
RectsOverlap() functioniert aber nur dann wenn weder Layer noch Sprite gedreht wurde.

In der Theorie ist mir schon klar wie ich das machen muss:
Zuerst müssen die Vertex-Koordinaten irgendwie in Welt-Koordinaten (2D-Koordinaten) umgewandelt werden und dann muss irgendwie ausgerechnet werden ob die XY-Koordinate (Funktionsparameter) innerhalb der Vertex-Koordinaten liegt.

Nur wie setze ich das nun in die Praxis um?


Gruss
Weazle
 

coldie

BeitragMo, Feb 19, 2007 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum benutz du nicht cameraproject() ?
 

Weazle25

BeitragDi, Feb 20, 2007 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab das Problem gelöst:
Mit TFormPoint() die Vertex-Koordinaten in globale Koordinaten umwandeln.
Die globalen Koordinaten dann mit CameraProject() in Bildschirm-Koordinaten umwandeln und schon war der Rest auch kein Problem mehr.
Danke an alle die geholfen haben.


Gruss
Weazle

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group