This is now uploaded as a patch in the trunk. Superfro - thanx for bringing it to our attention.
cheers Rob On Sun, Nov 30, 2008 at 9:50 AM, paullaster <[EMAIL PROTECTED]> wrote: > > Thank you! Thank you! Thank you! > you saved me hours of work i bet. Thanks for the quick easy fix! > > On Nov 25, 11:55 am, superfro <[EMAIL PROTECTED]> wrote: > > There seems to be a change to the way the E4X xml parsing in Flash 10 > > and or (flash professional cs4). I can't say if its a bug, but rather > > a change in the way they do the parsing. I did some searching on > > google and found similar posts some non related to flash10/cs4... like > > this guy's example about variable names and node names colliding in > > cs4 but not cs3...issue. > > > > http://www.soundstep.com/blog/2008/11/12/flash-cs4-bug-with-xml-e4x-f... > > > > Anyway here's the issue relating to away3d. > > > > Using an example dae file from the latest checkout... square.dae > > running the project in cs3 works fine.... but in cs4 it produces these > > TypeError: Error #1009: Cannot access a property or method of a null > > object reference. errors. > > > > After some debugging it comes down to thecolladaloader ... > > > > From the latest SVN checkout of away3d.loaders.Collada.as > > > > If you goto line 793 where it says > > > > geo =collada.library_geometries.geometry.(@id == getId([EMAIL PROTECTED])) > > [0]; > > > > This is where the error occurs... geo is null... > > > > Now here's the issue, the issue is the word 'child' is being > > reserved. You can prove this by changing line 793 to.... > > > > var foo = child; > > geo =collada.library_geometries.geometry.(@id == getId([EMAIL > > PROTECTED]))[0]; > > > > further confirmed by doing these 2 tests: > > > > geo =collada.library_geometries.geometry.(@id == Debug.trace("test: > > '" + [EMAIL PROTECTED] + "'"))[0]; // output is test: '' > > > > vs > > > > var foo = child; > > geo =collada.library_geometries.geometry.(@id == Debug.trace("test: > > '" + [EMAIL PROTECTED] + "'"))[0]; // output is test: '#Cylinder-Geometry' > > > > It runs fine in that case...on cs3 and cs4... but this fix only fixes > > this one instance, you can see another example of something to break > > on line 782: > > > > parseNode(collada.library_nodes.node.(@id == getId([EMAIL PROTECTED] > ))[0], > > _objectData as ContainerData); > > > > The only proper way is to not use the keyword child as a variable (or > > using any nodename's as variables as illustrated by the url reference > > at the top), which I have done so in myCollada.as (svn diff below). > > > > I suspect there will be more issues of this nature regarding flash 10/ > > cs4 in other files/loaders/anything doing e4x syntax on xml files. It > > just so happens I spent a great amount of time debugging my dae files > > because I was getting these errors, and it turns out out this was the > > problem. So I'm finally past the dae loading hump, now trying to get > > my animation working! > > > > I didn't know the proper procedure to submit a patch_diff so excuse me > > if this is the wrong place... So its just pasted below > > > > ---------------snip patch-------------- > > Index:Collada.as > > =================================================================== > > ---Collada.as (revision 838) > > +++Collada.as (working copy) > > @@ -1,4 +1,4 @@ > > -package away3d.loaders > > +package away3d.loaders > > { > > import away3d.animators.*; > > import away3d.animators.skin.*; > > @@ -732,10 +732,10 @@ > > var arrayChild:Array > > var boneData:BoneData = (_objectData as > BoneData); > > > > - for each (var child:XML in node.children()) > > + for each (var nodeChild:XML in node.children()) > > { > > - arrayChild = getArray(child); > > - switch (child.name().localName) > > + arrayChild = getArray(nodeChild); > > + switch (nodeChild.name().localName) > > { > > case "translate": > > _transform.multiply(_transform, > > translateMatrix(arrayChild)); > > @@ -743,7 +743,7 @@ > > break; > > > > case "rotate": > > - sid = [EMAIL PROTECTED]; > > + sid = [EMAIL PROTECTED]; > > if (_objectData is BoneData && (sid == > > "rotateX" || sid == "rotateY" || sid == "rotateZ" || sid == "rotX" || > > sid == "rotY" || sid == "rotZ")) > > > boneData.jointTransform.multiply(boneData.jointTransform, > > rotateMatrix(arrayChild)); > > else > > @@ -771,26 +771,26 @@ > > //<node><node/></node> > > if(_objectData is MeshData) > > { > > - parseNode(child, > parent as ContainerData); > > + > parseNode(nodeChild, parent as ContainerData); > > }else{ > > - parseNode(child, _objectData as > ContainerData); > > + parseNode(nodeChild, _objectData as > > ContainerData); > > } > > > > break; > > > > case "instance_node": > > - > parseNode(collada.library_nodes.node.(@id == getId > > ([EMAIL PROTECTED]))[0], _objectData as ContainerData); > > + > parseNode(collada.library_nodes.node.(@id == getId > > ([EMAIL PROTECTED]))[0], _objectData as ContainerData); > > > > break; > > > > case "instance_geometry": > > - if(String(child).indexOf("lines") == -1) { > > + if(String(nodeChild).indexOf("lines") == -1) { > > > > //add materials > to materialLibrary > > - for each (instance_material in > > child..instance_material) > > + for each (instance_material in > > nodeChild..instance_material) > > > parseMaterial([EMAIL PROTECTED], > > getId([EMAIL PROTECTED])); > > > > - geo > =collada.library_geometries.geometry.(@id == getId > > ([EMAIL PROTECTED]))[0]; > > + geo > =collada.library_geometries.geometry.(@id == getId > > ([EMAIL PROTECTED]))[0]; > > > > (_objectData as MeshData).geometry = > > geometryLibrary.addGeometry([EMAIL PROTECTED], geo); > > } > > @@ -800,15 +800,15 @@ > > case "instance_controller": > > > > //add materials to > materialLibrary > > - for each > (instance_material in child..instance_material) > > + for each > (instance_material in nodeChild..instance_material) > > > parseMaterial([EMAIL PROTECTED], getId > > ([EMAIL PROTECTED])); > > > > - ctrlr > =collada.library_controllers.controller.(@id == getId > > ([EMAIL PROTECTED]))[0]; > > + ctrlr > =collada.library_controllers.controller.(@id == getId > > ([EMAIL PROTECTED]))[0]; > > geo > =collada.library_geometries.geometry.(@id == getId > > ([EMAIL PROTECTED]))[0]; > > > > (_objectData as MeshData).geometry = > > geometryLibrary.addGeometry([EMAIL PROTECTED], geo, ctrlr); > > > > - (_objectData as > MeshData).skeleton = getId(child.skeleton); > > + (_objectData as > MeshData).skeleton = getId(nodeChild.skeleton); > > break; > > } > > } > > > > ------------ end snip patch -------------- > -- Rob Bateman Flash Development & Consultancy [EMAIL PROTECTED] www.infiniteturtles.co.uk www.away3d.com
