Logikproblem -> Parameterfunktion....

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Tankbuster

Betreff: Logikproblem -> Parameterfunktion....

BeitragSo, Feb 01, 2009 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey ihr. Ich hab ein kleines Problemchen.

Und zwar geht es um ein Menü.


Ich Erstelle ein Fenster (x=-300,Y=0) mit der Y-Skalierung t*50
Das ganze beruht auf Draw3D, wo die X Achse quasi mitten durch den Bildschirm verläuft.

Mein Fenster soll bei t Einträgen dann so aussehen:

user posted image

Das mit der Skalierung ist ja kein Problem, nur die Positionierung der Einträge will irgendwie nicht.

Code: [AUSKLAPPEN]
For i=1 to t
F(i,t)=? ;F(i,t)=Y-Wert von Eintrag i bei insgesamt t Einträgen ;)
Next


Ich hab wirklich keine Ahnung, wie ich das machen soll.
Hab mir schonmal ein kleineres Modell gemacht, wo die Skalierung einfach nur t entspricht.

Bei t=3
F(1,3)=1
F(2,3)=0
F(3,3)=-1

Bei t=2
F(1,2)=.5
F(2,2)=-.5

Aber ich komme nicht so richtig dahinter, obwohl ich schon soo lang überlegt hab, und es eigentlich ganz einfach aussieht Sad

Wenn t immer konstant ist, ist es für mich auch kein Problem die Funktion zu erstellen, aber da t noch als 2ter Parameter ins Spiel kommt, weiß ich nicht, wie ich da rangehen soll.

Ich hoffe ihr könnt mir helfen.
Twitter
Download Jewel Snake!
Windows|Android

Xeres

Moderator

BeitragSo, Feb 01, 2009 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Anstatt einem Array Types nehmen. Ein Container und so viele Einträge wie du brauchst. Beim erstellen eines neuen Eintrags lässt du den Container mitwachsen.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Tankbuster

BeitragSo, Feb 01, 2009 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Nja, nur ist mein ganzes Menü mit Arrays aufgebaut. Bis jetzt hatte ich immer nur ein billiges Inferface, dass die Einträge bei z.B. Y=i*60 Angezeigt hat.

Aber jetzt will ich das ganze dynamisch positionieren, und da liegt das Problem. Ich könnte alles Hardcoden, aber ein Fenster könnte bis zu 10 Einträge haben, das ist dann ein bisschen viel Arbeit. Außerdem will ich alles schön dynamisch in meinem Code halten.
Das problem ist ja, dass ich alles immer zentriert halten will. (siehe Bild)

Bei 3 Einträgen wäre das also

Zitat:
---------
Eintrag1

Eintrag2-----------< Center

Eintrag3
--------


Bei 2 Aber

Zitat:
---------
Eintrag1
---------------------< Center
Eintrag2
--------


Ich glaube, ich bin echt zu dumm dafür >_<
Twitter
Download Jewel Snake!
Windows|Android

SpionAtom

BeitragSo, Feb 01, 2009 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du ungefähr sowas?
Code: [AUSKLAPPEN]
Graphics 640, 480, 0, 2
SetBuffer BackBuffer()

   centerY = GraphicsHeight() / 2
   menuH = 40

   Repeat
      menuH = menuH + MouseZSpeed()
      Cls: Color 50, 50, 50 ;Horizontallinien
      For i = 5 To -5 Step -1
         Rect 0, centerY - menuH * i, GraphicsWidth(), 1
         Text 0, centerY - menuH * i - 16, i
      Next: Color 255, 0, 0: Rect 0, centerY, GraphicsWidth(), 1      
      
      Color 0, 255, 0 ;Kästchen
      For i = 1 To 8
         For j = 1 To i
            Rect i * 80, centerY - (i * menuH) / 2 + (j - 1) * menuH, 60, menuH, 0
            Text i * 80, centerY - (i * menuH) / 2 + (j - 1) * menuH, j            
         Next
      Next      
      
      Flip()      
   Until KeyDown(1)
   End


Wenn ja, ist es gar nicht so schwierig, man muss nur wissen, wo der oberste Eintrag beginnt:
bei einem Menüpunkt, fängt er bei 0.5, bei 2 Menüpunkten bei 1:
1 -> 0.5
2 -> 1
3 -> 1.5
x -> x / 2

Alle Menüpunkte die unter dem obersten liegen lassen sich dann auch leicht berechnen:
MenüpunktY = ObersterMenüpunktY + MenüpunktNummer * MenüpunktHöhe.

Und dass die Nulllinie in der Mitte liegt, davon muss man sich nicht irritieren lassen. Man kann ihn auch nach ganz oben oder unten setzen (für sich), und durch eine einfache Addition verschieben.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
  • Zuletzt bearbeitet von SpionAtom am So, Feb 01, 2009 20:26, insgesamt 2-mal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Feb 01, 2009 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Du halbierst die Höhe und arbeitst damit:

Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer FrontBuffer()

Origin 400,300

Local X%,Anzahl%,HalbeHoehe#


For X=0 To 30
   For Anzahl=0 To X
      HalbeHoehe=X/2.0
      Plot X*10,(Anzahl*10)-(HalbeHoehe*10)
   Next
Next


WaitKey
End


Edit1: Zu spät...
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Tankbuster

BeitragSo, Feb 01, 2009 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah... Danke hectic und Spion, ihr habt mir wirklich weitergeholfen. Das ist genau das, was ich gesucht habe. Very Happy

Nja, jetzt wo ich es sehe, kommt mir das alles so einfach vor. nja wie auch immer. Damit ist dieses Thema wohl erledigt.
Twitter
Download Jewel Snake!
Windows|Android

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group