First, thanks to Matthias and the rest of the coders for making swftools. It's 
the most useful open-source software I've found for making flash files.

--bug:--

I've found that when you specify e.g.: ".change (object) x=-1.5" that it's 
actually animated to where -0.5 would be on the x axis.

Example code:

.flash name="changenegativebug.swf" fps=50
.box b1 10 10 fill=white color=white
.put b1 x=0
.frame 50
.change b1 x=-3
.frame 100
.change b1 x=-3.5
.frame 150
.change b1 x=-3
.frame 200
.change b1 x=0
.end

Instead of moving the box just a little to the left between frames 100 and 150, 
it moves it to the right.

--problem:--

I do some programming (mostly web programming -- PHP, CSS, HTML...) but I 
looked through the source code for 0.8.1 and I'm guessing that this is the 
problem is in swfc.c in the "parameters_t s_interpolate" function. (Lines 1856 
& 1857) The current code is:

    p.x = (p2->x-p1->x)*ratio + p1->x;
    p.y = (p2->y-p1->y)*ratio + p1->y;

so:
if p2->x = 2 and p1->x = 1 and ratio=0.5 then p.x = 1.5
if p2->x = -1.5 and p1-> = -1 and ratio=0.5 then p.x = -0.75 (!)

--patch:--

I don't do any C programming, and this is probably not the most elegant 
solution, but it demonstrates (I think) how to fix it:

if ((p2->x-p1->x)*ratio<0) {
  p.x = (p2->x-p1->x)*ratio*-1 + p1->x;
} else {
  p.x = (p2->x-p1->x)*ratio + p1->x;
}
if ((p2->y-p1->y)*ratio<0) {
   p.y = (p2->y-p1->y)*ratio*-1 + p1->y;
 } else {
   p.y = (p2->y-p1->y)*ratio + p1->y;
 }


Hopefully this very verbose (maybe too verbose) bug report helps.


Thanks again for the awesome swf tools.
Jon

       
---------------------------------
You rock. That's why Blockbuster's offering you one month of Blockbuster Total 
Access, No Cost.

Reply via email to