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

Reply via email to