diff --git a/examples/animate.pas b/examples/animate.pas index 0e4bb73..92888a2 100644 --- a/examples/animate.pas +++ b/examples/animate.pas @@ -15,6 +15,8 @@ type PictData = record frameCount:integer; frameTime:integer; frameLeft:integer; + moveTime:integer; + moveLeft:integer; changed:boolean; frame:array [0..3] of SpritePixels; end; @@ -25,6 +27,8 @@ var pic:PictData; ch:char; stickMan:Sprite; rocket:Sprite; + rocket2:Sprite; + rocket3:Sprite; procedure WaitVSync; external; @@ -55,6 +59,7 @@ end; procedure animateSprite(var aSprite:Sprite); var frameIndex:integer; frameTime,frameLeft:integer; + moveTime,moveLeft:integer; ydelta:integer; oldX,oldY:integer; begin @@ -62,6 +67,8 @@ begin frameIndex := aSprite.curFrame; frameTime := aSprite.frameTime; frameLeft := aSprite.frameLeft; + moveTime := aSprite.moveTime; + moveLeft := aSprite.moveLeft; oldX := aSprite.x; oldY := aSprite.y; aSprite.oldX := oldX; aSprite.oldY := oldY; @@ -69,16 +76,19 @@ begin if frameLeft <= 0 then begin frameIndex := frameIndex + 1; - frameLeft := aSPrite.frameTime; + frameLeft := aSprite.frameTime; aSprite.frameLeft := frameLeft; aSprite.curFrame := frameIndex; if frameIndex >= aSprite.frameCount then aSprite.curFrame := 0; + end; - aSprite.frameLeft := frameLeft; - + moveLeft := moveLeft -1; + if moveLeft <= 0 then + begin aSprite.x := aSprite.x + aSprite.xdelta; aSprite.y := aSprite.y + aSprite.ydelta; + moveLeft := moveTime; if aSprite.x > 608 then aSprite.x := 0; @@ -88,30 +98,57 @@ begin aSprite.x := 0; end; end; + aSprite.frameLeft := frameLeft; + aSprite.moveLeft := moveLeft; end; procedure animLoop; var i:integer; oldX,oldY:integer; roldX,roldY:integer; + r2oldX,r2oldY:integer; + r3oldX,r3oldY:integer; begin stickMan.x := 0; - stickMan.y := 310; + stickMan.y := 322; stickMan.frameTime := 6; stickMan.frameLeft := stickMan.frameTime; stickMan.curFrame := 0; stickMan.xdelta := 2; stickMan.ydelta := 0; - + stickMan.moveTime := 2; + stickman.moveLeft := stickMan.moveTime; rocket.x := 0; rocket.y := 200; - rocket.frameTime := 1; + rocket.frameTime := 5; rocket.frameLeft := rocket.frameTime; rocket.curFrame := 0; - rocket.xdelta := 2; + rocket.xdelta := 3; rocket.ydelta := -1; + rocket.moveTime := 1; + rocket.moveLeft := rocket.moveTime; + + rocket2.x := 50; + rocket2.y := 100; + rocket2.frameTime := 5; + rocket2.frameLeft := rocket2.frameTime; + rocket2.curFrame := 0; + rocket2.xdelta := 3; + rocket2.ydelta := -1; + rocket2.moveTime := 1; + rocket2.moveLeft := rocket2.moveTime; + + rocket3.x :=100; + rocket3.y := 50; + rocket3.frameTime := 5; + rocket3.frameLeft := rocket3.frameTime; + rocket3.curFrame := 0; + rocket3.xdelta := 3; + rocket3.ydelta := -1; + rocket3.moveTime := 1; + rocket3.moveLeft := rocket3.moveTime; while not ConAvail do begin @@ -121,17 +158,29 @@ begin roldX := rocket.x; roldY := rocket.y; + r2oldX := rocket2.x; + r2oldY := rocket2.y; + + r3oldX := rocket3.x; + r3oldY := rocket3.y; + PutSprite(roldX, roldY, rocket.frame[rocket.curFrame]); + PutSprite(r2oldX, r2oldY, rocket2.frame[rocket2.curFrame]); + PutSprite(r3oldX, r3oldY, rocket3.frame[rocket3.curFrame]); PutSprite(oldX, oldY, stickMan.frame[stickMan.curFrame]); animateSprite(rocket); + animateSprite(rocket2); + animateSprite(rocket3); animateSprite(stickMan); - {Delay(1);} + Delay(10); WaitVSync; UndrawSprite(oldX, oldY, pic.pixeldata); UndrawSprite(roldX, roldY, pic.pixeldata); + UndrawSprite(r2oldX, r2oldY, pic.pixeldata); + UndrawSprite(r3oldX, r3oldY, pic.pixeldata); end; end; @@ -160,5 +209,8 @@ begin loadSpriteFrame(rocket, 3, infile, 3); close(infile); + rocket2.frame := rocket.frame; + rocket3.frame := rocket.frame; + animLoop; end. diff --git a/examples/background.pict b/examples/background.pict index 55e7a2c..b945347 100644 Binary files a/examples/background.pict and b/examples/background.pict differ diff --git a/examples/rocket.sprt b/examples/rocket.sprt index 3108b4a..6ebbdfc 100644 Binary files a/examples/rocket.sprt and b/examples/rocket.sprt differ diff --git a/examples/walking.sprt b/examples/walking.sprt index 2cdd0ce..a4411d4 100644 Binary files a/examples/walking.sprt and b/examples/walking.sprt differ