Jon

Looking at your example .sc file the box should move to the left between frame 
1 and frame 50 then just a little bit more to the left until frame 100 then 
just a little back to the right until frame 150 and to the right again back to 
it's starting position. If I read your description correctly that is exactly 
what it does.

The code you would like to patch actually works correctly. If I insert your 
numbers I find:
p.x = (2 - 1) * 0.5 + 1 = 1.5
p.x = (-1.5 - (-1)) * 0.5 + (-1) = -1.25

There are some situations where the interpolation will fail in version 0.8.1 
(resulting in some jittering).
Please use a more recent build than version 0.8.1 if possible. The 
interpolation code for changing properties of objects in swfc has been 
completely replaced.

Thanks for your time and effort.

Regards,
Huub

Date: Sun, 6 Apr 2008 19:21:09 -0700
From: [EMAIL PROTECTED]
To: [email protected]
Subject: [Swftools-common] Bug in 0.8.1 with negative x/y changes < 1

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.
_________________________________________________________________
Probeer Live Search: de zoekmachine van de makers van MSN!
http://www.live.com/?searchOnly=true

Reply via email to