examples/animate: update animation demo
This commit is contained in:
parent
6c27b78c4a
commit
fdc5d05d64
4 changed files with 60 additions and 8 deletions
|
|
@ -15,6 +15,8 @@ type PictData = record
|
||||||
frameCount:integer;
|
frameCount:integer;
|
||||||
frameTime:integer;
|
frameTime:integer;
|
||||||
frameLeft:integer;
|
frameLeft:integer;
|
||||||
|
moveTime:integer;
|
||||||
|
moveLeft:integer;
|
||||||
changed:boolean;
|
changed:boolean;
|
||||||
frame:array [0..3] of SpritePixels;
|
frame:array [0..3] of SpritePixels;
|
||||||
end;
|
end;
|
||||||
|
|
@ -25,6 +27,8 @@ var pic:PictData;
|
||||||
ch:char;
|
ch:char;
|
||||||
stickMan:Sprite;
|
stickMan:Sprite;
|
||||||
rocket:Sprite;
|
rocket:Sprite;
|
||||||
|
rocket2:Sprite;
|
||||||
|
rocket3:Sprite;
|
||||||
|
|
||||||
procedure WaitVSync; external;
|
procedure WaitVSync; external;
|
||||||
|
|
||||||
|
|
@ -55,6 +59,7 @@ end;
|
||||||
procedure animateSprite(var aSprite:Sprite);
|
procedure animateSprite(var aSprite:Sprite);
|
||||||
var frameIndex:integer;
|
var frameIndex:integer;
|
||||||
frameTime,frameLeft:integer;
|
frameTime,frameLeft:integer;
|
||||||
|
moveTime,moveLeft:integer;
|
||||||
ydelta:integer;
|
ydelta:integer;
|
||||||
oldX,oldY:integer;
|
oldX,oldY:integer;
|
||||||
begin
|
begin
|
||||||
|
|
@ -62,6 +67,8 @@ begin
|
||||||
frameIndex := aSprite.curFrame;
|
frameIndex := aSprite.curFrame;
|
||||||
frameTime := aSprite.frameTime;
|
frameTime := aSprite.frameTime;
|
||||||
frameLeft := aSprite.frameLeft;
|
frameLeft := aSprite.frameLeft;
|
||||||
|
moveTime := aSprite.moveTime;
|
||||||
|
moveLeft := aSprite.moveLeft;
|
||||||
oldX := aSprite.x; oldY := aSprite.y;
|
oldX := aSprite.x; oldY := aSprite.y;
|
||||||
aSprite.oldX := oldX; aSprite.oldY := oldY;
|
aSprite.oldX := oldX; aSprite.oldY := oldY;
|
||||||
|
|
||||||
|
|
@ -69,16 +76,19 @@ begin
|
||||||
if frameLeft <= 0 then
|
if frameLeft <= 0 then
|
||||||
begin
|
begin
|
||||||
frameIndex := frameIndex + 1;
|
frameIndex := frameIndex + 1;
|
||||||
frameLeft := aSPrite.frameTime;
|
frameLeft := aSprite.frameTime;
|
||||||
aSprite.frameLeft := frameLeft;
|
aSprite.frameLeft := frameLeft;
|
||||||
aSprite.curFrame := frameIndex;
|
aSprite.curFrame := frameIndex;
|
||||||
if frameIndex >= aSprite.frameCount then
|
if frameIndex >= aSprite.frameCount then
|
||||||
aSprite.curFrame := 0;
|
aSprite.curFrame := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
aSprite.frameLeft := frameLeft;
|
moveLeft := moveLeft -1;
|
||||||
|
if moveLeft <= 0 then
|
||||||
|
begin
|
||||||
aSprite.x := aSprite.x + aSprite.xdelta;
|
aSprite.x := aSprite.x + aSprite.xdelta;
|
||||||
aSprite.y := aSprite.y + aSprite.ydelta;
|
aSprite.y := aSprite.y + aSprite.ydelta;
|
||||||
|
moveLeft := moveTime;
|
||||||
|
|
||||||
if aSprite.x > 608 then aSprite.x := 0;
|
if aSprite.x > 608 then aSprite.x := 0;
|
||||||
|
|
||||||
|
|
@ -88,30 +98,57 @@ begin
|
||||||
aSprite.x := 0;
|
aSprite.x := 0;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
aSprite.frameLeft := frameLeft;
|
aSprite.frameLeft := frameLeft;
|
||||||
|
aSprite.moveLeft := moveLeft;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure animLoop;
|
procedure animLoop;
|
||||||
var i:integer;
|
var i:integer;
|
||||||
oldX,oldY:integer;
|
oldX,oldY:integer;
|
||||||
roldX,roldY:integer;
|
roldX,roldY:integer;
|
||||||
|
r2oldX,r2oldY:integer;
|
||||||
|
r3oldX,r3oldY:integer;
|
||||||
begin
|
begin
|
||||||
stickMan.x := 0;
|
stickMan.x := 0;
|
||||||
stickMan.y := 310;
|
stickMan.y := 322;
|
||||||
stickMan.frameTime := 6;
|
stickMan.frameTime := 6;
|
||||||
stickMan.frameLeft := stickMan.frameTime;
|
stickMan.frameLeft := stickMan.frameTime;
|
||||||
stickMan.curFrame := 0;
|
stickMan.curFrame := 0;
|
||||||
stickMan.xdelta := 2;
|
stickMan.xdelta := 2;
|
||||||
stickMan.ydelta := 0;
|
stickMan.ydelta := 0;
|
||||||
|
stickMan.moveTime := 2;
|
||||||
|
stickman.moveLeft := stickMan.moveTime;
|
||||||
|
|
||||||
rocket.x := 0;
|
rocket.x := 0;
|
||||||
rocket.y := 200;
|
rocket.y := 200;
|
||||||
rocket.frameTime := 1;
|
rocket.frameTime := 5;
|
||||||
rocket.frameLeft := rocket.frameTime;
|
rocket.frameLeft := rocket.frameTime;
|
||||||
rocket.curFrame := 0;
|
rocket.curFrame := 0;
|
||||||
rocket.xdelta := 2;
|
rocket.xdelta := 3;
|
||||||
rocket.ydelta := -1;
|
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
|
while not ConAvail do
|
||||||
begin
|
begin
|
||||||
|
|
@ -121,17 +158,29 @@ begin
|
||||||
roldX := rocket.x;
|
roldX := rocket.x;
|
||||||
roldY := rocket.y;
|
roldY := rocket.y;
|
||||||
|
|
||||||
|
r2oldX := rocket2.x;
|
||||||
|
r2oldY := rocket2.y;
|
||||||
|
|
||||||
|
r3oldX := rocket3.x;
|
||||||
|
r3oldY := rocket3.y;
|
||||||
|
|
||||||
PutSprite(roldX, roldY, rocket.frame[rocket.curFrame]);
|
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]);
|
PutSprite(oldX, oldY, stickMan.frame[stickMan.curFrame]);
|
||||||
|
|
||||||
animateSprite(rocket);
|
animateSprite(rocket);
|
||||||
|
animateSprite(rocket2);
|
||||||
|
animateSprite(rocket3);
|
||||||
animateSprite(stickMan);
|
animateSprite(stickMan);
|
||||||
|
|
||||||
{Delay(1);}
|
Delay(10);
|
||||||
WaitVSync;
|
WaitVSync;
|
||||||
|
|
||||||
UndrawSprite(oldX, oldY, pic.pixeldata);
|
UndrawSprite(oldX, oldY, pic.pixeldata);
|
||||||
UndrawSprite(roldX, roldY, pic.pixeldata);
|
UndrawSprite(roldX, roldY, pic.pixeldata);
|
||||||
|
UndrawSprite(r2oldX, r2oldY, pic.pixeldata);
|
||||||
|
UndrawSprite(r3oldX, r3oldY, pic.pixeldata);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -160,5 +209,8 @@ begin
|
||||||
loadSpriteFrame(rocket, 3, infile, 3);
|
loadSpriteFrame(rocket, 3, infile, 3);
|
||||||
close(infile);
|
close(infile);
|
||||||
|
|
||||||
|
rocket2.frame := rocket.frame;
|
||||||
|
rocket3.frame := rocket.frame;
|
||||||
|
|
||||||
animLoop;
|
animLoop;
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue