Habe ein Problem mit der Umsetzung.Ich möchte ein imageBild(Logo)
in Bewegung setzen.Das Logo soll eine umgelegte 8 abfahren.
mein code
Code: Alles auswählen
Procedure logo(bild)
Global x
Global s
Global y
StartDrawing(WindowOutput())
DrawImage(bild, x, y,400,70)
StopDrawing()
If s=0
If x<150
y=Sin(1*x)
x=x+1
Else
s=1
EndIf
Else
If x>-150
y=Sin(1*X)
x=x-1
Else
s=0
EndIf
EndIf
;Delay(1)
EndProcedure
UseJPEGImageDecoder()
OpenWindow(0,0,0,400,300,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Bild")
CreateGadgetList(WindowID())
bild.l=LoadImage(#PB_Any,"c:\test5.jpg")
bild = UseImage(bild)
NewColor = GetSysColor_(#COLOR_BTNFACE) ; #COLOR_WINDOW
NewColor = RGB(Blue(NewColor),Green(NewColor),Red(NewColor))
x=0:s=0:y=0
f=0.1
intervall = 1/f
Repeat
logo(bild)
Select WindowEvent()
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until quit
Es hat mir jemand zu dem Problem geschrieben in einem anderen Board.
Ich kann es nur nicht umsetzen


Mail:
als y-wert nimmst du den SINUS, das gibt bereits mal eine schöne auf- und abbewegung innerhalb der grenzen ±1.
als x-wert nimmst du die zeit, die aber nach dem intervall 2¶ rückwärts laufen muss bis zum ursprung.
z.b. soll dein logo in 10 sekunden eine schleife drehen:
f = 0.1 hz -> intervall = 1/f = 10 s
nach 1 s (x = 1) ist y = sin (w*t) = sin (2*¶*f*t) = sin (2 * ¶ * 0,1 * 1) = 0.588
nach 2 s (x = 2) ist y = sin (w*t) = sin (2*¶*f*t) = sin (2 * ¶ * 0,1 * 2) = 0.951
nach 2,5 s (x = 2,5) ist y = sin (w*t) = sin (2*¶*f*t) = sin (2 * ¶ * 0,1 * 2,5) = 1 (maximum!)
danach nimmt y ab, und nach 5s sind wir wieder beim nullpunkt. dann wird y negativ, und nach 10s sind wir wieder beim nullpunkt. anschliessend musst du die zeit (= x-achse) rückwärts zählen bis auf null, die y-werte können beibehalten werden usw.
um den schnittpunkt zu ändern, musst du einfach einen offset zur zeitachse addieren bzw. subtrahieren. es gibt noch viele andere möglichkeiten.
mfg Dristar