Die Bilder oder die Gadgets als Varaible, oder Beides?Fluid Byte hat geschrieben:Du überprüfst in deinem IF/THEN block der Wert einer Konstante! Diese ändert sich aber nicht. Benutze eine normale Variabel.
TransparentSpriteColor
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
das SIND variablen
NewValue und OldValue in diesem bespiel sorgen nur dafür,
dass dein unter-part nur dann ausgeführt wird,
wenn eine veränderung gegenüber dem letzten registrierten status stattgefunden hat,
und der zusätzliche vergleich ermöglicht,
auf rechts-scrolling anders zu reagieren als auf links scrolling.
im endeffekt bewirkt dies nur, dass am ende der behandlung der momentanen veränderung,
der aktuelle wert in OldValue gespeichert wird,
damit bei einer erneuten veränderung mit dem aktuellen wert der in NewValue abgelegt wird, verglichen werden kann.
grundsätzlich kannst du keine zustände von konstanten vergleichen,
weil diese eben konstant sind.
also, damit du den zustand des gadgets,
das du mit der konstanten #ScrollBar_0 benannt hast ermitteln kannst,
musst du GetGadgetState(#ScrollBar_0) verwenden.
mit diesem rückgabewert, an eine variable übergeben,
kannst du dann entscheidungen treffen.
-----------------------------
ganz konkretbewirkt garnichts.
dein gedanke war, das objekt, das du #ScrollBar_0 genannt hast,
zu überprüfen, ob in seinem zustand ein +1 stattgefunden hat.
also, musst du erstmal seinen zustand ermitteln, das geht mit
damit du dann überprüfen kannst, ob sich der zustand geändert hat,
musst du den alten zustand rückspeichern,
und eine weile später mit einem aktuellen zustand vergleichen.
dazu dienen in meinem mini-code die variablen OldValue und NewValue.
-----------------------------
es ist immanent für programmierung, zu verstehen,
wie sich variablen verändern können aufgrund von anweisungen,
die du in jedem schleifendurchlauf vornimmst.
du nimmst sie ja nur aufgrund der tatasache vor, dass du etwas bewirken willst.....
also, dein erster schritt wäre möglicherweise, zu verstehen,
dass eine schleife etwas ist, was immer wieder von vorne bis hinten durchgeackert wird.
beim computer (jedenfalls bei prozedurelen sprachen wie PB)
gibt es keinen code, den du einmal zur kennstnis gibst, und der immer gültigkeit besitzt.
es ist nicht, wie wenn du einem menschen sagst "wenn irgendwann mal das passiert"
sondern es ist eher
"ist gerade das passiert, wenn ja, dann mach dies, andernfalls.."
und das ende der schleife bedeutet einfach
"und jetzt stelle ich dir die ganzen scheiß fragen noch mal, egal wie lange es her ist, dass ich sie das letzte mal gestellt habe"
...und irgendwann sagt er dann "yo hey, grad eben ist was passiert"
verständlicher?
typo corrected - KG
NewValue und OldValue in diesem bespiel sorgen nur dafür,
dass dein unter-part nur dann ausgeführt wird,
wenn eine veränderung gegenüber dem letzten registrierten status stattgefunden hat,
und der zusätzliche vergleich ermöglicht,
auf rechts-scrolling anders zu reagieren als auf links scrolling.
im endeffekt bewirkt dies nur, dass am ende der behandlung der momentanen veränderung,
der aktuelle wert in OldValue gespeichert wird,
damit bei einer erneuten veränderung mit dem aktuellen wert der in NewValue abgelegt wird, verglichen werden kann.
grundsätzlich kannst du keine zustände von konstanten vergleichen,
weil diese eben konstant sind.
also, damit du den zustand des gadgets,
das du mit der konstanten #ScrollBar_0 benannt hast ermitteln kannst,
musst du GetGadgetState(#ScrollBar_0) verwenden.
mit diesem rückgabewert, an eine variable übergeben,
kannst du dann entscheidungen treffen.
-----------------------------
ganz konkret
Code: Alles auswählen
If #ScrollBar_0 +1
dein gedanke war, das objekt, das du #ScrollBar_0 genannt hast,
zu überprüfen, ob in seinem zustand ein +1 stattgefunden hat.
also, musst du erstmal seinen zustand ermitteln, das geht mit
Code: Alles auswählen
variable = GetGadgetState(#ScrollBar_0)
musst du den alten zustand rückspeichern,
und eine weile später mit einem aktuellen zustand vergleichen.
dazu dienen in meinem mini-code die variablen OldValue und NewValue.
-----------------------------
es ist immanent für programmierung, zu verstehen,
wie sich variablen verändern können aufgrund von anweisungen,
die du in jedem schleifendurchlauf vornimmst.
du nimmst sie ja nur aufgrund der tatasache vor, dass du etwas bewirken willst.....
also, dein erster schritt wäre möglicherweise, zu verstehen,
dass eine schleife etwas ist, was immer wieder von vorne bis hinten durchgeackert wird.
beim computer (jedenfalls bei prozedurelen sprachen wie PB)
gibt es keinen code, den du einmal zur kennstnis gibst, und der immer gültigkeit besitzt.
es ist nicht, wie wenn du einem menschen sagst "wenn irgendwann mal das passiert"
sondern es ist eher
"ist gerade das passiert, wenn ja, dann mach dies, andernfalls.."
und das ende der schleife bedeutet einfach
"und jetzt stelle ich dir die ganzen scheiß fragen noch mal, egal wie lange es her ist, dass ich sie das letzte mal gestellt habe"
...und irgendwann sagt er dann "yo hey, grad eben ist was passiert"
verständlicher?

typo corrected - KG
Zuletzt geändert von Kaeru Gaman am 18.08.2007 18:13, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
So sieht der Code jetzt aus
Code: Alles auswählen
Procedure Open_Window_0()
If OpenWindow(#Window_0, 213, -5, 620, 470, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
ImageGadget(#Image_0, 0, 0, 599, 450, Image0)
ScrollBarGadget(#ScrollBar_0, 0, 450, 620, 20, 0, 10, 3)
ScrollBarGadget(#ScrollBar_1, 600, 0, 20, 450, 0, 10, 3, #PB_ScrollBar_Vertical)
ImageGadget(#Image_2, 190, 100, 250, 250, Image1)
EndIf
InitSprite()
If OpenWindowedScreen(WindowID(#Window_0),213,-5,620,470,0,0,0)
CreateSprite(0,250,250)
LoadSprite(0,"Parabel.bmp",0)
TransparentSpriteColor(0,RGB(0,255,0))
EndIf
EndIf
EndProcedure
If Open_Window_0()
Repeat
NewValue = GetGadgetState(#ScrollBar_0)
If NewValue <> OldValue
If NewValue > OldValue
; scrolled to the right
ElseIf NewValue < OldValue
; scrolled to the left
EndIf
OldValue = NewValue
EndIf
Until CloseWindow(#Window_0)
EndIf
End
Jetzt zeigt er mir nur noch ein Fenster mit den beiden ScrollGadgets

Code: Alles auswählen
If InitSprite() = 0
MessageRequester("Fehler!","Sprites können nicht initialisiert werden.",0)
End
EndIf
OpenWindow(0,213,-5,620,470,"test")
LoadSprite(0,"Koordsystem.bmp",0)
LoadSprite(1,"Parabel.bmp",0)
TransparentSpriteColor(1,RGB(0,255,0))
CreateGadgetList(WindowID(0))
ScrollBarGadget(0,0,450,620,20,1,100,100)
ScrollBarGadget(1,600,0,20,450,1,10,5,#PB_ScrollBar_Vertical)
Repeat
Event = WaitWindowEvent()
NewValue = GetGadgetState(0)
If NewValue <> OldValue
If NewValue > OldValue
; scrolled to the right
Else
; scrolled to the left
EndIf
OldValue = NewValue
EndIf
Until Event = #PB_Event_CloseWindow
End
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
sind wir hier bei "Versteckte Kamera"?Yoshi hat geschrieben:Jetzt zeigt er mir nur noch ein Fenster mit den beiden ScrollGadgets![]()

er zeigt GARNIX, weil der code einen grundlegenden fehler enthält:
du versuchst ein Sprite zu laden ohne einen screen zu haben.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Aber wenn ich statt oder schreibe öffnet ers gar nicht 
Code: Alles auswählen
OpenWindow()
Code: Alles auswählen
OpenScreen()
Code: Alles auswählen
OpenWindowedScreen()
