Thank you for your reply Fabrice. Yes I can preview the md2 anim travelling on the Path in Prefab.
I export the path with its animation (Export/Path for Away3D, 3.5.3 and higher). Apart from a naming issue (the Prefab-exported Path class is called PathAWpath_0, but the Prefab-exported PathAnimator class refers to AWpath_0, in line 19: super(new AWpath_0(), object3d, o). After renaming it, it works like other paths I have created, unfortunately, without the md2 doing its thing. I am using scene.updateTime() and pathAnimator.update() in the Enterframe. I've examined every post on this forum it seems on this subject and I'm pretty sure I've done everything I should, but I can't claim great coder competency, so sorry to keep banging on about this. I gingerly post my code below. It is using an imported md2 and Prefab Path and PathAnim. Could you please point out the error/s or point me in another direction of investigation? On Feb 1, 9:18 pm, Fabrice3D <[email protected]> wrote: > do you update in enterframe your animation?> the only example I have seen is > the Minotaur in the labyrinth > > Prefab does it (you can preview md2 animation following your path) and so > does Away 3.5 and 3.6 > > Fabrice > > On Feb 1, 2011, at 9:33 AM, bandy wrote: > > > > > The error I was getting when using the PathAnimator with an animated > > md2 disappeared when the class was transferred to from 3.5 to 3.6. The > > md2 now glides around on the Path, but it does not execute its own > > animation, it is still. (The only way I can get it to change locations > > while animating is to change its x,y or z values in the Enterframe. ) > > > Can someone say that they are able to do get an animated md2 to simply > > follow a Path using PathAnimator while still animating? The only > > example I have seen is the Minotaur in the labyrinth by Fabrice from a > > Extrude demo but that is using an old away3d version. I have used all > > sorts of combinations of classes exported from Prefab, different > > md2's, scene.updateTime, different methods to update the PathAnimator. > > Funnily, I see nothing on this subject anywhere, whereas I would have > > thought it would be the obvious thing to try to do before trying > > advanced character control. Is it because of limited usefulness that > > nobody is interested? Thanks for any help. > > > On Jan 27, 8:43 pm, bandy <[email protected]> wrote: > >> Thanks, I'll do so > > >> On Jan 27, 8:22 pm, Fabrice3D <[email protected]> wrote: > > >>> I do not have the time to test your code atm, but looking at your code, I > >>> see few glitches... > > >>> You feed the Path with Number3D's while its supposed to be Vector3D > >>> same applies to your init object where offset is as Number3D instead of > >>> Vector3D > >>> property aligntoPath should be alignToPath. > >>> The jpg embed, why is it static? > > >>> aside your main problem I do see lines such as horseMesh = new Mesh(); > >>> and next like its equal to the handle. > > >>> if (_keyLeft) {_view.camera.x -= > >>> 15*Math.cos(_view.camera.rotationY*Math.PI/180); > >>> don't you want to use moveLeft, moveRight here? > > >>> I think you should clean up/check your code a bit first... > >>> then comment most of it, inclusif your mouse behaviours > >>> keep just view, camera and enterframe. > > >>> first load and addchild the mesh, if no errors, > >>> generate material and asign to model, if ok > >>> generate Path object, if ok > >>> generate animator, if ok > >>> then start the animation update. > >>> if something move as expected, then add complexity with mouseEvents etc.. > > >>> if you proceed step wize like this, you will spare yourself headackes... > > >>> Fabrice > > >>> On Jan 27, 2011, at 8:12 AM, bandy wrote: > > >>>> Fabrice, thank you for the reply. I did as you suggested and combined > >>>> the initPathAnimation code and the onModelLoaded method into one > >>>> method like below, but get > >>>> Error from ZoomFocusLens? > > >>>> Error: isNaN(sz) > >>>> at away3d.cameras.lenses::ZoomFocusLens/project()[C:\Users\admin > >>>> \Adobe Flash Builder 4\CITYWALKTHROUGH\src\away3d\cameras\lenses > >>>> \ZoomFocusLens.as:106] > >>>> at away3d.core.project::MeshProjector/primitives()[C:\Users\admin > >>>> \Adobe Flash Builder 4\CITYWALKTHROUGH\src\away3d\core\project > >>>> \MeshProjector.as:152] > >>>> at away3d.core.traverse::PrimitiveTraverser/apply()[C:\Users\admin > >>>> \Adobe Flash Builder 4\CITYWALKTHROUGH\src\away3d\core\traverse > >>>> \PrimitiveTraverser.as:103] > >>>> at away3d.core.base::Object3D/traverse()[C:\Users\admin\Adobe Flash > >>>> Builder 4\CITYWALKTHROUGH\src\away3d\core\base\Object3D.as:1596] > >>>> at away3d.containers::ObjectContainer3D/traverse()[C:\Users\admin > >>>> \Adobe Flash Builder 4\CITYWALKTHROUGH\src\away3d\containers > >>>> \ObjectContainer3D.as:353] > >>>> at away3d.containers::View3D/render()[C:\Users\admin\Adobe Flash > >>>> Builder 4\CITYWALKTHROUGH\src\away3d\containers\View3D.as:964] > >>>> at testpath/onEnterFrame()[C:\Users\admin\Adobe Flash Builder > >>>> 4\CITYWALKTHROUGH\src\testpath.as:211] > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> . > > >>>> Profuse apologies that this is elementary, but you said I should only > >>>> declare something when I am sure it is fully loaded. The onModelLoaded > >>>> method is only run when the > >>>> Loader3DEvent.LOAD_SUCCESS is fired, (and the md2 loads fine before > >>>> trying to add it to the pathAnimator). Should I be checking if the > >>>> pathAnimator is loaded? ( I haven't seen code doing that). > > >>>> Code with initPathAnimation code and the onModelLoaded method > >>>> combined, as suggested by you: > > >>>> package > >>>> { > >>>> import away3d.animators.PathAnimator; > >>>> import away3d.animators.VertexAnimator; > >>>> import away3d.cameras.Camera3D; > >>>> import away3d.containers.ObjectContainer3D; > >>>> import away3d.containers.Scene3D; > >>>> import away3d.containers.View3D; > >>>> import away3d.core.base.Mesh; > >>>> import away3d.core.base.Object3D; > >>>> import away3d.core.geom.*; > >>>> import away3d.core.geom.Path; > >>>> import away3d.core.math.*; > >>>> import away3d.events.Loader3DEvent; > >>>> import away3d.loaders.Loader3D; > >>>> import away3d.loaders.Md2; > >>>> import away3d.loaders.utils.AnimationLibrary; > >>>> import away3d.materials.*; > >>>> import away3d.primitives.Cube; > >>>> import away3d.primitives.Plane; > >>>> import away3d.primitives.Sphere; > >>>> import away3d.primitives.Torus; > > >>>> import flash.display.*; > >>>> import flash.events.*; > >>>> import flash.geom.Point; > >>>> import flash.utils.getTimer; > > >>>> [SWF(backgroundColor="#cccccc", frameRate="60", quality="LOW", > >>>> width="800", height="600")] > >>>> public class testpath extends Sprite > >>>> { > >>>> [Embed(source="assets/dolphin_f.jpg" )] > >>>> private static var horse:Class; > > >>>> private var scene:Scene3D; > >>>> private var _view:View3D; > >>>> private var cam:Camera3D; > >>>> private var m_modelMaterial:BitmapFileMaterial; > > >>>> private var traveller:Object3D; > >>>> private var travellerCont:ObjectContainer3D; > >>>> private var horsePath:Path; > > >>>> private var _scrub:Boolean = false; > > >>>> private var _lastPoint:Point = new Point(); > > >>>> private var horseMesh:Mesh; > >>>> private var time:Number = 0; > > >>>> private var pathAnimator:PathAnimator; > > >>>> public function testpath(): void > >>>> { > >>>> initEngine(); > > >>>> loadModel(); > >>>> //initAnimations(); > >>>> initListeners(); > > >>>> } > > >>>> private function initEngine():void{ > >>>> cam = new Camera3D(); > >>>> ///cam.focus = 100; > >>>> //cam.zoom = 10; > >>>> //cam.x = 1000; > >>>> //cam.y = 200; > >>>> cam.z = -2000; > >>>> _view = new View3D(); > >>>> _view.x = 400; > >>>> _view.y = 300; > >>>> scene = new Scene3D(); > >>>> _view.scene = scene; > >>>> _view.camera = cam; > > >>>> cam.lookAt(scene.position); > > >>>> addChild(_view); > > >>>> } > > >>>> private function loadModel():void > >>>> { > >>>> m_modelMaterial = new > >>>> BitmapFileMaterial("assets/dolphin_f.jpg"); > > >>>> var loader:Loader3D = new Loader3D(); > >>>> var md2:Md2 = new Md2(); > >>>> md2.scaling = 8; > >>>> md2.material = m_modelMaterial; > > >>>> loader.loadGeometry("assets/dolphin.md2", md2); > > >>>> > >>>> loader.addEventListener(Loader3DEvent.LOAD_SUCCESS,onModelLoaded); > >>>> //scene.addChild(loader); > >>>> } > > >>>> private function onModelLoaded(event:Loader3DEvent):void > >>>> { > >>>> horseMesh = new Mesh(); > >>>> horseMesh = event.loader.handle as Mesh ; > >>>> trace((horseMesh ).geometryLibrary); > >>>> var animdata:AnimationLibrary = > >>>> horseMesh.animationLibrary; > >>>> var myAnim:VertexAnimator = > >>>> animdata.getAnimation("jump").animator > >>>> as VertexAnimator; > >>>> myAnim.delay = 0; > >>>> myAnim.loop = true; > >>>> myAnim.fps = 5; > >>>> myAnim.interpolate = true; > >>>> myAnim.play(); > >>>> //mesh.sortFaces = true; > >>>> //horseCont = new ObjectContainer3D(horseMesh); > >>>> horseMesh.z = 5000; > > >>>> _view.scene.addChild(horseMesh); > >>>> var objectPath:Array = new Array(); > > >>>> objectPath.push(new Number3D(-2000, 200, 0), new > >>>> Number3D(0, -400, > >>>> 600), new Number3D(2000, 200, 0)); > >>>> objectPath.push(new Number3D(2000, 200, 0), new > >>>> Number3D(0, 0, > >>>> -300), new Number3D(6000, 1500, 0)); > >>>> objectPath.push(new Number3D(6000, 1500, 0), new > >>>> Number3D(10000, > >>>> 1000, -600), new Number3D(16000, 700, 0)); > > >>>> //create the path object to be used again for the > >>>> path animator > >>>> horsePath = new Path(objectPath); > >>>> //path = new HorsePath1(); > > >>>> var init:Object = {aligntoPath:true, offset:new > >>>> Number3D(0,200,0), > >>>> rotations:null, fps:24, easein:false, easeout:false} > >>>> pathAnimator = new PathAnimator(horsePath, horseMesh > >>>> , init); > > >>>> } > > >>>> private function initListeners():void > >>>> { > >>>> addEventListener( Event.ENTER_FRAME, onEnterFrame); > > ... > > read more »- Hide quoted text - > > - Show quoted text -
