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 --------------
