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

Reply via email to