Seite 3 von 4

Verfasst: 11.08.2007 16:20
von Yoshi
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.
Die Bilder oder die Gadgets als Varaible, oder Beides?

Verfasst: 11.08.2007 17:23
von Kaeru Gaman
...bitte beachte auch mein posting... :roll:

Verfasst: 11.08.2007 17:30
von Yoshi
*schluck*

Ich weiß gar nicht was ich da machen soll.

Muss ich bei NewValue und OldValue etwas einsetzten?

Das mit den Variablen hört sich leichter an...

Verfasst: 11.08.2007 18:17
von Kaeru Gaman
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 konkret

Code: Alles auswählen

If #ScrollBar_0 +1 
bewirkt 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

Code: Alles auswählen

variable = GetGadgetState(#ScrollBar_0)
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

Verfasst: 11.08.2007 19:13
von Yoshi
Ja.

Muss ich den Code jetzt einfach einfügen oder muss ich da jetzt noch was hinzufügen bzw. abändern?

Verfasst: 11.08.2007 20:30
von Kaeru Gaman
öhm...

du musst denken beim proggen...

sorry, das ist unvermeidlich.

Verfasst: 11.08.2007 21:01
von Yoshi
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

Verfasst: 18.08.2007 17:42
von Yoshi
Jetzt zeigt er mir nur noch ein Fenster mit den beiden ScrollGadgets :freak:

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

Verfasst: 18.08.2007 18:18
von Kaeru Gaman
Yoshi hat geschrieben:Jetzt zeigt er mir nur noch ein Fenster mit den beiden ScrollGadgets :freak:
sind wir hier bei "Versteckte Kamera"? Bild

er zeigt GARNIX, weil der code einen grundlegenden fehler enthält:
du versuchst ein Sprite zu laden ohne einen screen zu haben.

Verfasst: 19.08.2007 20:35
von Yoshi
Aber wenn ich statt

Code: Alles auswählen

OpenWindow()

Code: Alles auswählen

OpenScreen()
oder

Code: Alles auswählen

OpenWindowedScreen()
schreibe öffnet ers gar nicht :shock: