Sine Wave Image

BlitzPlus Forums/BlitzPlus Programming/Sine Wave Image

Grey Alien(Posted 2005) [#1]
Here is a code snippet you may find useful. Simply call it once per frame and it does all the hard work for you and looks cool! I know it can be optimised (based on the Fade Screen Speed Challenge topic) but it works for now. Try it on a medium bitmap saying something like "Game Over", it's cool.

You can modify Wave Speed before you ever call the function. I recommend value of 3!

; -----------------------------------------------------------------------------
; ccImageVerticalWave
; -----------------------------------------------------------------------------
Global ccStartDegree = 0
Global ccWaveSpeed = 1
Function ccImageVerticalWave(img%, ox, oy, amp) ; amp = amplitude (height of wave)
	;modify an image so that it waves up and down using sin
	LockBuffer ImageBuffer(img%)
	LockBuffer BackBuffer()
	Local x,y
	For x = 0 To ImageWidth(img%)-1
		;workout y offset
		off = Sin(ccStartDegree+x)*amp
		For y = ImageHeight(img%)-1 To 0 Step -1
			WritePixelFast(ox+x, oy+y+off, ReadPixelFast(x,y, ImageBuffer(img%)), BackBuffer())
		Next
	Next
	ccStartDegree = ccStartDegree + ccWaveSpeed
	If StartDegree > 360 Then StartDegree = StartDegree - 360
	UnlockBuffer ImageBuffer(img%)
	UnlockBuffer BackBuffer()
End Function