thx, superfro [?]

2008/12/1 Rob Bateman <[EMAIL PROTECTED]>

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



-- 
katopz
http://www.sleepydesign.com

<<35D.gif>>

Reply via email to