Ja, geht schon.Green Snake hat geschrieben:geht das auch so, dass die seite rechts und links fest sind? sich also ur der inhalt verformt?
Hier mal ein einstellbares Beispiel:
Code: Alles auswählen
;
; by Danilo, 18.04.2005
;
If InitSprite()=0 Or InitKeyboard()=0
MessageRequester("ERROR","Cant initialize screen !",#MB_ICONERROR):End
EndIf
#w = 1024;1280
#h = 768;1024
#sn = "sinus"
; hier einstellen:
#wellen = 1
#wellenhoehe = 20
#speed = 0.1
#PI = 3.141592
If OpenScreen(#w,#h,32,#sn)=0
If OpenScreen(#w,#h,24,#sn)=0
If OpenScreen(#w,#h,16,#sn)=0
If OpenScreen(#w,#h,08,#sn)=0
MessageRequester("ERROR","Cant open screen !",#MB_ICONERROR):End
EndIf:EndIf:EndIf:EndIf
If CreateSprite(1,500,300)=0 : #geladen = 0
;If LoadSprite(1,"danilo.bmp")=0 : #geladen = 1
CloseScreen()
MessageRequester("ERROR","Cant load sprite !",#MB_ICONERROR):End
EndIf
CompilerIf #geladen=0
If StartDrawing(SpriteOutput(1))
Box(0,0,500,100,$080808)
Box(0,100,500,100,$0000FF)
Box(0,200,500,100,$00FFFF)
StopDrawing()
EndIf
CompilerEndIf
sw = SpriteWidth(1)
sh = SpriteHeight(1)
factor.f = #wellen*#PI/(sw*0.5)
oldtime = ElapsedMilliseconds()+20
Repeat
ExamineKeyboard()
While oldtime > ElapsedMilliseconds():Delay(1):Wend
oldtime = ElapsedMilliseconds()+20
FlipBuffers(0)
If IsScreenActive()
ClearScreen($FF,$88,$33)
y.f + #speed
If y > 2*#PI : y = 0 : EndIf
x = #w/2-sw/2
offset_y.f = Sin(y)*#wellenhoehe ; offset_y hinzugefgt fr feststehende "flagge"
For a = 0 To sw
a2.f + 2*#PI/sw
ClipSprite(1,a,0,1,sh)
DisplaySprite(1,x,(#h/2-sh/2)-offset_y.f+Sin(y+factor*a)*#wellenhoehe) ; offset_y hinzugefgt
x+1
Next a
EndIf
Until KeyboardPushed(#PB_KEY_ESCAPE)#wellen gibt an wieviele Wellen es sein sollen (1,2,3,4,5,..).
#wellenhoehe gibt den Ausschlag der Welle an.
#speed gibt die Geschwindigkeit der Wellenbewegung an.
Mehr brauchst Du eigentlich nicht.
Hoffe das hilft.