Equalizer_Anzeige

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Jaronis

Betreff: Equalizer_Anzeige

BeitragMi, Feb 01, 2012 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BladeRunner

Moderator

BeitragMi, Feb 01, 2012 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Du erstellst einen balken und schreibst in 10 mal in die Liste Wink
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

BeitragMi, Feb 01, 2012 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die schnelle Hilfe!

Es funktioniert!!!! Very Happy

Fehler lag wirklich bei mir zwischen Ohren Wink

Danke
Jaronis
 

PhillipK

BeitragMi, Feb 01, 2012 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Razz

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 Smile

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group