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