Fisheye Menu
Übersicht

![]() |
PowerProgrammerBetreff: Fisheye Menu |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo liebe Blitzer!
Ihr kennt doch sicher diese Menüleiste vom Mac mit dem Fisheye-Effekt. Sowas möchte ich gerne nachprogrammieren. Allerdings habe ich momentan ein Brett vor dem Kopf, nichts geht, wie es soll. Deshalb fange ich nochmal an. Aber ich benötige mal eure Hilfe, da ich nicht genau weiß, wie ich das machen soll, dass die Teile auseinandergehen, wenn sie größer werden. Hier habe ich mal Pseudocode: Code: [AUSKLAPPEN] Repeat
For I = 1 To AnzahlMenüpunkte // Erstmal die Distanz zu dem Objekt (Origin is die Midde) Dist = Sqr((ObjektPositionX(Obj(I))-MouseX)^2+(ObjektPositionY(Obj(I))-MouseY)^2) If Dist > MMax Then Dist = MMax If Dist < MMin Then Dist = MMin // Hier muss das jetzt berechnet werden und so Next Forever Das ist ja klar, aber wie berechne ich das nun. Kann das jemand den Ansatz auf Deutsch erklären? Naja, hab halt ein Brett vor der Birne. Vielen Dank, PowerProgrammer PS: Iwas wollte ich noch sagen, das habe ich aber vergessen. PPS: Das Forum ist auch falsch, glaube ich. |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du lässt die Objekte einfach so "drawen", dass der Abstand immer gleich groß ist, also z.b.
Code: [AUSKLAPPEN] Temp1 = 0 DrawImage item1,0,0 Temp1 = Temp1 + ImageWidth(item1) + 10,0 DrawImage item2, Temp1,0 Temp1 = Temp1 + ImageWidth(item2) + 10,0 .... So würde ichs Probieren... |
||
Starfare: Worklog, Website (download) |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jau, soweit war ich schon.
Aber dann wird das Teil nach rechts hin länger und der Linke Rand ist immer gleich. Das geht natürlich net, das Teil muss gleichmäßig zu beiden Seiten breiter werden. Und das Teil dann einfach neu zu positionieren geht auch nicht, weil sich der Button dann ja bewegt und der Abstand zum Cursor ein anderer wird. Oder habe ich nen Denkfehler? EDIT: http://interface.eyecon.ro/demos/fisheye.html <-- da gut zu sehen |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, du denkst richtig ![]() Dann probiers so: Code: [AUSKLAPPEN] type button field zoomfactor field active field image field id end type b.button = new button b\image = image1 b\active = 0 b\zoomfactor = 1 b\id = 1 ... for b.button = each button if MouseIsOver(b\image) b\active = 1 endif b\active = 1 b\zoomfactor = 3 ;-> an der stelle muss man irgendwie die zoomfaktoren der umliegenden Buttons ändern, kann man mit der ID machen, fällt mir aber grad nich ein, wie ^^ next Vielleicht kann man den Zoomfaktor noch etwas genauer mit der Cursordistanz machen.. |
||
Starfare: Worklog, Website (download) |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde das ungefähr so angehen:
Code: [AUSKLAPPEN] Type Ticon field x, y, image, breite, höhe End Type for i = 1 to 5 ;**** Fünf Types zum testen erstellen next ;*** Abstand zwischen Maus und Bild messen (am besten Midhandle) for icon.Ticon = Each Ticon ;*** x, y, Breite und höhe je nach Abstand zur Maus aktualisieren next Dabei muss zu Anfang jeder Type da anfangen wo der vorhergehende aufgehört hat (logisch ![]() Edit: Da war einer schneller mit den Types ^^ Wenn Breite und Höhe gleich sind macht es auch ein einziger zoomfaktor... |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Grml, sehr nett, dass ihr euch so viel Mühe macht, aber ich habe des immernoch nicht verstanden. ICh glaube, ich brauche Hilfe mal ganz auf Deutsch mit wenig Beispielcode, damit ich das verstehe, was ihr wollt ![]() |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, wir brauchen zu jedem Bild ein Paar Informationen. Damit es keine Verwechslungen gibt und alles hübsch ordentlich ist, legen wir einen Type an.
Dann müssen wird den Abstand zwischen dem Mittelpunkt jeden Bildes und den Mauskoordinaten Messen und je nach nähe den "zoomfaktor" einstellen. Dann gegen wir alle Types durch, und ordnen sie in der richtigen größe an der richtigen Position an. Tutorials auf www.robsite.de und die Onlinehilfe von www.blitzbase.de zu Types könnten deinem Verständnis hilfreich sein ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Grml, das ist doch klar, so weit war ich schon ![]() Ich benötige Infos über das Anordnen, das habe ich noch nicht so ganz raus. Das Platzieren muss mir mal einer erklären^^ |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab da mal rasch was zusammengestümpert, weil ich das Problem recht interessant fand. Das Ganze ist sehr unsauber und auch recht spezifisch, um es allgemeiner zu nutzen wirst Du es also neu aufsetzen müssen.
Grundsätzlich wird erstmal der Abstand zu der 'Theoretischen' Position des Icons bestimmt, anhand des Abstandes dann die Grösse bestimmt. Die Grössen geben dann - aufaddiert- eine Länge des Gesamten Menubalkens. Der wird von einer Mittelposition aus gezeichnet. Die Bestimmung welcher Button gewählt ist erfolgt dann anhand der tatsächlichen Koordinaten der einzelnen Items. Ich hoffe es ist verständlich so. Code: [AUSKLAPPEN] Type TIcon Field x Field y Field zoom# Field size Field actualX End Type local mitte anz = 8 Graphics 800,600 setbuffer Backbuffer() For i = 1 To anz b.Ticon = New Ticon b\x = i*64+100 b\zoom = 1.0 b\size = 64 mitte = mitte +b\x Next mitte = mitte /anz Repeat Cls g=Updateicons() Drawicons(g,mitte) active = GetActive() Text 0,0,g+" "+mitte+" "+active Flip Until KeyHit(1) Function Drawicons(groesse,mitte) currX = mitte - (groesse/2) For a.Ticon = Each TIcon a\actualX = currX Rect currX,a\y,a\size*a\zoom,a\size*a\zoom,0 currX = currX+(a\size*a\zoom) Next End Function Function UpdateIcons() mx = MouseX() my = MouseY() For a.Ticon = Each Ticon If dist(mx-(a\x+(a\size/2)),my-(a\y+(a\size/2))) < a\size*2 Then a\zoom = 1.0+ (2*((a\size*2)-dist(mx-(a\x+(a\size/2)),my-(a\y+(a\size/2)))))/(a\size*4) Else a\zoom = 1.0 EndIf groesse = (groesse + a\size * a\zoom) Next Return groesse End Function Function Dist#(a#,b#) Return Sqr(a^2+b^2) End Function Function GetActive() x = MouseX() y = MouseY() For a.TIcon = Each TIcon count = count +1 If x >= a\actualx And x <= a\actualx + (a\size*a\zoom) Then If y >= a\y And y <= a\y + (a\size * a\zoom) Then Return count EndIf EndIf Next Return -1 End Function EDIT: Code etwas verbessert, Globale rausgeschmissen, Backuffer hinzugefügt, Anzahl beliebig gestaltet. Danke an den nörgelnden Schweizer für den Motivationsschub. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Morgen werde ich das mal ausprobieren, vielen dank, blade.
war der nörgeler darth? Ein guter vater^^ |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group