It is possible without using memblocks !!!
Here is what I did two years ago, with the simple models of the DBC CD :
Here is how to create the animation :
hide mouse : sync on : sync rate 60
Datei$="man2.x"
rem Lädt ein einfaches Model
load object Datei$,1
rem Löscht jegliche Animation des Modelles
clear all object keyframes 1
rem Erstellt das erste Animationsframe mit den Gliedern 9 und 10 des Modells
rotate limb 1,11,0,0,30:rotate limb 1,10,0,340,0
rotate limb 1,14,0,0,340:rotate limb 1,13,0,0,0
rotate limb 1,15,0,5,0:rotate limb 1,8,0,350,0 : set object keyframe 1,0
rem Bewegt die Glieder an eine neue Position und legt Keyframe fest
rotate limb 1,11,0,0,10:rotate limb 1,10,0,0,0
rotate limb 1,14,20,0,330:rotate limb 1,13,20,0,0
rotate limb 1,15,350,355,0:rotate limb 1,8,0,10,0 : set object keyframe 1,4
rem Bewegt die Glieder zur Ersten Stellung
rotate limb 1,11,0,0,30:rotate limb 1,10,0,340,0
rotate limb 1,14,0,0,340:rotate limb 1,13,0,0,0
rotate limb 1,15,0,5,0:rotate limb 1,8,0,350,0 : set object keyframe 1,8
rem Startet die Animation
loop object 1
rem Kamera nach hinten bewegen
while spacekey()=0
center text 320,20,"DRÜCKEN SIE SPACE UM DIE ANIMATION ABZUSPEICHERN" : sync
OldCamAngleY# = CameraAngleY#
OldCamAngleX# = CameraAngleX#
CameraAngleY# = WrapValue(CameraAngleY#+MousemoveX()*0.2)
CameraAngleX# = WrapValue(CameraAngleX#+MousemoveY()*0.2)
Rem Control input for camera
If Upkey()=1
X# = Newxvalue(X#,CameraAngleY#,1)
Z# = Newzvalue(Z#,CameraAngleY#,1)
Endif
If Downkey()=1
X# = Newxvalue(X#,Wrapvalue(CameraAngleY#-180),1)
Z# = Newzvalue(Z#,Wrapvalue(CameraAngleY#-180),1)
Endif
Yrotate camera CurveAngle(CameraAngleY#,OldCamAngleY#,24)
Xrotate camera CurveAngle(CameraAngleX#,OldCamAngleX#,24)
Position Camera X#,Y#,Z#
Rem Refresh Screen
Sync
rem Benutzerinformationen
set text size 28
endwhile
while spacekey()=1 : endwhile
rem Animation zwecks speichern anhalten
stop object 1
rem Animation in Animationsdatei abspeichern
save object animation "myanim.dat",1
rem Keyframes manuell löschen
for t=0 to 10
clear object keyframe 1,t
next t
rem Objekt löschen
delete object 1
rem Lädt einfaches Modell
load object Datei$,1
position camera 0,100,-200
point camera 0,100,0
rem Alte Animaton ansehen
set text size 32
while spacekey()=0
center text 320,20,"ALTE ANIMATION DES MODELLS" : sync
endwhile
rem Alte Animation entfernen
clear all object keyframes 1
rem So eben erstellte Animation an das Modell hinzufügen
append object animation Datei$,"myanim.dat",1,0
rem Hintergrund und Kamera zurücksetzen
color backdrop rgb(0,128,0)
position camera 0,100,-200
point camera 0,100,0
rem Neue Animation ansehen
set text size 50 : loop object 1
do : center text 320,20,"ANGEPASSTE ANIMATION!" : sync : loop
Here is how to read the animation and get it on your object :
Sync On
Sync Rate 30
hide mouse
Backdrop on
Set camera range 1,5000
Fog on
Fog distance 4000
Fog color RGB(128,128,128)
Color Backdrop RGB(128,128,128)
Rem make matrix
Make matrix 1,10000,10000,20,20
Rem texture matrix
Load image "grass09.bmp",1
Prepare matrix texture 1,1,1,1
Fill matrix 1,0,1
Delete image 1
rem Randomize the matrix
randomize matrix 1,125
X#=5000
Z#=5000
rem Lädt ein einfaches Model
load object "man2.x",1
append object animation "man2.x","myanim.dat",1,0
loop object 1
load object "beaker.x",2
rotate object 1,180,0,0
scale object 1,500,500,500
mX# = 5070
mZ# = 5070
mY# = Get Ground Height(1,5070,5070)+50
rotate object 1,0,180,0
Position Object 1,mX#,mY#,mZ#
l# = Get Ground Height(1,5000,5025)+ 50
scale object 2,1000,1000,1000
ghost object on 2
Position Object 2,5000,l#,5025
Rem Main loop
Do
x=x+5:if x=360 then x =0
rotate object 2,0,x,30
OldCamAngleY# = CameraAngleY#
OldCamAngleX# = CameraAngleX#
CameraAngleY# = WrapValue(CameraAngleY#+MousemoveX()*0.2)
CameraAngleX# = WrapValue(CameraAngleX#+MousemoveY()*0.2)
Rem Control input for camera
If Upkey()=1
XTest# = Newxvalue(X#,CameraAngleY#,10)
ZTest# = Newzvalue(Z#,CameraAngleY#,10)
If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
X#=XTest#
Z#=ZTest#
Endif
Endif
If Downkey()=1
XTest# = Newxvalue(X#,Wrapvalue(CameraAngleY#-180),10)
ZTest# = Newzvalue(Z#,Wrapvalue(CameraAngleY#-180),10)
If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
X#=XTest#
Z#=ZTest#
Endif
Endif
If Leftkey()=1
XTest# = Newxvalue(X#,Wrapvalue(CameraAngleY#-90),10)
ZTest# = Newzvalue(Z#,Wrapvalue(CameraAngleY#-90),10)
If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
X#=XTest#
Z#=ZTest#
Endif
Endif
If Rightkey()=1
XTest# = Newxvalue(X#,Wrapvalue(CameraAngleY#+90),10)
ZTest# = Newzvalue(Z#,Wrapvalue(CameraAngleY#+90),10)
If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
X#=XTest#
Z#=ZTest#
Endif
Endif
Yrotate camera CurveAngle(CameraAngleY#,OldCamAngleY#,24)
Xrotate camera CurveAngle(CameraAngleX#,OldCamAngleX#,24)
Y# = Get ground height(1,X#,Z#)
Position Camera X#,Y#+50,Z#
gosub Lookman
Rem Refresh Screen
Sync
Loop
rem wenn man auf den mann guckt
Lookman:
INK RGB(255,0,0),0
set cursor 0,0:print "Aziotou Software"
set cursor 30,12:print "AziSoft"
PDist=Sqrt((mX# - X#)^2 + (mY#+25 - Y#)^2 + (mZ# - Z#)^2)
if PDist<100
INK RGB(100,155,100),0
set cursor 350,180:print "Je m'appelle Al Chemie."
set cursor 350,192:print "Venez découvrir la chimie avec moi !"
endif
return
Sorry, the Rems are in German, but the main code is in.
- Mind the gap -
