Equalizer_Anzeige
Übersicht

JaronisBetreff: Equalizer_Anzeige |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich fange gerade erst an BlitzMax zu lernen. Als ersten Versuch habe ich mir vorgenommen eine einfache Equalizer-Anzeige zu programmieren. Mein Problem besteht jetzt darin, wenn ich irgendeinen Kanal einen neuen Wert zuweise, die nachfolgenden Kanäle den gleichen Wert übernehmen. Jeder Kanal ist als Typ deklariert und in einer Liste gespeichert. Bestimmt liegt das Problem aber wiedermal zwischen den Ohren^^ aber ich komme nicht drauf! würde mich für Hilfe sehr bedanken Jaronis Code: [AUSKLAPPEN] Strict
Global zaehler:Int=0 Global farbe:Int=100 Global count:Int=0 Global balkenpos:Int=0 Global zufall:Int Global zufall2:Int Global counter:Int=0 Global zahl:Int=0 '******************************************************************** Type balken Field segmente:Int[8] '-------------------------------------------------------------------- Method New() For Local i:Int=0 To 7 segmente[i]=farbe:Int Next EndMethod '------------------------------------------------------------------ Method setzen(z:Int) ' z gibt an, wieviele Segmente beleuchtet werden For Local i=0 To z segmente[i]=255 Next For Local i=z To 7 'rest wird auf Hintergrundfarbe gesetzt segmente[i]=farbe Next EndMethod '------------------------------------------------------------------- Method updaten()' oberstes beleuchtete Segment wird abgeschwächt count=0 For Local i=7 To 0 Step-1 If segmente[i]>farbe And count=0 Then segmente[i]=segmente[i]-1 count=1 EndIf Next EndMethod '-------------------------------------------------------------------- Method zeichnen(balkenpos:Int)'aktueller Balken wird neu gezeichnet zaehler=7 For Local i=0 To 350 Step 50 SetColor 0,segmente[zaehler],0 DrawRect 100+balkenpos,100+i,20,45 zaehler=zaehler-1 Next SetColor 0,0,200 DrawText zufall,100+balkenpos,450 EndMethod '---------------------------------------------------------------- EndType '*************************************************************** Local neuerbalken:balken=New balken 'Balken erstellen Local liste:TList=New TList 'liste anlegen für alle Balken For Local i=0 To 9 liste.addlast(neuerbalken) ' und 10 davon in Liste eintragen Next Graphics 800,600 While Not KeyHit(key_escape) Cls zahl=0 counter=0 zufall2=Rnd(0,9) 'bestimmt den Balken, der neu gesetzt werden soll 'zufall=Rnd(0,7) ' Zufallszahl für die Anzahl der beleuchteten Segmente For Local b:balken= EachIn liste zufall=Rnd(0,7) ' Zufallszahl für die Anzahl der beleuchteten Segmente If counter=zufall2 Then b.setzen(zufall) EndIf b.zeichnen(zahl) b.updaten() zahl=zahl+50 counter=counter+1 Next Flip While Not KeyHit(key_space) Wend Wend |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du erstellst einen balken und schreibst in 10 mal in die Liste ![]() Du solltest stattdessen in der Schleife 10mal einen neuen Balken mit new() erstellen. Zudem würde ich dir raten ohne die Globalen zu arbeiten. |
||
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 |
Jaronis |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die schnelle Hilfe!
Es funktioniert!!!! ![]() Fehler lag wirklich bei mir zwischen Ohren ![]() Danke Jaronis |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ah, BR, du sau :<
Ich war grade am analysieren, wo hier der fehler liegt. Intressant war: Ohne die abfrage, welche balkenummer dran war, funzte es. Das lag daran, das du Zeichnen + Updates gekoppelt hattest: Jedes vermeindliche element wurde evtl geupdatet und danach gezeichnet. Ergo: Balken 1-4 zb waren auf wert "3", das 5te wurde auf 7 gesetzt -> alle nachfolgende "vermeindlichen" balken wurden ebenfalls mit 7 balken gezeichnet. Wie BR schon sagte: 10 x ein neues objekt erschaffen und dann in die liste. Aber ich würde auch eine strikte trennung von Zeichnung und Update vornehmen, auch wenn du dafür die liste 2x durcharbeiten musst. Das ist im endeffekt sauberer und wird dir später bei deiner Fehlerfindung wohl enorm helfen. Hier hättest du zb beim "updaten" einen wert gesetzt und jeder balken hätte diesen wert ausgegben. Der nächste logische schritt wäre gewesen, die werte beim zeichnen nocheinmal auszugeben und dort festzustellen, das alle balken den selben haben. Das sei dir verziehen. ABER: Auf deiner tastatur gibts so ne schicke TAB taste (unter ^, über Capslock, direkt neben Q!) Nach einem "Function, Method" wird nach links gerückt, nach if, for, while ebenso. ![]() Wenn du in ~ 10 wochen den Code nochmal liest, wirst du dir selbst die haare ausreißen. Ist er allerdings ordentlich eingerückt, erkennt man die einzelnen schritte besser und kann sie leichter nachvollziehen ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group