TransparentSpriteColor

Anfängerfragen zum Programmieren mit PureBasic.
Yoshi
Beiträge: 95
Registriert: 09.01.2007 16:42

Beitrag 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?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

...bitte beachte auch mein posting... :roll:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Yoshi
Beiträge: 95
Registriert: 09.01.2007 16:42

Beitrag 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...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
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.
Yoshi
Beiträge: 95
Registriert: 09.01.2007 16:42

Beitrag von Yoshi »

Ja.

Muss ich den Code jetzt einfach einfügen oder muss ich da jetzt noch was hinzufügen bzw. abändern?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

öhm...

du musst denken beim proggen...

sorry, das ist unvermeidlich.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Yoshi
Beiträge: 95
Registriert: 09.01.2007 16:42

Beitrag 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
Yoshi
Beiträge: 95
Registriert: 09.01.2007 16:42

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Yoshi
Beiträge: 95
Registriert: 09.01.2007 16:42

Beitrag 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:
Antworten