fb:porticula NoPaste
JumpAndRun Ansatz der nicht so recht will...
Uploader: | flo |
Datum/Zeit: | 21.10.2007 12:37:17 |
'hi
'also das ding arbeitet mit blöcken... wenn da einer ist,
'sollte die figur nicht weitergehen können und nicht weiter
'fallen... geht auch, aber leider zuckelt sie manchmal durch
'die gegend...
'außerdem krieg ich manchmal grafikfehler (mit put,vlt mit
'dem line befehl immoment nicht?), und kurz darauf schmiert
'er mit speicherzugriffsfehler ab...
'geschrieben und getestet in linux
'bei fall und bewegung zu einer treppe hin (nur nach rechts, da wackelts auch) MANCHMAL 1 pixel zu tief!
'speicherzugriffsfehler oO?
#include "fbgfx.bi"
#define decs declare sub
#define decf declare function
const xlen=24,ylen=24,gravity=75
decs FigurZeichnen()
decf deltaT as double
type TPhysics 'Alles was man f�r die
x as double 'Berechnungen braucht:
y as double 'x- und y-Koordinaten,
ax as double 'Beschleunigung in
ay as double 'beide Richtungen
vx as double 'Jetzige und vorherige
vy as double 'Geschwindigkeiten
vxalt as double
vyalt as double
xalt as double
yalt as double
width as integer
height as integer
end type
dim shared Figur as TPhysics
with Figur
.x=600
.y=460
.ax=0
.ay=0
.vx=0
.vy=0
end with
dim as double dT
dim shared as fb.image ptr FigurSprite(1 to 1, 0 to 1)
dim shared as fb.image ptr FigurHG
screenres 800,600,8,2
screenset 1,0
FigurSprite(1,0)=imagecreate (20,20)
FigurSprite(1,1)=imagecreate (20,20)
FigurHG=imagecreate (20,20)
'bload "gfx\test1.bmp", FigurSprite (1,0)
'bload "gfx\test2.bmp", FigurSprite (1,1)
dim shared as byte block(1 to 34, 1 to 25)
dim as integer bx,by,obx,oby
by=1
for by=20 to 1 step -1
for bx=21-by to 32-20+by
block (bx,by)=-1
next
?bx,by
'for bx=5 to 10
' block (bx,19)=-1
'next
next
block (15,2)=-1
sleep
for bx=1 to 34
for by=1 to 25
line(bx*24-24,by*24-24)-step(24,24),7,B
if block (bx,by) then line(bx*24-24,by*24-24)-step(24,24),1,BF else line(bx*24-24,by*24-24)-step(24,24),4,B
next
next
pcopy 1,0
get (Figur.x,Figur.y)-step(19,19),FigurHG
'put (1,1),Figursprite(1,1),pset
dT=deltaT
with Figur
.x=600
.y=200
end with
bx=fix(figur.x/24)+1
by=fix(figur.y/24)+1
obx=bx:oby=by
do
sleep 10
dT=deltaT
FigurZeichnen
if multikey(&h48) and Figur.ay=0 then Figur.ay=75:Figur.vy=-75
if multikey(&h4b) then Figur.vx=-50 else if multikey(&h4d) then Figur.vx=50 else Figur.vx=0
do until inkey="" : loop
with Figur
.vx=.vx+.ax*dT
.vy=.vy+.ay*dT
.xalt=.x
.yalt=.y
.x=.x+(.vxalt+.vx)/2*dT
.y=.y+(.vyalt+.vy)/2*dT
.vxalt=.vx
.vyalt=.vy
bx=fix(fix(.x+1)/24)+1
by=fix(fix(.y)/24)+1
if .vy>0 then
if block (bx,by) and block (bx+1,by) then
.y=by*ylen-ylen-1:.vy=0:.ay=0:.vyalt=0
end if
end if
if .vx>0 then
if block(bx+1,by) or block(bx+1,by-1) then .x=bx*xlen-xlen-1:.vx=0:.ax=0:.vxalt=0
end if
bx=fix(fix(.x)/24)+1
by=fix(fix(.y)/24)+1
if .vx<0 then
if block(bx,by) or block(bx,by-1) then .x=bx*xlen:.vx=0:.ax=0:.vxalt=0
end if
bx=fix(fix(.x)/24)+1
by=fix(fix(.y)/24)+1
if .vy>0 then
if block (bx,by) or block (bx+1,by) then
.y=by*ylen-ylen-1:.vy=0:.ay=0:.vyalt=0
end if
end if
bx=fix(fix(.x)/24)+1
by=fix(fix(.y)/24)+1
if .vy<0 then
if block (bx,by-1) or block (bx+1,by-1) then .y=by*ylen:.vy=0:.ay=gravity
end if
bx=fix(fix(.x)/24)+1
by=fix(fix(.y)/24)+1
if .ay=0 then
if block(bx,by+1)=0 and block (bx+1,by+1)=0 then .ay=gravity
end if
end with
locate 1,1:?bx,by,figur.vy;" ";,figur.ay;" "
locate 2,1:?fix(1/dT) ; "FPS"
pcopy 1,0
'screensync
'vsync
loop
function deltaT as double
static altezeit as double
deltaT=timer-altezeit
altezeit=timer
end function
sub FigurZeichnen
put (Figur.xalt,Figur.yalt-24),FigurHG,pset
get (Figur.x,Figur.y-24)-step(23,23),FigurHG
'put (Figur.x,Figur.y-24),FigurSprite(1,1),or
'put (Figur.x,Figur.y-24),FigurSprite(1,0),and
line(figur.x,figur.y-24)-step(23,23),3,BF
end sub