Hello!
My app really needs a couple of features that I can't seem to figure out how to do properly in Corona.
First, skewing, identical to skewing in Flash*. As far as I understand, I can do skewing as a combination of rotating and scaling. However, it seems tedious to animate a skewing animation of an object that has scales/rotations/translations as well - for example, it seems troublesome to synchronize skewing with the other changing parameters.
I think it's possible, and I will definitely try this if I don't get an answer (I've already posted this question: http://developer.anscamobile.com/forum/2010/03/01/advanced-transformations ), but it seems like such a simple thing to do if given access to the transformation matrices of objects directly. So, my question is this: is there any way to access these transformation matrices? If not, any chance skewing, or access to transformation matrices, could be made available in Corona in the near future (week-two, three tops), in a fashion that will allow me to add the parameters I need to a transition.to call?
Second, I need tints - also identical to Flash's. Actually, I also need something like a glow (or outline) filter, so perhaps I'd like a means to do pixel manipulation in Corona. However, if I could get at least tints, that'd already be great.
Another thing I was interested in is custom fonts. Is there any way to use custom fonts in Corona?
*http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/geom/Matrix.html - link to the exact skew I need =)
I spent some time with the math on how it could be possible to implement skewing by a series of scales and rotations, and I think I've proven that it's impossible (which was my first intuition, but I was reeeaaally hoping it was possible :)). It's possible to do all sorts of skew-like things - keeping parallel lines parallel and all - but the skew I need does not come from a series of rotations and scales.
So, I'm hoping that it's possible to get this feature in the nearest future. I would appreciate some comments from the devs on this: if it's a reasonable wait, I don't think we want to numb-down a lot of our existing animations.
I managed to get skewing working by nesting 4 display groups and adding the sprite to the innermost one.
What I did was to create a display object wrapper that generates the appropriate amount of nesting I needed (four in this case) and then add the display object to the inner most one.
I used the formula as defined here: http://www.eecs.berkeley.edu/~ug/slide/pipeline/assignments/as5/transforms3d.shtml#shear_rot_scale_rot_scale
Using that formula, the code looks like so (nest[1] is the outermost group and nest[4] is the innermost group):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| shearX = function(self, x)
-- an array containing references to nested display groups
-- you need to define this somewhere
local nest = self.nest
-- positive only, invert rotations for negative x
local shx = math.abs(x)
local t1 = 1 + shx
local t2 = 1 + shx + shx * shx
local t3 = 1 / t1
local a = math.atan( t3 )
local s = math.sqrt( t1 * t2 )
local b = math.atan( math.sqrt( t2 / t1 ) )
local sx = math.sqrt( t3 )
local sy = math.sqrt( 1 / t2 )
if x < 0 then
nest[1].rotation = -a
nest[3].rotation = b
else
nest[1].rotation = a
nest[3].rotation = -b
end
nest[2].xScale = 1
nest[2].yScale = s
nest[4].xScale = sx
nest[4].yScale = sy
end |